Java

[JAVA] 문자열 다루기 String, StringBuilder, StringBuffer

2023. 6. 28. 11:47
목차
  1. StringBuilder, StringBuffer 클래스
  2. 1. String
  3. 1) String과 StringBuffer, StringBuilder의 차이점
  4. 2)데이터 추가
  5. 2. StringBuffer, StringBuilder
  6. 3. Methods

StringBuilder, StringBuffer 클래스

  • 내부적으로 가변적인 char[ ]를 멤버변수로 가짐
  • 문자열을 여러번텍스트 연결하거나 변경할때 사용함
  • 새로운 인스턴스를 생성하지 않고 char[ ]을 변경함
  • StringBuilder : 단일 쓰레드에서 사용
  • StringBuffer : 멀티 쓰레드에서 사용 - 동기화
  • append()을 이용하여 StringBuilder에 문자열 추가

String, StringBuilder로 문자열을 붙이는 예제이다.

        StringBuilder sb = new StringBuilder();
        String str1 = "Hello";
        String str2 = "World!!";
        //StringBuilder 이용
        sb.append(str1).append(" ").append(str2); //sb.append(str1+" "+str2)와 같다.
        System.out.println(sb);    //Hello World!!
        // + 더하기 연산 사용
        String str = str1 + str2;
        System.out.println(str);    //HelloWorld!!
        // concat() 사용
        str1 = str1.concat(str2);
        System.out.println(str1);   //HelloWorld!!

 


1. String

1) String과 StringBuffer, StringBuilder의 차이점

String과 StringBuffer, StringBuilder와의 차이점은 변함에 있다.
String은 불변이고, 나머지 두개는 변할 수 있다는 점이 차이점이다.
String객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.

2)데이터 추가

String은 + 또는 concat을 이용해 두개의 String을 붙일 수 있다. 이 경우 말그대로 하나의 String에 다른 하나를 붙이는 것이 아닌, 새로운 String 객체를 만들어 새로운 문자열을 저장한다. 즉, String 클래스 객체는 Heap 영역에 생성되어 한번 생성된 객체를 변경할 수 없고, 기존 객체가 제거되면 gc가 동작하기 전까지 남아있다.

따라서 String 객체는 문자열 연산이 많은 경우, 성능이 좋지않고 메모리 낭비가 크다.
그래서 StringBuilder, StringBuffer을 사용하는 것이 좋다.


2. StringBuffer, StringBuilder

이 클래스들은 String과 다르게 유연하게 동작할 수 있다. 문자열이 추가됨에 따라 기존 객체의 공간이 부족할 경우, 기존의 크기를 늘리며 유연하게 동작한다.

이 두 클래스의 차이점은 synchronized 여부 이다. StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하여, 멀티스레드 환경에서의 동기화를 지원한다. 이와 달리 StringBuilder는 그렇지 않다. 그래도 동기화 관련 문제로 StringBuffer는 StringBuilder에 비해 성능이 조금 좋지 않다. 따라서 동기화 문제가 전혀 없는 경우에는 StringBuilder를 사용하는 것이 좋다.


3. Methods

StringBuilder, StringBuffer에서 사용하는 메소드들은 동일하다.

append()

  • 문자열을 이어붙인다.

toString()

  • StringBuilder 객체는 String이 아니다.
    따라서 toString을 사용해서 String으로 변환해야한다.
    (System.out.println(sb)는 그대로 출력된다.)

reverse()

  • 문자열을 뒤집어준다. ( "hello" -> "olleh" )

setLength(0)

  • StringBuilder, StringBuffer 초기화

insert(int index, String str)

  • 주어진 index에 str을 끼워넣는다.

setCharAt(int index, char ch);

  • 주어진 index를 ch로 변경한다.

deleteCharAt(int index)

  • 해당 인덱스의 문자를 삭제한다.

replace(int index1, int index2, String str)

  • index1부터 index2 한칸 앞까지를 str로 변경한다.

delete(int index1, int index2)

  • index1부터 index2 한칸 앞까지를 삭제한다.

 

이외에 String에서 사용하는 메소드도 사용 가능하다.

 

반응형

'Java' 카테고리의 다른 글

[Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유  (0) 2024.03.14
[Java / CS] JVM과 Java의 메모리 구조  (0) 2024.02.16
[Java] Scanner, BufferedReader, BufferedWriter  (0) 2023.06.26
[JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스)  (2) 2023.06.10
[JAVA] 배열의 길이 length에는 괄호()가 붙지 않고, 문자열의 길이 length()에는 괄호()가 붙는 이유  (0) 2023.06.03
  1. StringBuilder, StringBuffer 클래스
  2. 1. String
  3. 1) String과 StringBuffer, StringBuilder의 차이점
  4. 2)데이터 추가
  5. 2. StringBuffer, StringBuilder
  6. 3. Methods
'Java' 카테고리의 다른 글
  • [Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유
  • [Java / CS] JVM과 Java의 메모리 구조
  • [Java] Scanner, BufferedReader, BufferedWriter
  • [JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스)
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (231)
    • Java (24)
    • Spring (25)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (48)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (6)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • 백엔드기술면접
  • Nuxt3
  • 클린코드
  • 트랜잭션
  • SpringBoot
  • 백엔드스쿨
  • Java
  • SQL
  • Linux
  • 기술면접
  • MySQL
  • cleancode
  • TechInterview
  • springsecurity
  • HTTP
  • web
  • 백엔드공부
  • 백엔드
  • Redisson
  • vue3
  • Spring
  • 리눅스
  • 제로베이스
  • Redis
  • 개발자
  • 자료구조
  • Database
  • mybatis
  • JPA
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[JAVA] 문자열 다루기 String, StringBuilder, StringBuffer
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.