면접 준비 용 자바 개념 정리 4

2018-09-23

1. try-with-resources

  • 자바 7에서 추가된 try-with-resources를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 각종 채널)의 close() 메소드를 호출해서 안전하게 리소스를 닫아준다.

1-1. 자바 6 이전 코드

  • finally 블록에서 다시 try-catch를 사용해서 close() 메소드를 예외 처리해야 하므로 다소 복잡하게 보인다.
FileInputStream fis = null;
try {
    fis = new FileInputStream("file.txt");
    ...
} catch(IOException e) {
    ...
} finally {
    if(fis != null){
        try {
            fis.close();
        } catch(IOException e){}
    }
}


1-2. 자바 7 이후 코드

  • 자바 7에서 추가된 try-with-resources를 사용하면 다음과 같이 간단해진다.
  • try 블록이 정상적으로 실행을 완료했거나 도중에 예외가 발생하게 되면 자동으로 FileInputStream의 close()메소드가 호출된다. try()에서 예외가 발생하면 우선 close()로 리소스를 닫고 catch 블록을 실행한다.
  • try-with-resources를 사용하기 위해서는 리소스 객체는 java.lang.AutoCloseable인터페이스를 구현하고 있어야 한다.
try(FileInputStream fis = new FileInputStream("file.txt")){
    ...
} catch(IOException e){
    ...
}



2. 제네릭

  • 제네릭을 사용하게 되면 컴파일 시 강한 타입 체크를 할 수 있다.
  • 타입 변환(casting)을 제거한다.
// 제네릭 사용 전
List list = new ArrayList();
list.add("hello");
String str = (String) list.get(0);

// 제네릭 사용 후
List<String> list = new ArrayList<String>();
list.add("hello");
String str = list.get(0);


  • 제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다.
public class 클래스명<T>{...}
public interface 인터페이스명<T>{...}

public class Box<T> {
  public T t;
  public T get() { return t; }
  public void set(T t) { this.t = t; }
}




참고

이것이 자바다 신용권의 Java 프로그래밍 정복