HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
📚
책 정리
/
🧿
Item63 - 문자열 연결은 느리니 주의하라
🧿

Item63 - 문자열 연결은 느리니 주의하라

속성
9장
 
문자열 연결은 느리니 주의하라StringStringBuilder비교StringBuffer🧑🏻‍⚖️  결론

문자열 연결은 느리니 주의하라

  • 문자열 연결 연산자 (+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다.
  • 한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮다.
  • 하지만, 본격적으로 사용하기 시작하면 성능 저하를 감내하기 어렵게 된다.
    • 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다.

String

  • 문자열은 불변이라서 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사해야 하므로 성능 저하는 피할 수 없는 결과이다.
public String statement() { String result = ""; for(int i=0; i<numItems(); i++) { result += lineForIte(i); //문자열 연결 } return result; }

StringBuilder

  • 품목이 많을 경우 위의 코드는 심각하게 느려질 수 있다. 성능을 포기하고 싶지 않다면 String 대신 StringBuilder를 사용하도록 하자
public String statement2() { StringBuilder b = new StringBuilder(numItems() * LINE_WITDH); for(int i=0; i<numItems(); i++) { b.append(lineForItem(i)); } return b.toString(); }

비교

notion image
 
 

StringBuffer

  • StringBuilder와 비슷한 용도로 사용법도 동일하다
  • 두 클래스 모두 AbstractStringBuilder의 append 메서드를 호출하는 것은 동일하지만 StringBuffer는 sychronized가 존재한다.
  • 즉 일반적인 경우라면 StringBuilder를 사용하고 멀티스레드 환경에서 문자열 연결의 순서가 중요하다면 StringBuffer를 사용해야한다.
 

🧑🏻‍⚖️  결론

  • 성능에 신경써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자(+)를 피하도록 하자.
  • 대신 StringBuilder의 append 메서드를 사용하라.
    • 문자 배열을 사용하거나, 문자열을 연결하지 않고 하나씩 처리하는 방법도 있을 것이다.
  • 멀티스레드의 환경에서는 StringBuilder보단 StringBuffer를 고려해보자