Java에서 문자열을 이어붙이는 방법은 여러 가지가 있지만, 가장 흔히 쓰이는 방식은 다음 두 가지가 있다.
1. StringBuilder.append() 사용
2. 문자열 덧셈 연산자 + 사용
두 방식 모두 동일한 결과를 만들어내지만, 성능과 내부 처리 방식에서는 큰 차이가 있다. 차이점과 어떤 상황에서 어떤 방식이 더 효율적인지 정리해보려 한다.
문자열은 불변(Immutable)이다
Java의 String 클래스는 불변(immutable)이다.
즉, 한 번 생성된 문자열은 수정될 수 없고, 문자열을 더할 경우 항상 새로운 String 객체가 생성된다.
String str = "Hello";
str = str + " World"; // 새로운 String 객체가 생성됨변수에 문자열을 덧붙이면 기존 문자열은 버려지고 새로운 객체가 만들어지기 때문에,
반복적으로 수행하면 성능 저하와 메모리 낭비가 발생됨
하지만, 컴파일 타임 상수일 경우는 예외
String str = "Hello" + " World"; // 컴파일 타임에 "Hello World"로 합쳐짐컴파일러는 리터럴 상수끼리의 문자열 덧셈은 컴파일 시점에 미리 계산하여 단일 문자열 리터럴로 처리함.
이 경우에는 불필요한 객체 생성이 발생하지 않음
StringBuilder.append() 방식은 객체 새로 만들지 않음
StringBuilder sb = new StringBuilder();
sb.append("Hello, ");
sb.append("world!");
sb.append(" Have a nice day!");내부적으로 가변 배열을 사용하여 객체를 새로 만들지 않고 문자열을 추가.
문자열 덧셈 vs StringBuilder.append() 비교표
| 코드 간결성 | ✅ 매우 간단하고 직관적임 | ❌ 다소 길고 복잡함 |
| 가독성 | ✅ 좋음 | ❌ 비교적 낮음 |
| 컴파일 타임 최적화 | ✅ 상수끼리는 최적화됨 | ❌ 해당 없음 |
| 성능 (반복문 내부) | ❌ 느림 (객체 계속 생성됨) | ✅ 빠름 (하나의 객체 사용) |
| 메모리 효율 | ❌ 낮음 (불필요한 객체 생성) | ✅ 높음 (재사용 가능) |
| 불변성(Immutable) | ✅ String은 불변이라 안전함 | ❌ StringBuilder는 가변 객체 |
| 멀티스레드 안전성 | ✅ 불변이므로 안전함 | ❌ thread-safe 아님 (필요시 StringBuffer) |
| 주 사용 용도 | 간단한 문자열 조합 | ok대량 문자열 처리, 반복문 |
'java > 내용정리' 카테고리의 다른 글
| 글로벌 시스템 만들 시 주의사항 : 국가별 시간 관리 (Java + Oracle + JavaScript) (1) | 2025.06.14 |
|---|---|
| JWT 정의 및 java 예제코드 정리 (0) | 2025.05.27 |
| HMAC 방식 암호화, SHA-256 알고리즘 적용한 예제 알아보기 (2) | 2025.05.23 |
| 프로젝트 내부 이미지 파일 불러와서 html 파일 입력창에 등록 후 서버로 전송하기 (0) | 2025.05.19 |
| 이미지url을 업로드하자! URL형식 이미지 → HTML 업로드 처리 (2) | 2025.05.17 |
