본문 바로가기
백엔드/Java

Effective Java 맛보기 1탄

by david100gom 2019. 9. 14.

객체 생성과 파괴

  1. 생성자 대신 정적 팩토리 메서드를 고려하라.

    • 정적 팩토리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 그렇다고 하더라도 적정 팩토리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제동하던 습관이 있다면 고치자.

  2. 생성자에 매개변수가 많다면 빌더를 고려하라.

    • 생성자나 정적 팩토리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는 게 더 낫다, 매개변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다. 빌더는 점층적 생성자보다 클라이언트 코드를 읽고 쓰기가 휠씬 간결하고, 자바빈즈보다 휠씬 안전하다.

  3. private 생성자나 열거 타입으로 싱글턴임을 보증하라.

  4. 인스턴스화를 막으려거든 private 생성자를 사용하라.

  5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라.

    • 클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글톤과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다. 이 자원들을 클래스가 직접 만들게 해서도 안 된다. 대신 필요한 자원을 (혹은 그 자원을 만들어주는 팩토리를) 생성자에 (혹은 정적 팩토리나 빌더에) 넘겨주자. 의존 객체 주입이라 하는 이 기법은 클래스의 유연성, 재사용성, 테스트 용이성을 기막히게 개선해 준다.

  6. 불필요한 객체 생성을 피하라.

  7. 다 쓴 객체 참조를 해제하라.

    • 다 쓴 객체 참조를 null 로 만들어라.

  8. finalizer 와 cleaner 사용을 피하라.

    • cleaner( 자바 8까지는 finalizer) 는 안정망 역할이나 중요하지 않은 네이티브 자원 회수용으로만 사용하자. 물론 이런 경우라도 불확실성과 성능 저하에 주의해야 한다.

  9. try-finally 보다는 try-with-resources 를 사용하라.

    • 꼭 회수해야 하는 자원을 다룰 때는 try-finally 말고, try-with-resources 를 사용하자. 예외는 없다. 코드는 더 짧고 분명해지고, 만들어지는 예외정보도 휠씬 유용하다. try-finally 로 작성하면 실용적이지 못할 만큼 코드가 지저분해지는 경우라도, try-with-resources 로는 정확하고 쉽게 자원을 회수할 수 있다.

 

참조서적 : 이펙티브 자바 Effective Java 3/E (http://www.yes24.com/Product/Goods/65551284)

 

 

 

'백엔드 > Java' 카테고리의 다른 글

Effective Java 맛보기 5탄  (0) 2019.09.17
Effective Java 맛보기 4탄  (0) 2019.09.16
Effective Java 맛보기 3탄  (0) 2019.09.15
Effective Java 맛보기 2탄  (0) 2019.09.15
Spring Data Redis - Jedis vs Lettuce  (0) 2019.08.18
리팩토링  맛보기 1탄  (0) 2019.08.11
JUnit 4.5 에러  (0) 2019.03.13
Spring @Autowired 사용시 주의점  (0) 2019.03.11

댓글