[Java] String, StringBuffer, StringBuilder의 차이점
오늘은 Java에서 문자열을 다루는 클래스인 String, StringBuffer, StringBuilder에 대해 알아보고 차이점을 정리해보고자 한다.
String 클래스
String 클래스는 문자열을 다루기 위한 클래스 중 가장 기본적인 클래스이다. String 클래스는 한 번 생성된 문자열은 변경할 수 없다는 불변(immutable)한 객체이다. 이는 즉, String 객체가 생성된 후에는 그 객체의 내용을 변경할 수 없다는 의미이다.
따라서 String 객체를 생성하기 위해서는 새로운 String 객체를 생성하여야 한다.
String str = "Hello";
str += " world";
위 코드는 "Hello world" 문자여을 출력하기 위한 코드이다. 하지만 String은 불변하기 때문에 위 코드에서는 새로운 String 객체가 생성되며, "Hello"와 " world" 문자열을 결합한 새로운 String 객체가 생성된다. 이로 인해 불필요한 메모리 낭비가 발생할 수 있다는 문제점이 존재한다.
추가로 String 클래스는 멀티스레드 환겨에서는 안전하다. 즉, 여러 개의 스레드에서 동시에 하나의 String 객체에 접근해도 문제가 발생하지 않는다.
StringBuffer 클래스
StringBuffer 클래스는 String 클래스와 마찬가지로 문자열을 다루는 클래스 중 하나이다. 하지만 StringBuffer 클래스는 String 클래스와 달리 변경이 가능한(mutable) 객체이다. 즉, StringBuffer 객체가 생성된 후에도 그 내용을 변경할 수가 있다.
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" world");
위 코드에서는 StringBuffer 객체를 생성한 후에 append() 메소드를 이용해 문자열을 추가하고 있다.
이렇게 StringBuffer를 사용하면 문자열을 변경할 때 마다 새로운 객체를 생성할 필요 없이 하나의 StringBuffer 객체를 재사용할 수가 있다.
추가로 StringBuffer 클래스는 String 클래스와 동일하게 멀티스레드 환경에서 안전하다. 즉, 여러 개의 스레드에서 동시에 하나의 StringBuffer 객체에 접근해도 문제가 발생하지 않는다.
StringBuilder 클래스
StringBuilder 클래스는 StringBuffer 클래스와 거의 동일한 기능을 제공하는 클래스이다. 다만 StringBuffer 클래스와의 차이점은 멀티스레드 환경에서 안정하지 않다는 것이다. 즉, 여러 개의 스레드에서 동시에 하나의 StringBuilder 객체에 접근하면 문제가 발생할 위험이 존재한다.
하지만 실제로 보통 멀티스레드 환경에서 작업하는 경우가 일반적이지는 않으므로 StringBuilder 클래스를 사용하는 것이 더 빠르고 효율적이다.
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" world");
위 코드에서는 StringBuilder 객체를 생성한 후에 append() 메소드를 이용해 문자열을 추가하고 있다.
StringBuffer와 동일하게 StringBuilder를 사용하면 문자열을 변경할 때마다 새로운 객체를 생성할 필요 없이 하나의 StringBuilder 객체를 재사용이 가능하다.
따라서 만약 멀티스레드 환경에서 작업하지 않을 경우, StringBuilder 클래스를 사용하는 것이 더 효율적이다.
정리
- String 클래스는 불변(immutable)한 객체로 한 번 생성된 문자열은 변경할 수 없다.
- StringBuffer 클래스는 변경 가능(mutable)한 객체로 문자열을 변경할 수 있다. 멀티스레드 환경에서 안전하다.
- StringBuilder 클래스는 StringBuffer 클래스와 거의 동일한 기능을 제공하지만, 멀티스레드 환경에서 안전하지 않다.
'🖥CS' 카테고리의 다른 글
스택(Stack)과 큐(Queue) (0) | 2023.01.19 |
---|---|
[Java] 자바 추상클래스와 인터페이스의 차이 (0) | 2023.01.18 |
네이버를 검색하고 화면에 출력되기까지 (0) | 2022.09.28 |
TCP/UDP (0) | 2022.09.27 |
1일 1로그 100일 완성 IT지식 - 통신 75~77 (0) | 2022.08.21 |