13. 기술면접 - 자바 - String, StringBuilder, StringBuffer
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다
String | StringBuilder | StringBuffer |
새로운 값을 할당 할 때 마다 새로 클래스에 대한 객체가 생성된다 String 에 저장되는 문자열은 private final char[]의 형태이기 때문에 String 값은 바꿀 수 없다 (불변성) Array 에 add 가 불가능하기 때문에 새롭게 인스턴스를 생성해야 함 (아래 코드 참고) String + String + String ... ㄴ 각각의 String 주소값이 Stack 에 쌓이고 , Garbage Collector 가 호출 되기 전 까지 생선된 String 객체들 은 Heap 에 쌓이기 때문에 메모리 관리에 치명적이다 |
memory 에 append 하는 방식으로, 클래스에 대한 객체를 직접 생성하지 않는다 변경 가능한 문자열 비동기 처리 |
memory 에 append 하는 방식으로, 클래스에 대한 객체를 직접 생성하지 않는다 변경 가능한 문자열 동기 처리 multiple thread 환경에서 안전 (thread safe) |
- JDK 1.5 버전 이전에서는 문자열 연산(+, concat()) 을 할 때 조합된 문자열을 새로운 메모리에 할당하여 참조해 성능상 이슈 - JDK 1.5 버전 이후에는 컴파일 단계에서 String 객체를 StringBuilder 로 컴파일 되도록 변경됨 - 그래서 JDK 1.5 버전 이후에서는 String Class 를 사용해도 StringBuilder 와 성능 차이 없음 - 하지만 반복 루프를 사용해서 문자열을 더할 때는 객체를 계속 새로운 메모리에 할당한다 (이전과 동일한 방식) - String 클래스를 사용하는 것 보다는 스레드와 관련있으면 StringBuffer, 스레드 안전 여부와 상관 없으면 StirngBuffer 권장 |
public class StringTest {
public static void main(String[] args) {
char[] cheese = {'치', '즈'};
char[] donkats = {'돈', '까', '스'};
int totalLength = cheese.length + donkats.length;
int targetIndex = 0;
char[] cheeseDonkats = new char[totalLength];
for (int i = 0; i < totalLength; i++) {
if (cheese.length > i) cheeseDonkats[i] = cheese[targetIndex++];
else cheeseDonkats[i] = donkats[++targetIndex - donkats.length];
}
System.out.println(cheeseDonkats);
}
}
모든 상황에서 컴파일러가 최적화를 해주진 않습니다
일단 open jdk 1.8 기준으로는 컴파일 과정에서 StringBuilder 로 변환이 일어나지 않았습니다
자세한 내용은 아래 참고 블로그에서 확인 바랍니다
참고
https://siyoon210.tistory.com/160
'∞. 기술 면접 > 7. 자바' 카테고리의 다른 글
16. 기술면접 - 자바 - 리플렉션, 스트림, 람다 (0) | 2021.10.22 |
---|---|
15. 기술면접 - 자바 - == 와 eqauls 의 차이 (0) | 2021.10.22 |
12. 기술면접 - 자바 - 클래스, 객체, 인스턴스 (0) | 2021.10.22 |
11. 기술면접 - 자바 - 컬렉션 프레임워크 (Collection Framework) (0) | 2021.10.21 |
10. 기술면접 - 자바 - 인터페이스와 추상 클래스 차이 (0) | 2021.10.21 |
댓글
이 글 공유하기
다른 글
-
16. 기술면접 - 자바 - 리플렉션, 스트림, 람다
16. 기술면접 - 자바 - 리플렉션, 스트림, 람다
2021.10.22 -
15. 기술면접 - 자바 - == 와 eqauls 의 차이
15. 기술면접 - 자바 - == 와 eqauls 의 차이
2021.10.22 -
12. 기술면접 - 자바 - 클래스, 객체, 인스턴스
12. 기술면접 - 자바 - 클래스, 객체, 인스턴스
2021.10.22 -
11. 기술면접 - 자바 - 컬렉션 프레임워크 (Collection Framework)
11. 기술면접 - 자바 - 컬렉션 프레임워크 (Collection Framework)
2021.10.21