Java의 문자열 연산 (JDK 1.5 전후 비교)
네이버 면접 때 관련된 질문이 나왔었는데, 이걸 몰라서 정말 부끄러웠던 기억이 새록새록 납니다... 같은 무지를 반복하지 않기 위해 정리하고자 합니다
1. JDK 1.5 이전의 문자열 연산
-
JDK 1.5 이전에는 문자열에 +, concat 연산을 하면 문자열을 새로운 메모리에 할당해서 참조했습니다
-
다음과 같은 코드를 JDK 1.5 이전에서 실행한다고 가정해보겠습니다
public static void main(String[] args) {
String a = "First";
String b = "Second";
String c = "Third;
System.out.println(a + b + c);
}
이 때 힙(heap) 영역에는 다음과 같이 데이터가 쌓였습니다
(이를 참조하는 주솟값 또한 stack에 쌓일 것이고, heap 영역에 있는 이 데이터들은 GC가 호출되기 전까지 메모리에 남아있게 된다)
- 때문에 문자열 연산은 성능상 문제를 일으키는 코드였습니다.
- 그래서 이 때는 StringBuilder, 혹은 StringBuffer를 이용하는 것이 항상 더 나은 방법이었습니다
JDK 1.5 이후
- JDK 1.5 이후에는 컴파일 단계에서 String 객체가 StringBuilder로 컴파일 되어 append()를 통해 문자열 연산(+)이 이루어지도록 변경되었습니다
//컴파일 전
public static void main(String[] args) {
String a = "First";
String b = "Second";
String c = "Third;
System.out.println(a + b + c);
}
//컴파일 후, 디컴파일된 코드
public static void main(String[] args) {
String a = "First";
String b = "Second";
String c = "Third;
System.out.println(new StringBuilder(a).append(b).append(c));
}
하지만 모든 문자열 연산이 StringBuilder로 대체된 것은 아닙니다. 다음과 같은 상황에서는 매 연산마다 새로운 StringBuilder가 선언됩니다
- 세미콜론(;)으로 연산이 나뉘는 경우
- 여러 줄로 선언하는 경우
- 반복문을 사용하는 경우
- concat()을 사용하는 경우
3. 정리
- 한 줄로 문자열 연산을 하는 경우에는 +를 사용해도 좋다
- 여러 줄을 사용하는 경우에는 StringBuilder(혹은 StringBuffer)를 사용하자
Author And Source
이 문제에 관하여(Java의 문자열 연산 (JDK 1.5 전후 비교)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mincho920/Java의-문자열-연산-JDK-1.5-전후-비교저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)