이전

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

문자열

  • 사실상 동일한 객체라서 매번 새로 만들 필요가 없다.
  • new String(“자비”)을 사용하지 않고 문자열 리터럴 (“자바”)을 사용해 기존에 동일한 문자열을 재사용하는 것이 좋다.

정규식, Pattern

  • 생성 비용이 비싼 객체라서 반복해서 생성하기보다, 캐싱하여 재사용하는 것이 좋다.

오토박싱(auto Boxing)

  • 기본 타입(int)을 그에 상응하는 박싱된 기본 타입(Integer)으로 상호 변환해주는 기술
  • 기본 타입과 박싱된 기본 타입을 섞어서 사용하면 변환하는 과정에서 불필요한 객체가 생성될 수 있다.

“객체 생성은 비싸니 피하라.”는 뜻으로 오해하면 안 된다.

  • p31, 사용 자제 API (Deprecation)
  • p32, 정규 표현식
  • p32, 한 번 쓰고 버려져서 가비지 컬렉션 대상이 된다.
  • p33, 초기화 지연 기법 (아이템 83에서 다룸)
  • p34, 방어적 복사 (아이템 50에서 다룸)

클라이언트가 사용하지 않길 바라는 코드가 있다면…

  • 사용자제를 권장하고 대안을 제시하는 방법이 있다.
  • @Deprecated 컴파일시 경고 메시지를 통해 사용 자제를 권장하는 API라는 것을 클라이언트에 알려줄 수 있다.
  • @deprecated 문서화(javadoc)에 사용해, 왜 해당 API 사용을 지양하며, 그 대신 권장하는 API가 어떤 것인지 표기할 수 있다.
public class Deprecation {

    /**
     * @deprecated in favor of
     * {@link #Deprecation(String)}
     */
    @Deprecated(forRemoval = true, since = "1.2")
    public Deprecation() {
    }

    private String name;

    public Deprecation(String name) {
        this.name = name;
    }

}

정규 표현식

내부적으로 Pattern이 쓰이는 곳

  • String.matches(String regex)
  • String.split(String regex)
    • 대안 Pattern.complie(regex).split(str)
  • String.replace*(String regex, String replacement)
    • 대안 Pattern.compile(regex).matcher(str).replaceAll(repl)