더북(TheBook)

이를 해결하는 데 StringBuilder 클래스가 등장합니다. StringBuilder 클래스는 문자를 이어 붙이거나 빼는 등 수정할 때마다 새로운 문자열을 만들지 않고 내부 배열에서 직접 수정합니다. 문자를 이어 붙이는 것은 배열 뒤에 원소 하나를 집어넣는 것이니 상수 시간 O(1)이 기대 시간 복잡도가 됩니다.

잠깐만요

왜 시간 복잡도가 O(1)이 아니라 기대 시간 복잡도가 O(1)이 될까요? 내부적으로 배열을 사용하는 StringBuilder는 저장하는 문자열 길이가 너무 길어지면 배열 크기를 늘려 주어야 합니다. 이 과정에서 새로운 배열을 할당하고, 기존 배열 내용을 새로운 배열로 옮겨야 하기 때문에 O(N)의 시간이 소요됩니다. 하지만 이 작업은 매번 발생하지 않고 가끔 발생하므로 기대 시간 복잡도는 O(1)이 됩니다.

StringBuilder 클래스에서 자주 사용하는 메서드를 살펴봅시다.

▼ 표 4-3 자주 사용되는 StringBuilder의 메서드

메서드

역할

시간 복잡도

StringBuilder.toString()

지금까지 구성한 문자열을 String 형식으로 반환한다.

O(N)

StringBuilder.append(char c)

문자 c를 문자열 끝에 이어 붙인다.

O(1)

StringBuilder.length()

지금까지 구성한 문자열 길이를 반환한다.

O(1)

StringBuilder.reverse()

지금까지 구성한 문자열을 뒤집는다.

O(N)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.