Skip to content

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

Answered by chikeem90
chikeem90 asked this question in 3. 과제
Discussion options

You must be logged in to vote

나아가 이 방식을 사용한다면 같은 가상 머신 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장됨.

이거에 추가적으로 String을 concat할 때

String str = "hello";
str = str + "world";

이런 식으로 하게되면 매번 새로운 String 인스턴스를 생성하기 때문에 불필요하게 힙메모리를 차지하게 될 수 있음. (물론 GC 될테지만,,)
그래서 문자열 변경이 많을 때는 StringBuffer나 StringBuilder 사용 권장.
StringBuffer나 StringBuilder는 내부적으로 char array를 가지고 있어서 그 array에 계속 문자를 담아두는 형태로 동작함.
기본적으로 할당하는 char array size가 정해져있으므로 (문자열 변경이 잦지 않은 경우 비용이 더 클 수 있음) 문자열 변경이 자주 있을 때 사용하는 것이 좋음.
StringBuffer는 StringBuilder와 달리 thread-safe하므로 각 상황에 맞게 적절히 사용하는 것이 필요함.

Replies: 3 comments 6 replies

Comment options

chikeem90
Dec 12, 2022
Maintainer Author

You must be logged in to vote
6 replies
@YuDeokRin
Comment options

@chikeem90
Comment options

chikeem90 Dec 18, 2022
Maintainer Author

@chikeem90
Comment options

chikeem90 Dec 20, 2022
Maintainer Author

@chikeem90
Comment options

chikeem90 Dec 20, 2022
Maintainer Author

@corock
Comment options

Answer selected by chikeem90
Comment options

chikeem90
Dec 12, 2022
Maintainer Author

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2장 객체 생성과 파괴 이펙티브 자바 2장 (객체 생성과 파괴)
5 participants