본문 바로가기
프로그래밍 언어/Java

이펙티브 자바 - 아이템 6. 불필요한 객체 생성을 피하라

by 데브조이 2024. 8. 20.
반응형
이펙티브 자바(Effective java) 를 읽고 정리한 글입니다. 

 

같은 기능의 객체를 매번 생성하는 것 보다, 하나의 객체를 재사용하는 것이 좋다. 


불필요한 객체 생성 피하기

1. 정적 팩터리 메서드를 제공하는 불변 클래스에서는 불필요한 객체 생성을 피할 수 있다. 

 

2. 생성 비용이 비싼 객체는 캐싱하여 재사용할 수 있다. 

예를 들어 정규표현식용 Pattern 은 입력받은 정규표현식에 해당하는 유한 상태 머신을 만들어서 인스턴스 생성 비용이 높다. 

성능을 고려해서 Pattern 인스턴스를 클래스 초기화 과정에서 직접 캐싱해둘 수 있다.  

 

3. 오토박싱(auto boxing) 과정에서도 불필요한 객체가 생성될 수 있다. 

오토박싱은 원시 타입과 박싱 타입의 구분을 흐려주지만, 완전히 없애주는 것은 아니다. 

성능을 고려하여 박싱 타입보다는 원시 타입을 사용하자. 


유의할 점

1. 생성 비용이 비싸지 않은 작은 객체에 대한 생성을 피하고자 객체 풀을 만들지는 말자. 

일반적으로 자체 객체 풀은 메모리 사용량을 늘리고 성능을 떨어뜨린다.

작은 객체를 다루는 부분은 JVM 가비지 컬렉터가 더 빠르다.

 

2. 방어적 복사(defensive copy) 가 필요한 상황에서는 재사용하지 말자.

방어적 복사가 필요한 상황에서 객체를 재사용했을 때, 필요없는 객체를 반복 생성했을 때의 피해보다 훨씬 크다.

반응형