JAVA
아이템6. 불필요한 객체 생성을 피하라.
gracelove91
2019. 11. 27. 15:36
반응형
불필요한 객체 생성을 피하라
똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 낫다.
특히 불변 객체는 언제든 재사용할 수 있다.
대표적인 안티패턴
String str = new String("string");
- 실행될 때마다 새로운 String 인스턴스를 생성한다. 이 문장이 반복문 안이나 자주 호출되는 메소드 안에 있다면 쓸데없는 낭비다.
개선된 버전
String str = "string"
- 이 코드는 하나의 String 인스턴스를 사용한다.
- 자바스펙에 따르면 이와 똑같은 문자열 리터럴을 사용하는 모든 코드는 같은 객체를 재사용함을 보장한다.
- 생성자는 호출할 때마다 새로운 인스턴스를 만들지만, 아이템1에 나온 정적팩터리 메서드를 제공하는 불변클래스에서는 불필요한 객체 생성을 피할 수 있다.
Boolean(String) -> Boolean.valueOf(String)
오토박싱
private static long sum() { Long sum = 0L; for(long i =0; i <= Integer.MAX_VALUE; i++) { sum += i; } return sum; }
- long인 i가 Long타입인 sum에 더해질 때마다 새로운 Long타입의 인스턴스가 만들어진다.
- 기본형을 사용하자.
정리
- 재사용을 추천하지만, 위험할 수 있다. 다른 곳에서 참조해서 사용하고 있을 수도 있기 떄문. 따라서 불변객체라면 재사용에 안전하지만, 그게 아니라면 위험할 수도있으니 조심해서 사용해야한다.
반응형