<이펙티브 자바> 2. 객체 생성과 파괴
by BFine반응형
www.yes24.com/Product/Goods/65551284
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{
~~~
}
- 짧고 간결하다, 자원을 회수해야 할경우에 사용하자
반응형
'개발서적 > 이펙티브 자바' 카테고리의 다른 글
<이펙티브 자바> 7. 람다와 스트림 (0) | 2021.01.17 |
---|---|
<이펙티브 자바> 6. 열거 타입과 애너테이션 (0) | 2021.01.15 |
<이펙티브 자바> 5. 제네릭 (0) | 2021.01.14 |
<이펙티브 자바> 4. 클래스와 인터페이스 (0) | 2021.01.12 |
<이펙티브 자바> 3. 모든 객체의 공통 메서드 (0) | 2021.01.11 |
블로그의 정보
57개월 BackEnd
BFine