들어가기 전 이 글은 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 아이템 9.완벽 공략 p48, 자바 퍼즐러 예외 처리 코드의 실수 p49, try-with-resources 바이트 코드 이 장에서는 위 두 가지에 대한 완벽 공략을 공부했다. 자바 퍼즐러 자바 퍼즐러는 책이다. 자바 퍼즐러에는 아래와 같은 코드가 있는데, 이렇게 작성된 코드는 안전한 코드인지 아닌지에 대해서 많은 사람들이 헷갈려한다. 이 부분은 자원을 중첩으로 사용하고 해제하는데 있어서 try - finally 문의 약점을 보여준다. 이렇게 했을 때 안전한 코드일까? 이 코드는 안전하지 않은 코드다. 왜냐하면 다음 상황이 발생할 수 있기 때문이다. out.close()를 하다가 발생하는 에러는 catch 절에서 IOExce..
핵심정리 클라이언트 코드가 필드를 직접 사용하면 캡슐화의 장점을 제공하지 못한다. 필드를 변경하려면 필드를 사용하는 모든 API를 변경해야 한다. (변경 범위가 넓다) 필드에 접근할 때 부수 작업을 할 수 없다. (Validation 등의 작업) package-private 클래스 또는 private 중첩 클래스라면 데이터 필드를 노출해도 문제가 없다. 그럼에도 불구하고 필드에 바로 접근하는 것은 좋지 않다. 내용 정리 클래스에서 사용하는 필드는 상수 필드 (public static final)을 제외하고는 public으로 사용하지 않는 것이 좋다. 아래 코드를 예시로 들면서 이해해보고자 한다. public class Point { public double x, y; public static void m..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바를 복습하며 작성한 글입니다. 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라. 아이템 15의 핵심정리는 다음과 같다. 아래에서는 필요한 내용들을 잘 정리해보고자 한다. 구현과 API를 분리하는 '정보 은닉'의 장점 클래스와 인터페이스의 접근 제한자 사용 원칙 멤버(필드, 메서드, 중첩 클래스/인터페이스)의 접근 제한자 원칙 핵심 정리1: 구현과 API를 분리하는 "정보 은닉"의 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. API를 기준으로 개발하기 때문에 API가 다 개발될 때까지 기다리지 않고 나머지를 구현하면 된다. 시스템 관리 비용을 낮춘다. 컴포넌트를 더욱 빨리 파악할 수 있기 때문이다. 공개된 AP..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 완벽 공략 p42. Finalizer 공격 (완벽공략 22) p43. AutoClosable (완벽공략 23) p45. 정적이 아닌 중첩 클래스는 자동으로 바깥 객체의 참조를 갖는다 앞에서 static으로 만들라고 했는데, 중첩 클래스로 만드는 경우.. 이해 잘 못할 수 있음. p45. 람다 역시 바깥 객체의 참조를 갖기 쉽다. 아이템 8에서 짚고 넘어가면 좋을 부분은 위의 4가지다. 이 글에서는 위의 4가지를 복습한 내용을 작성한다. p45. static이 아닌 중첩 클래스는 자동으로 바깥 객체의 참조를 갖는다. OuterClass 내부에 Inner Class가 선언된 구조를 살펴보자. 이 때, InnerClass가..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 아이템8 핵심 정리 Finalizer, Cleaner는 GC가 일어날 때 수행된다. GC가 언제 일어날지 모르기 때문에 Finalizer와 Cleaner는 즉시 수행된다는 보장이 없다. GC가 일어나도, Finalizer와 Cleaner는 정상동작 하지 않을 수 있다. finalizer 동작 중에 예외가 발생하면 정리 작업이 처리되지 않을 수도 있다. finalizer와 cleaner는 심각한 성능 문제가 있다. finalizer는 보안 문제가 있다. Finalizer Attck이 가능하다. 반납할 자원이 있는 클래스는 AutoClosable을 구현하고 클라이언트에서 close()를 호출하거나 try-with-resource를 사용..