본문 바로가기
프로그래밍/Java

String vs StringBuffer vs StringBuilder

by Daniel.kwak 2019. 2. 16.

기술면접을 볼 때 만약 지원자가 Java언어를 할 줄 안다면, 빠지지 않고 나오는 단골 문제인것 같다. 이 참에 정리해준다.


1.String




-String instance는 character의 배열이며, immutable하기 때문에 생성이 되고 나면 변경할 수 없다. 

'+'를 써서 변경하는 경우는 다시 생성하는것이다.


2.StringBuffer


-멀티 쓰레드 환경에서 사용할 수 있으며, String과 같지만 변경이 가능한 character의 배열 모음이다. 

-StringBuffer의 메소드들은 synchronized 되어있으며 이로 인해 멀티 쓰레드 환경에서 safe하다.

-JDK5에서는 StringBuffer와 똑같이 동작하지만 Single Thread에 더 적합한 StringBuilder가 생겼다. synchronized 하지 않으므로 StringBuffer보다 빠르다.


3.StringBuilder

-변경이 가능한 character의 배열이다. StringBuffer의 API로부터 비롯됐지만 동기화를 보장하지 않는다. SingleThread에서 StringBuffer를 대체하기 위해 만들어졌으며 더 빠른 성능을 보인다. 



4.결론

-String은 immutable하므로 참조가 별로 없는 상황에서 synchronized하지 않는 상황에서 안전하게 사용할 수 있다.

-StringBuffer는 insert() , append()와 같은 메소드로 new를 하지 않고 문자열을 이어붙일 수 있어서 성능상 좋다고 생각할 수 있지만,

동기화를 보장해야 하므로 단순한 읽기와 같은 참조에서는 String보다 나쁜 성능을 보인다. 



5.참고

https://leegaworld.tistory.com/8

https://javacan.tistory.com/entry/39


'프로그래밍 > Java' 카테고리의 다른 글

익명 클래스(Anonymous Class)  (2) 2019.07.21
자바의 NIO  (0) 2018.12.05