9월 9일 - 태국에서....

Yullgiii·2024년 9월 9일
0

[Java] 문자열 클래스

Java에서 문자열을 다룰 때 사용하는 대표적인 클래스들은 String, StringBuffer, StringBuilder가 있습니다. 이 세 클래스는 각각의 특징이 있으며, 사용되는 환경이나 요구사항에 따라 선택됩니다.

분류StringStringBufferStringBuilder
변경 가능 여부ImmutableMutableMutable
동기화 지원동기화 불필요동기화 가능 (Thread-safe)동기화 불가능

1. String 클래스의 특징

  • Immutable (불변성): String 객체는 한 번 생성되면 변경할 수 없습니다. 즉, 문자열이 변경될 때마다 새로운 객체가 생성됩니다.
  • Garbage Collector: 변경된 문자열 객체는 사용되지 않으므로 가비지 컬렉터에 의해 제거됩니다.
  • Overhead 발생: 문자열을 자주 변경할 경우 새로운 객체를 생성해야 하므로 메모리 사용 및 성능에 영향을 줄 수 있습니다.
  • 동기화 필요 없음: 문자열이 불변이기 때문에 멀티스레드 환경에서도 동기화를 신경 쓸 필요가 없습니다.
  • 적합한 환경: 문자열 연산이 적고 조회가 많은 멀티스레드 환경에 적합합니다.

예제 코드

public class StringExample {
    public static void main(String[] args) {
        String str = "Hello";
        str += " World";  // 새로운 객체 생성
        System.out.println(str);  // "Hello World"
    }
}

2. StringBuffer와 StringBuilder의 특징

공통점

• Mutable (가변성): StringBuffer와 StringBuilder는 문자열을 수정할 때 새로운 객체를 생성하지 않고 기존 객체를 수정합니다.
• 성능 최적화: 문자열이 자주 변경되는 경우, 두 클래스는 새로운 객체 생성을 방지하여 성능을 높입니다.
• 메서드 동일: 두 클래스는 메서드 구성이 거의 동일합니다. 다만, 동기화 여부에 차이가 있습니다.

차이점

• StringBuffer
• Thread-safe: StringBuffer는 동기화를 지원하여 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
• 적합한 환경: 문자열 연산이 많고, 멀티스레드 환경에서 동기화가 필요한 경우에 적합합니다.
• StringBuilder
• Thread-safe하지 않음: StringBuilder는 동기화를 지원하지 않으므로 멀티스레드 환경에서는 안전하지 않습니다.
• 적합한 환경: 문자열 연산이 많은 싱글 스레드 환경이나 동기화를 고려하지 않는 경우에 적합합니다.

예제 코드 (StringBuffer)

public class StringBufferExample {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("Hello");
        sb.append(" World");  // 기존 객체에 문자열 추가
        System.out.println(sb.toString());  // "Hello World"
    }
}
public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(" World");  // 기존 객체에 문자열 추가
        System.out.println(sb.toString());  // "Hello World"
    }
}

So...

• String은 불변 객체로 멀티스레드 환경에서 안전하게 사용할 수 있으며, 문자열 변경이 적고 조회가 많은 경우에 적합합니다.
• StringBuffer는 가변 객체로, 문자열을 자주 변경해야 하고 동기화가 필요한 멀티스레드 환경에서 사용됩니다.
• StringBuilder는 동기화를 고려하지 않아도 되는 싱글 스레드 환경에서 문자열을 자주 변경해야 할 때 적합합니다.

따라서, 상황에 맞는 문자열 클래스를 선택함으로써 성능과 안정성을 모두 고려하는 것이 중요합니다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글