개발/Java

Java의 StringBuilder/StringBuffer 클래스

ju_ni_ 2023. 7. 20. 10:30
반응형

오늘은 문자열을 효율적으로 다룰 수 있는 두 가지 클래스, StringBuilderStringBuffer에 대해 알아보려 합니다. 이들은 String 클래스와는 달리 변경 가능한(mutable) 문자열을 다루는 클래스들입니다. 자바에서 문자열을 다룰 때, 이러한 클래스들을 이해하고 사용하는 것이 매우 중요합니다.

 

 

StringBuilder 클래스

 

StringBuilderJava 5에서 도입된 클래스로, 문자열을 추가하거나 변경할 때 주로 사용합니다. StringBuilder의 모든 public 메소드들은 StringBuilder 객체 자신을 반환함으로써 메소드 호출을 연쇄적으로 이어갈 수 있습니다. 이를 메소드 체이닝이라 합니다.

 

StringBuilder의 주요 메소드들은 다음과 같습니다:

 

append(): 문자열을 추가합니다.

insert(): 지정된 위치에 문자열을 삽입합니다.

delete(): 시작 인덱스와 끝 인덱스 사이의 문자열을 삭제합니다.

reverse(): 문자열을 반전합니다.

 

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(" World!"); // 문자열 추가
        System.out.println("문자열 추가 결과: " + sb.toString());
        
        int len = sb.length(); // 문자열의 길이
        System.out.println("문자열 길이: " + len);
        
        sb.reverse(); // 문자열 뒤집기
        System.out.println("문자열 뒤집기 결과: " + sb.toString());
    }
}

 

문자열 추가 결과: Hello World!
문자열 길이: 12
문자열 뒤집기 결과: !dlroW olleH

 

위 코드에서는 StringBuilder 클래스를 이용해 문자열을 추가하고, 길이를 측정하고, 문자열을 뒤집는 동작을 수행합니다. 코드를 실행하면 첫번째 출력문에서 "Hello" 문자열에 " World!"를 추가한 결과인 "Hello World!"가 출력됩니다. 두번째 출력문에서는 문자열의 길이인 12가 출력됩니다. 마지막으로 reverse 메소드를 이용해 문자열을 뒤집은 결과인 "!dlroW olleH"가 출력됩니다.

 

 

StringBuffer 클래스

 

StringBuffer는 멀티 스레드 환경에서도 문자열 조작이 필요할 때 사용할 수 있습니다. StringBuffer의 메소드들은 동기화되어 있어, 멀티 스레드 환경에서 안전(thread-safe)합니다. 그러나 단일 스레드 환경에서는 StringBuilderStringBuffer보다 빠릅니다.

 

StringBuffer의 주요 메소드들은 StringBuilder와 동일합니다.

 

public class StringBufferExample {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("Java");
        sb.append(" Programming"); // 문자열 추가
        System.out.println("문자열 추가 결과: " + sb.toString());
        
        sb.insert(4, " Language"); // 문자열 삽입
        System.out.println("문자열 삽입 결과: " + sb.toString());
        
        sb.delete(4, 13); // 문자열 삭제
        System.out.println("문자열 삭제 결과: " + sb.toString());
    }
}

 

문자열 추가 결과: Java Programming
문자열 삽입 결과: Java Language Programming
문자열 삭제 결과: Java Programming

 

위 코드에서는 StringBuffer를 이용하여 "Java"라는 문자열에 " Programming"을 추가하고, 4번 인덱스에 " Language"를 삽입한 뒤, 4번 인덱스부터 13번 인덱스까지의 문자열을 삭제하는 동작을 수행합니다. 코드를 실행하면 첫번째 출력문에서 "Java Programming"이 출력되고, 두번째 출력문에서는 "Java Language Programming"이 출력됩니다. 마지막으로 delete 메소드를 이용하여 " Language" 부분을 삭제한 결과인 "Java Programming"이 출력됩니다.

 

 

StringBuilderStringBuffer의 차이점

 

StringBuilderStringBuffer는 거의 유사합니다. 그러나 가장 큰 차이점은 StringBuffer는 메소드들이 동기화되어 있어서 멀티 스레드 환경에서도 안전하게 사용할 수 있다는 것입니다. 반면에, StringBuilder는 이러한 동기화를 지원하지 않기 때문에 단일 스레드 환경에서 더 빠른 성능을 보입니다. 따라서 사용 환경에 따라 적절한 클래스를 선택하여 사용하는 것이 중요합니다.

 

 

문자열에 대한 작업을 많이 하는 자바 프로그래밍에서는 StringBuilderStringBuffer의 활용이 매우 중요합니다. 이러한 클래스를 이해하고 적절하게 활용하면 프로그램의 성능을 크게 향상시킬 수 있습니다.

반응형

'개발 > Java' 카테고리의 다른 글

[JavaScript] - for in 문  (0) 2023.07.21
Java의 Wrapper 클래스  (0) 2023.07.20
Java의 String 클래스  (0) 2023.07.20
Java의 Object 클래스 : toString(), equals(), hashCode()  (0) 2023.07.19
Java에서의 예외처리(Exception Handling)  (0) 2023.07.19