DEV/JAVA

String, StringBuffer, StringBuilder에 대한 설명

wooki4307 2021. 7. 17. 21:00

필이 받아 연속으로 두번째 질문을 적어보겠다.

 

String / StringBuffer / StringBuilder 에 대해 어떤 차이가 있나?

 

String에 대한 자세한 글은 이전 글을 참조 바랍니다.

https://wooki92.tistory.com/13

 

String에 대하여...

1차 면접을 봤었다. 면접진행 중 나를 당황스럽게 하는 질문이 몇가지가 있었는데 면접이후 이거에 대해 심도있게 확인해본 경험이 없어 이제 같이 확인을 하고 잊지 않기 위해 적고, 남기려고

wooki92.tistory.com

그러면! 위의 질문의 요지는 뭐였을까...?

 

우선 나는 Back-End개발자로 지원을 하였고, 그에 대해 통신이 중요하여 여러 문자열 처리방식에 사용되는 변수들에 대해 질문 했던거 같다.

 

우선 설명에 앞서 API문서에서 뭐라고 설명 나왔는지 한번 살펴보자

 

대략적인 내용은 문자열을 표현하기 위해 사용하는 클래스라고 한다. 

 

두번째 줄의 표현이 중요할 거 같다.

 

" 문자열은 일정하기 때문에 생성후에 값 변경이 불가능하고 변경할 수 없어서 공유가 불가능하다. "

 

한가지 반문이 생긴다.

 

"문자열끼리 더하면 두개 이어진 문자열이 생기는데?"

 

이또한 API문서에 다음과 같이 나와있다!

 

문자열의 연결은 StringBuilder 혹은 StringBuffer의 추가 메소드를 통해 진행이 된다고 한다.

 

요약하자면 '+'연산자로 돌면 연결하는데 특별한 지원을 하는데 그게 StringBuilder나 StringBuffer의 메소드를 통해서 내부적으로 진행되는거야~ 라고 이해하면 될 것이다.

 

그렇다면 StringBuilder와 StringBuffer는 무엇이고 어떤 역할을 할것인가?

 

StringBuffer와 StringBuilder의 경우 가장 큰 차이점이 존재한다.

 

Thread-Safe

 

Thread처리에 있어서 신뢰성이 보장되냐 보장이 되지 않느냐. 동기화방식이냐 비동기 방식이냐.

 

한마디로 다중스레드에서 사용하냐, 단일 스레드 내부에서 사용하냐의 차이에 대해 신뢰성 보장유무이다.

 

다중 스레드로 구현되어 입력받은 문자열에 대해 처리할 경우에는 StringBuffer가 좋으나 1:1구조로 단일 스레드로 구성되어 있는 환경에서는 StringBuilder가 낫다.

 

앞서 말한것 처럼 난 Back-End개발자 직무로 면접을 보았는데 그 면접관님의 질문의 요지는 다음과 같은 걸로 예상이 된다.

 

1. String의 +연산자가 왜 이어지는지 아니?

2. 스레드의 유형별로 어떤 생성자를 사용해야 유리한지 알고 있나?

 

면접의 답변은 다음과 같이 했을거 같다.

 

String의 경우 연산자에 기본적으로 StringBuilder나 StringBuffer의 메소드로 구현이 된다. StringBuffer와 StringBuilder의 경우 변경이 가능하고, 내부 버퍼의 사이즈가 능동적으로 변하지만 다중 스레드의 경우 신뢰성이 보장되는 연산자는 StringBuffer이고, 단일 스레드에서 사용해야 유용한 것이 StringBuilder이다.