Jaeyoung Kim
나의 개발 공부 일지
Jaeyoung Kim
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • WIL👨‍🏫 (16)
    • 🤖Algorithm (29)
    • 🖥CS (20)
      • 기술면접대비🔎 (10)
    • ✍️개발로그 (10)

블로그 메뉴

  • 홈
  • 방명록
  • 글쓰기
  • 설정

공지사항

인기 글

태그

  • N-gram parser
  • 자바
  • HTTP
  • 백준2920
  • API
  • 트랜잭션
  • 프로그래머스
  • 백준
  • WIL
  • 항해99
  • transaction
  • 개발로그
  • til
  • rest
  • Java
  • sql
  • querydsl
  • 회고록
  • 데이터자료구조
  • SQLD

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Jaeyoung Kim

나의 개발 공부 일지

[Java] String, StringBuffer, StringBuilder의 차이점
🖥CS

[Java] String, StringBuffer, StringBuilder의 차이점

2023. 3. 9. 09:06
728x90

[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 클래스와 거의 동일한 기능을 제공하지만, 멀티스레드 환경에서 안전하지 않다.
 

 

728x90

'🖥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
    '🖥CS' 카테고리의 다른 글
    • 스택(Stack)과 큐(Queue)
    • [Java] 자바 추상클래스와 인터페이스의 차이
    • 네이버를 검색하고 화면에 출력되기까지
    • TCP/UDP
    Jaeyoung Kim
    Jaeyoung Kim
    보다 안정적인 코드 구현을 꿈꾸는 백엔드 개발자 지망생

    티스토리툴바