Item 6. 불필요한 객체 생성을 피하라

심규환·2022년 1월 13일
0

Effective Java

목록 보기
6/29
post-thumbnail

똑같은 기능을 가진 객체를 매번 생성하는 것보다 객체 하나를 재사용하는 편이 나을 때가 많다.

다음은 불필요한 객체를 생성하는 예시들이다.

String s = new String("test"); // 따라하지 말 것

이 문장을 잘보면 왼쪽, 오른쪽 모두 객체를 생성한다. 즉, 이 문장이 실행될 때마다 하나의 객체가 더 생성된다는 것이다.
개선된 버전을 보자.

Sring s = "test";

이 코드는 새로운 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용한다. 또 JVM 안에 리터럴로 저장하여 재사용성도 높여준다.

이외에도 정적 팩터리 메서드를 사용하면 불필요한 객체 생성을 피할 수 있다.
만약 사용하려는 정규표현식이 있어서 Pattern 클래스를 사용할 경우, Pattern 인스턴스는 한번 쓰고 버려지기 때문에 재사용 할 수가 없다.
이때 Pattern 인스턴스를 클래스 초기화(정적 초기화) 과정에서 직접 생성해 캐싱해두고, 나중에 다른 메서드로 호출할 때마다 이 인스턴스를 반환해주고 사용해준다면 훨씬 효율적인 코드가 된다.

또다른 예로는 오토박싱(auto boxing)이 있다. 다음 코드를 살펴보자.

private static long sum() {
  Long sum = 0L;
  for( long i = 0; i <= Integer.MAX_VALUE; i++)
  	sum += i;
  return sum;
}

sum을 Long 타입으로 선언하고 for문의 i는 long으로 선언했다. 그러면 sum에 i 값을 넣을 때마다 long -> Long 타입의 형변환이 이루어지게 된다.
이로인해 속도 저하가 심각하게 발생하게 된다.

profile
장생농씬가?

0개의 댓글