[Effective Java] 2 - item 6 불필요한 객체 생성을 피하라.
item6 불필요한 객체 생성을 피하라.
객체를 재사용하기
// 생성자
String str1 = new String("hello");
위 코드가 반복문이나 자주 사용되는 메소드 내에 있다면, 객체의 수가 기하급수적으로 늘어날 것이다.
// 리터럴
String str2 = "hello";
리터럴로 생성하면 매번 객체를 다시 생성하지 않고 같은 객체를 재사용할 것이다. (String Constant Pool 에 저장된 객체를 재활용하므로) 따라서 무의미한 객체를 생성할 필요가 없다.
정적 팩터리 메서드
- 정적 팩터리 메서드를 사용해 불필요한 객체 생성을 피할 수 있다.
- 생성자는 호출할 때마다 새 객체를 만들지만, 팩터리 메서드는 기존 객체를 재활용한다.
- 가변 객체라 해도 사용 중 변경되지 않을 것임을 안다면 재사용이 가능하다.
캐싱
- 생성 비용이 비싼 객체라면 캐싱해서 재사용을 권한다.
오토박싱을 주의하라.
- 오토박싱은 기본 타입과 박싱 타입을 섞어 쓸때 자동으로 상호 변환해주는 기술이다.
- 잘못 사용하게 되면 불필요한 메모리 할당과 재할당을 반복하며 성능이 느려질 수 있다.
- 되도록 박싱 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자.
객체 생성은 비싸니 무조건 피해야한다
로 오해해서는 안된다.
- 프로그램의 명확성, 간결성, 기능을 위해 객체를 추가로 생성하는 것이라면 일반적으로 좋은 일이다.
- 너무 무거운 객체가 아니라면 객체 생성을 피하고자 객체 풀을 만들 필요는 없다.
- 방어적 복사가 필요할때 재사용했을때의 피해가 필요 없는 객체를 반복 생성했을때의 피해보다 훨씬 크므로 방어적 복사시에는 유의해야 한다.
Leave a comment