2024. 9. 5. 15:27ㆍLang/JAVA
내가 작성한 로직중 "+"로 문자열을 합친 부분이 있었는데
코드 리뷰를 받던 중 +로 합치지말고 concat으로 합치라는 말을 들었다.
하지만 지적하신분이 "왜?" 라는 질문에 대답을 애매하게 "메모리 관리면에서 그게 좋다고 들었다"라고 하셔서
직접 알아봤다.
1. concat()
- String 클래스에서 기본 제공
- 동작방식 : 합친 문자열을 String으로 재생성 ( -> 문자열을 추가할때마다 새로운 인스턴스가 할당되기에 성능, 속도 모두 좋지 않다.)
- 사용시기 : 되도록 지양할 것!
2. "+" 연산자
- 동작방식 :
JDK 1.5 미만 => 문자열 추가시 새 인스턴스에 할당
JDK 1.5 이후 => StringBuilder로 변환해서 처리
( StringBuilder 객체 생성 -> append()로 문자열 추가 -> .toString() 과정)
- 사용시기 : 간단한 문자열 합산에 사용
3. StringBuilder
- java.lang 클래스에서 제공
- 일반적인 String과 달리 수정이 가능함
- 동작방식 : 수정가능한 StringBuilder 객체 생성 -> append()로 문자열 추가 -> .toString()으로 String 객체로 변환
- 사용시기 : 반복문 등 반복적인 문자열추가 나 복잡한 문자열 추가에 사용
4. StringBuffer
- StringBuilder와 호환 가능
- StringBuilder와의 차이점 :
동시성 제어 | 상대적인 동작 속도 | |
StringBuilder | 불가능 (동기화 보장 X) | 빠름 |
StringBuffer | 가능 (** thread-safethread-safe) | 느림 |
( ** thread-safethread-safe : 동시에 여러 스레드가 접근해도 프로그램의 동작이 문제가 없도록 안전하게 설계된 것 )
- 사용시기 : 멀티쓰레드 이용시
'Lang > JAVA' 카테고리의 다른 글
[SpringBoot] Spring Batch (2) - 설명 및 구현 예시 (0) | 2024.10.07 |
---|---|
[SpringBoot] Spring Batch (1) - Batch에 대해 (0) | 2024.10.07 |
[GabageCollection] 가비지 컬렉션 알고리즘 종류와 구조 (0) | 2024.08.20 |
[spring] Webclient(1) - 개요: 스트리밍 데이터 처리 (0) | 2024.08.19 |
[SpringBoot] 파일 다운로드 구현 (0) | 2024.07.30 |