Java-익명클래스, API클래스, 컬렉션, 제네릭

2 분 소요

제어자 조합

  1. 메소드는 static과 abstract가 함께 사용될 수 없다. → static메소드는 {}블록이 있어야만 사용가능
  2. 클래스는 abstract와 final이 함께 사용될 수 없다. → final은 더이상 불변이고 abstract는 무조건 오버라이딩되어야하기 때문에 서로 모순됨.
  3. 추상메소드의 접근제어자는 private일 수가 없다. → 추상메소드는 실현클래스에서 재정의 되어야하는데 private이 붙어버리면 다른 클래스에서 접근을 할 수 없기때문이다.
  4. 메소드는 private과 final이 같이 사용될 필요가 없다. → 둘 중 하나만 써도 의미가 충분

익명 클래스 (=무명 클래스)

  • 클래스 몸체는 정의되고 이름이 없는 클래스
  • 클래스를 선언하면서 동시에 객체를 생성
  • 코드의 양을 줄일 수 있음.
  • 이름이 없기 때문에 생성자도 가질 수 없음. 둘 이상의 인터페이스를 구현할 수 없음.
      interface Remoteable {
              void turnOn();
              void turnOff();
      }
      public class AnonymousClassTest {
              public static void main(String[] args) {
                      Remoteable rc = new Remoteable() {
                              @Override
                              public void turnOn() {
                                      System.out.println("켜");
                              } // 인터페이스 구현
                              @Override
                              public void turnOff() {
                                      System.out.println("꺼");  
                              } // 인터페이스 구현
                      };
              }
      }  
    

자바 API 클래스

  • 프로그램에서 자주 사용되는 클래스 및 인터페이스 모음
  • System 클래스
    • 자바프로그램은 운영체제상에서 바로 실행되지 않고 JVM위에서 실행됨.
    • 따라서 운영체제의 모든 기능을 자바코드로 직접 접근하기 어려움.
    • System클래스를 이용하면 운영체제의 일부기능 사용 가능.
          System.currentTimeMillis();
          // 컴퓨터 시계로부터 현재 시간을 읽어서 밀리세컨 단위로 리턴
          System.nanoTime();
          // 컴퓨터 시계로부터 현재 시간을 읽어서 나노세컨 단위로 리턴
          System.getProperty("os.name");
      
  • Class 클래스
    • 클래스와 인터페이스의 메타데이터
  • String 클래스
      String s1 = new String("김명관");
      s1.charAt(0); // 0번째 문자열 추출
      s1.equals("김명관"); // 주소값의 문자열과 매개변수 문자열이 같은지 여부 
        
      String str = "자바에요";
      str.replace("자바", "java"); // 앞에있는 문자열을 뒤에 있는 문자열로 대체
      s1.indexOf("명관"); // 찾으려는 문자열 제일 앞에 있는 하나의 문자의 위치 리턴
        
      String ssn = "950930-1236456";
      ssn.substring(0, 6); // 0번째에서 6번째 문자열을 자른 나머지 문자열을 리턴
                        
      String ss = "명관,수진,지후,민경,유진";
      ss.split(","); // ,를 기준으로 문자열을 나눠서 배열에 저장할 때 쓰임.
      String [] ssArray = ss.split(",");
       for (String e : ssArray) {
           System.out.println(e);
           }
    
  • StringTokenizer 클래스
      StringTokenizer st = new StringTokenizer("hello world welcome to hell");
                      st.hasMoreTokens();
                      while(st.hasMoreTokens()) {
                              System.out.println(st.nextToken());
                      }
    
  • StringBuffer 클래스
    • 낭비를 줄여주기위한 클래스
        StringBuffer sb = new StringBuffer();
                    String str3 = sb.append("hello").append("world").toString();
                    System.out.println(str3);
      
  • Wrapper 클래스
    • 기초자료형 객체로 포장해주는 클래스
    • Integer 클래스
      • 기초자료형 int를 객체로 포장해줌.
int i = 20; // 기초자료형 - 기능이 없음
Integer i2= new Integer(20); // 박싱 : 기본타입 -> 포장객체
i2.intValue();// int값 리턴  // 언박싱 : 포장객체 -> 기본타입
                    
int i3 = Integer.parseInt("902"); // 받아온 문자열을 int형으로 바꿔주는 static메소드
String sss = i2.toString(); // 기초 자료형 -> 박싱 -> 문자열
  • Date 클래스
    • 날짜를 표현해주는 클래스
Date d = new Date();
Date d2 = new Date(System.currentTimeMillis());
System.out.println(d2);
System.out.println(d2.getDate());

컬렉션

  • 어떻게하면 자료구조를 잘 저장할까?
  • 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util패키지에 컬렉션 관련한 인터페이스와 클래스를 포함시켜 놓음.
  • 컬렉션 종류
    • List : 순서가 있는 데이터 집합을 의미
    • stack : 순서가 있는 데이터집합을 LIFO방식으로 관리하는 자료구조
    • queue
    • set
    • map
  • List 인터페이스 - 이걸 구현한 클래스는 두 개 → ArrayList 클래스, LinkedList클래스
  • ArrayList 클래스 : 데이터가 삽입, 삭제될 때마다 새로운 배열 생성 (검색이 많이 발생하는 자료는 ArrayList 자주 씀)
// ArrayList 객체 생성
ArrayList<String> list = new ArrayList<String>();

// 리스트에 자료 추가
list.add("양파");
list.add("당근");
list.add("쪽파");
    
list.get(0); // get(인덱스)-> 해당 인덱스 값 가져오기.
System.out.println(list.get(0));
for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
}
                    
list.set(1, "상추"); // 인덱스값을 뒤의 문자열로 수정
System.out.println(list); // list 안에 toString이 설정되어 있어서 바로 나옴.
  • LinkedList클래스 : 데이터가 삽입, 삭제될 때마다 해당 칸만 추가/삭제하고 기억하고 있는 위치만 변경 (수정이 많이 일어나는 자료는 LinkedList 자주 씀.)
  • 위 2개의 차이점 설명하는게 면접에 자주 나온다하네..

제네릭

  • 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 재사용하는 프로그래밍 기법
  • 제네릭은 컬렉션 라이브러리에 많이 사용
  • 객체를 생성할 때 컬렉션에 넣을 타입을 결정

카테고리:

업데이트:

댓글남기기