면접 준비 용 자바 개념 정리 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; }
}