Categories
컴퓨터

Effective Java 3판 읽기 02

인터넷 커뮤니티를 뒤져보면 프로그래밍 인터뷰 시 String, StringBuffer, StringBuilder 객체의 차이를 설명하라는 질문을 받았다는 글이 종종 나온다. 아는 정도에 따라 답의 깊이가 달라지겠지만 일반적으로 아래와 같이 답하면 된다. String 객체는 불가변한(Immutable) 객체이나 StringBuffer와 StringBuilder는 변경이 가능한(Mutable) 객체이다. 그리고 StringBuffer와 StringBuilder는 동기화(Synchronization) 지원 여부가 다르다. StringBuffer는 Thread-safe 하지만, StringBuilder는 Thread-safe 하지 않다. 이번에 다루는 내용은 아이템 […]

인터넷 커뮤니티를 뒤져보면 프로그래밍 인터뷰 시 String, StringBuffer, StringBuilder 객체의 차이를 설명하라는 질문을 받았다는 글이 종종 나온다. 아는 정도에 따라 답의 깊이가 달라지겠지만 일반적으로 아래와 같이 답하면 된다.

String 객체는 불가변한(Immutable) 객체이나 StringBuffer와 StringBuilder는 변경이 가능한(Mutable) 객체이다.

그리고 StringBuffer와 StringBuilder는 동기화(Synchronization) 지원 여부가 다르다. StringBuffer는 Thread-safe 하지만, StringBuilder는 Thread-safe 하지 않다.

이번에 다루는 내용은 아이템 63에 해당하는 “문자열 연결은 느리니 주의하라”이다. String 객체의 ‘+’ 연산자로 문자열을 연결할 경우 시간 복잡도는 O(n^2) 이다. 즉, 복잡도가 기하급수적으로 늘기 때문에 반드시 피해야 한다. 반면에 StringBuilder는 시간 복잡도가 O(n) 이다.

책의 저자가 실험한 결과 입력이 동일할 때 두 객체의 속도 차이는 5.5배 ~ 6.5배가 났다고 한다. 이러한 결과를 볼 때마다 소프트웨어 마법 때문에 흥이 난다. 동일한 하드웨어를 사용하더라도 어떻게 컴퓨터와 대화를 하느냐에 따라 효율이 엄청나게 차이가 날 수 있다. 이 쪽 산업이 그렇다. 사람에 따른 생산성 차이가 엄청나다.

이번 장은 이렇게 마무리 된다.

원칙은 간단하다. 성능에 신경써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자(+)를 피하자. 대신 StringBuilder의 append 메서드를 사용하라. 문자 배열을 사용하거나, 문자열을 (연결하지 않고) 하나씩 처리하는 방법도 있다.

367쪽, 아이템 63 문자열 연결은 느리지 주의하라

Hits: 222

By 라이언양

라이언양 연구실 주인

One reply on “Effective Java 3판 읽기 02”

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다