뮤터블 객체는 생성 후 그 상태를 변경 할 수 있는 반면 이뮤터블 객체는 생성 후 그 상태를 변경 할 수 없는 객체를 말한다.
자바에서는 String 객체는 값을 변경 할 수 없는 이뮤터블 객체이다.
| String string = "Hello"; //1번 System.out.println(System.identityHashCode(str1)); // 140799417 해쉬코드 식별 값을 반환 string += "World"; //2번 System.out.println(System.identityHashCode(str1)); // 926370398 |
위에서 실행 한 2번째 코드는 다음과 같은 실행 과정을 거친다.
1. 새로운 String 객체 string 객체를 생성한다.
2. string 에 "Hello" 값을 하나씩 복사한다.
3. "Hello" 뒤에 "World" 값을 저장한다.
이렇게 하나하나 짚어가며 찾는 방식은 시간 복잡도가 O(N)이 된다.
StringBuilder클래스는 뮤터블 하므로 문자열 변경 할 때 시간 복잡도 관점에서 훨씬 효율적이다.
● 테스트 코드
public static void main(String[] args) {
String string = "Hello";
System.out.println(System.identityHashCode(string)); // 메소드는 객체를 특정 할 수 있는 식별 값을 반환
string += "World";
System.out.println(System.identityHashCode(string));
System.out.println("------------------시간복잡도 String -------------------");
long start = System.currentTimeMillis();
for(int i =1; i <= 100000; i++) {
string +=i;
}
long end = System.currentTimeMillis();
System.out.println(((end - start) / 1000.0) +"초");
System.out.println("------------------시간복잡도 StringBuilder---------------------");
long start2 = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Hello");
stringBuilder.append("World");
for(int i =1; i <= 100000; i ++) {
stringBuilder.append(i);
}
long end2 = System.currentTimeMillis();
System.out.println(((end2 - start2) / 1000.0) +"초");
long result1 = end - start;
long result2 = end2 - start2;
System.out.println("------------------StringBuilder의 속도 String에 비해 ---------------------");
long res = (result1 / result2);
System.out.println("StringBuider성능 : "+res+"배");
}
● 비교수행 결과

● 참고서적 : 코딩테스트 합격자되기(자바편)
'Java' 카테고리의 다른 글
| JAVA SOLID 개념 (0) | 2024.07.17 |
|---|---|
| JAVA 파일 읽기 및 효율적인 I/O 처리 방법 (0) | 2024.06.15 |
| Java에서 Json(Object, Array) 다루기 (0) | 2024.03.01 |
| Java 개행처리 (0) | 2024.02.28 |
| Java JDBC Connection (0) | 2024.02.24 |