객체 생성은 언제나 비용이 들어가기에 불필요한 객체 생성을 피하는 것이 최적화의 관점에서 좋다.

다양한 레벨에서 객체 생성을 피할 수 있다.

JVM에서는 하나의 가상 머신에서 동일한 문자열을 처리하는 코드가 여러 개 있다면, 기존 문자열 재사용

val str1 = "Lorem ipsum"
var str2 = "Lorem ipsum"
print(str1 == str2)  // true
print(str1 === str2) // true

Integer, Long처럼 박스화한 기본 자료형도 작은 경우에는 재사용된다. (Int는 -128 ~ 127 범위 캐싱)

val i1: Int? = 1
val i2: Int? = 1
print(i1 == i2)  // true
print(i1 === i2)  // true

-128 ~ 127 범위를 넛어나는 숫자는 캐시되지 않아서 false

val j1: Int? = 1234
val j2: Int? = 1234
print(j1 === j2) // false

객체 생성 비용은 항상 클까?

어떤 객체를 랩(wrap)하면 크게 세 가지 비용이 발생한다.

  1. 객체는 더 많은 용량을 차지한다.
  2. 객체의 접근에 추가적인 함수 호출이 필요하다.