You will be fine

<이펙티브 자바> 2. 객체 생성과 파괴

by BFine
반응형

www.yes24.com/Product/Goods/65551284

 

이펙티브 자바 Effective Java 3/E

자바 플랫폼 모범 사례 완벽 가이드 - Java 7, 8, 9 대응자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브

www.yes24.com

2장

2-1 생성자 대신 static을 활용하자

1. 장점

  • 이름을 가질수 있다. (생성자는 이름이 없음) => 반환될 객체의 특성을 쉽게 묘사

  • 호출할때만 인스턴스를 생성해서 성능을 향상시킬수있다.

  • 반환할 객체 클래스를 자유롭게 선택

  • 입력 매개변수에 따라 다른 클래스 객체를 반환할 수 있다

    public static Fruit buy(String addrees){~}
    public static Fruit buy(int money){~}
  • 반환할 객체 클래스가 존재 안해도 된다 (유연함을 가진다)

    => 데이터 베이스 연결 드라이버가 디비 종류가 다른데도 활용가능

2. 단점

  • 상속이 불가능하다
  • 프래그래머가 찾기 어렵다

2-2 매개 변수가 많다면 빌더를 사용하자

1. 장점

  • 선택적 매개변수가 많아도 활용 가능하다.
  • 자바빈즈 패턴(setter) 의 문제를 해결
    • 메서드 여러개 호출해야함
    • 불변으로 만들지 못함
  • 계층클래스와 함께쓰기 좋다(?)

2. 단점

  • 성능에 민감한 상황에서 빌더 비용이 문제가 될수있다.
  • 4개이상은 되어야 쓸만하다

2-3 private 생성자나 enum 타입으로 싱글턴을 보증하자

0. 방법

  • 필드로 초기화를 하고 생성자를 private로 지정한다.

    public static final Apple INSTANCE = new Apple();
    private Apple(){}
    • 클래스가 싱글턴인게 명확하게 들어난다.
    • 간결하다
  • 인스턴스를 public static 멤버로 제공한다.

    private static final Apple INSTANCE = new Apple();
    public static Apple getInstance(){return INSTANCE;}
    • 싱글턴이 아니게 변경하기 쉽다
    • 제네릭 싱글턴으로 만들기 쉽다
    • 참조하기가 쉽다 Apple ::getInstance
  • 열거타입 방식으로 만는다

    public enum Apple{
     INSTANCE;
    }
    • 직렬화 간편, 리플렉션 공격에서도 인스턴스가 생기는 일이 없다.
    • 원소가 하나뿐인 열거타입이 가장 좋은 싱글턴 방법

2-4 인스턴스화를 막으려면 private 생성자를 사용하자

  • 생성자를 명시하지 않으면 컴파일러가 자동으로 기본생성자 생성된다(추상클래스도 마찬가지)

2-5 의존 객체 주입을 사용하자

public Fruit(Apple apple){
    this.apple = apple;
}

2-6 불필요한 객체생성을 피해라

  • Strimg.matches는 성능이 중요한 상황세서 반복해 사용하기엔 적합하지않다.
    • 생성비용이 높고 사용할때마다 인스턴스를 생성한다
    • Patten을 이용하여 인스턴스를 재사용하자
  • 타입은 기본타입을 사용하자 (오토박싱을 피하자)

2-7 다 쓴 객체 참조를 해제하자

  • 자원을 다 사용했을때는 = nul 이용해서 참조를 해제하자 ( 예외적인 경우에만 )

  • 스코프 범위 내에 있을 경우에는 자동으로 자원이 해제된다.

    public void test(){
            Integer a = 10;
            ~~
            a = null;(X) 
    }
  • 캐시의 경우 HashMap보다는 WeakHashMap을 사용하자

    • HashMap은 Key 참조가 해제 되어도 메모리를 사용한다.
    • Strong Reference
      • new로 객체를 생성하면 강한 참조, GC 대상에서 제외
    • Weak Reference
      • 사라지는 시점이 GC 실행주기와 일치, 캐시할때 유용
      • WeakHashMap은 WeakRefence 구조, 키값이 참조해제 될경우 데이터도 제거됨

2-8 Finalizer 와 cleaner 사용은 피하자

2-9 try with resources 를 이용하자

1. 장점

  • 둘 이상의 자원을 쓸 경우 하나의 문제가 별로의 문제에 영향을 끼치지않는다.
finally 에서도 예외가 발생할 수 있다.

try {
 ~~~~
     try {
         (InputStream)in.read(); ==> 예외발생
     }finally{
        in.close(); ==> 예외 발생
     }
 }finally{
     ~~~
 }
  • 짧고 간결하다, 자원을 회수해야 할경우에 사용하자
반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기