공부기록

아이템6. 불필요한 객체 생성을 피하라. 본문

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타입의 인스턴스가 만들어진다.
    • 기본형을 사용하자.

정리

  • 재사용을 추천하지만, 위험할 수 있다. 다른 곳에서 참조해서 사용하고 있을 수도 있기 떄문. 따라서 불변객체라면 재사용에 안전하지만, 그게 아니라면 위험할 수도있으니 조심해서 사용해야한다.
반응형