less than 1 minute read

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

객체를 재사용하기

// 생성자
String str1 = new String("hello");

위 코드가 반복문이나 자주 사용되는 메소드 내에 있다면, 객체의 수가 기하급수적으로 늘어날 것이다.

// 리터럴
String str2 = "hello";

리터럴로 생성하면 매번 객체를 다시 생성하지 않고 같은 객체를 재사용할 것이다. (String Constant Pool 에 저장된 객체를 재활용하므로) 따라서 무의미한 객체를 생성할 필요가 없다.

정적 팩터리 메서드

  • 정적 팩터리 메서드를 사용해 불필요한 객체 생성을 피할 수 있다.
  • 생성자는 호출할 때마다 새 객체를 만들지만, 팩터리 메서드는 기존 객체를 재활용한다.
  • 가변 객체라 해도 사용 중 변경되지 않을 것임을 안다면 재사용이 가능하다.

캐싱

  • 생성 비용이 비싼 객체라면 캐싱해서 재사용을 권한다.

오토박싱을 주의하라.

  • 오토박싱은 기본 타입과 박싱 타입을 섞어 쓸때 자동으로 상호 변환해주는 기술이다.
  • 잘못 사용하게 되면 불필요한 메모리 할당과 재할당을 반복하며 성능이 느려질 수 있다.
  • 되도록 박싱 타입보다는 기본 타입을 사용하고, 의도치 않은 오토박싱이 숨어들지 않도록 주의하자.

객체 생성은 비싸니 무조건 피해야한다 로 오해해서는 안된다.

  • 프로그램의 명확성, 간결성, 기능을 위해 객체를 추가로 생성하는 것이라면 일반적으로 좋은 일이다.
  • 너무 무거운 객체가 아니라면 객체 생성을 피하고자 객체 풀을 만들 필요는 없다.
  • 방어적 복사가 필요할때 재사용했을때의 피해가 필요 없는 객체를 반복 생성했을때의 피해보다 훨씬 크므로 방어적 복사시에는 유의해야 한다.

Leave a comment