본문 바로가기

JAVA

문자열을 더하는 방법 정리

방법 설명 예시 코드 java 버전
+ 연산자 문자열을 간단히 연결하는 가장 기본적인 방법 String result = "Hello, " + "world!"; 모든 버전
String.concat() String 클래스의 concat 메서드를 사용하여 문자열을 연결 String result = "Hello, ".concat("world!"); 모든 버전
StringBuilder 문자열을 효율적으로 더할 수 있는 변경 가능한 객체. 반복문에서 유용함 StringBuilder sb = new StringBuilder(); sb.append("Hello, "); sb.append("world!"); 모든 버전
StringBuffer StringBuilder와 유사하지만 스레드 안전(thread-safe) StringBuffer sb = new StringBuffer(); sb.append("Hello, "); sb.append("world!"); 모든 버전
String.join() 여러 문자열을 구분자와 함께 결합. 가변 길이 인자 지원 String result = String.join(" ", "Hello,", "world!"); Java 8+
String.format() 포맷팅을 사용하여 문자열을 결합 String result = String.format("Hello, %s!", "world"); Java 5+
Collectors.joining() Stream API와 함께 문자열을 구분자와 결합 (리스트 등에서 사용) List<String> words = Arrays.asList("Hello,", "world!"); String result = words.stream().collect(Collectors.joining(" ")); Java 8+
Arrays.toString() 배열의 문자열 표현을 반환 String result = Arrays.toString(new String[]{"Hello,", "world!"}); // "[Hello,, world!]" Java 5+
StringJoiner 여러 문자열을 특정 구분자와 함께 결합 (구분자, 접두사, 접미사 가능) StringJoiner joiner = new StringJoiner(", "); joiner.add("Hello"); joiner.add("world!"); Java 8+
  • 권장 사항:
    • 간단한 문자열 연결: + 연산자나 concat() 사용.
    • 여러 문자열 연결 (반복문 포함): StringBuilder 또는 StringBuffer 사용.
    • Stream 또는 리스트에서 문자열 결합: Collectors.joining().
    • 포맷 필요: String.format() 사용.

 

방법 장점 단점 사용 사례 및 권장사항
+ 연산자 - 코드가 간결하고 직관적.
- 간단한 문자열 결합 시 가독성 높음
- 문자열이 변경될 때마다 새로운 객체 생성, 성능 저하 발생 가능.
- 반복문에서 사용 시 비효율적
- 간단한 문자열 연결 작업에 적합
String.concat() - 코드 간결성 및 명시적인 의미 전달.
- null이 아닌 경우에만 동작
- 문자열이 변경될 때마다 새 객체 생성.
- null 처리 필요
- 두 문자열을 간단하게 연결할 때 적합
StringBuilder - 가변(mutable) 객체로 성능이 좋음.
- 반복문에서 효율적.
- 여러 문자열 연결에 최적화됨
- 멀티스레드 환경에서는 스레드 안전하지 않음. - 반복문에서 문자열 결합이 많을 때 적합
StringBuffer - StringBuilder와 동일한 성능.
- 스레드 안전(thread-safe)
- 스레드 안전성을 보장하므로 StringBuilder보다 약간 느림 - 멀티스레드 환경에서 문자열 결합 시 적합
String.join() - 여러 문자열을 구분자와 함께 결합할 때 코드가 간결.
- 명시적이며 사용법이 직관적
- 배열이나 컬렉션이 없으면 추가로 인자가 필요함 - 다수의 문자열을 특정 구분자로 연결할 때
String.format() - 가독성이 높고 포맷팅 지원.
- 변수 삽입이 명시적이고 직관적
- 성능이 다소 떨어짐.
- 가벼운 문자열 결합에는 비효율적
- 포맷팅이 필요한 경우 적합
Collectors.joining() - 리스트나 배열을 구분자로 결합할 때 유용.
- 스트림 API와 함께 사용 시 간결하고 유연함
- Java 8 이상에서만 사용 가능.
- Stream API에 대한 이해 필요
- Stream API를 사용할 때 적합
Arrays.toString() - 배열의 모든 요소를 쉽게 연결할 수 있음 - 구분자가 고정되어 있으며 사용자 지정 불가.
- 다차원 배열은 deepToString() 필요
- 배열의 내용을 문자열로 출력할 때 적합
StringJoiner - 다수의 문자열을 특정 구분자, 접두사, 접미사와 함께 결합 가능.
- 유연한 문자열 생성 가능
- 초기화 필요.
- 컬렉션을 직접 처리할 수 없음.
- StringBuilder보다 다소 복잡할 수 있음
- 접두사/접미사 있는 구분자 연결 적합

요약

  • 간단한 문자열 결합: + 연산자나 concat() 사용.
  • 반복문 또는 다수의 문자열 결합: StringBuilder가 성능 최적화에 유리.
  • 멀티스레드 환경: StringBuffer 사용.
  • 포맷 지정 필요: String.format() 사용.
  • Stream API 사용 시: Collectors.joining() 활용.
  • 배열 요소 출력: Arrays.toString() 사용.