java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스

2021. 12. 26. 18:10·자바/java.lang 패키지

1. StringBuffer 클래스

- String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다.

 

- 내부적으로 문자열을 편집을 위한 공간(buffer)이 있으며, 인스턴스 생성 시, 그 크기를 지정할 수 있다.

 

- 이때, 크기는 충분히 잡는 것이 좋다.

 

- StringBuffer(int length) 생성자를 통해 크기를 지정하는데, 만약 무시한다면, 16개의 문자를 저장할 수 있는

크기의 버퍼를 생성한다.

 

 

- 아래의 코드는 StringBuffer에 대한 클래스 생성자 구조이다.

public final class StringBuffer implements java.io.Serializable{
	private char[] value;
	
	public StringBuffer(int length) {
		value = new char[length];
		//shared = false;
	}
	
	public StringBuffer() {
		this(16);
	}
	
	public StringBuffer(String str) {
		this(str.length()+16);
		//append(str);
	}
}

( 이때, 문자열이 length의 크기를 넘어선다면, 내부적으로 버퍼의 크기를 늘리는 작업을 한다. )

( 배열의 length는 변경할 수 없으므로, 복사를 통해서 이루어진다. )

 

 

 

 

1-1. StringBuffer 클래스의 변경

- append() 메서드는 반환타입이 StringBuffer인데 자신의 주소를 반환한다.

 

- 아래의 코드를 보고 이해하자.

 

( 자신의 주소를 반환하므로 sb1을 복사하여 sb2에 저장되었다. )

 

 

 

 

1-2. StringBuffer의 비교

- String 클래스는 equals() 메서드를 오버라이딩 했기 때문에, 등가비교연산자(==)과는 같지 않다.

 

 

- 그러나, StringBuffer 클래스는 equals() 메서드를 오버라이딩 하지 않았기 때문에 등가비교연산자(==)와 같다.

 

 

- 그래서 StringBuffer 클래스의 객체의 문자열 비교는 toSting()을 통해서 해야한다.

 

 

 

 

1-3. StringBuffer 클래스의 생성자와 메서드들

- 중요하다고 생각되는 부분만 꼽았다.

 

(1) StringBuffer append(모든 자료형과 참조형)

 

 

(2) int capacity()

 

 

(3) StringBuffer delete(int start, int end)

 

 

(4) StringBuffer deleteCharAt(int index)

( 지정된 index 위치에 있는 것을 삭제한다. )

 

 

(5) StringBuffer insert(int pos, 모든 자료형과 참조형)

 

 

(6) StringBuffer replace(int start, int end, String str)

 

 

(7) void setCharAt(int index, char ch)

 

 

(8) void setLength(int newLength)

 

 

(9) String substring(int start) + String substring(int start, int end)

 

 

(10) StringBuffer reverse()

- 문자열의 순서를 거꾸로 바꿔준다.

 

 

 

 

2. StringBuilder 클래스

- StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있다. 그러나 동기화는 StringBuffer의 성능을

떨어뜨린다.

 

- 만약 멀티쓰레드가 아닌 프로그램이라면, 동기화는 불필요하게 성능만 떨어뜨린다.

 

- 그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuilder가 새로 추가되었다.

 

- StringBuilder는 StringBuffer와 완전히 똑같은 기능으로 작성되어 있어서, 소스 코드에서 StringBuffer 대신

StringBuilder만 바꾸기만 하면 된다.

 

- 단, 성능을 우선시 한다면, 둘 중 어느 것이 나은지 판단해본다.

 

 

 

 

다음장

java.lang패키지(6) - Math 클래스 (tistory.com)

 

java.lang패키지(6) - Math 클래스

1. Math 클래스 - 기본적으로 Math 클래스는 생성자가 private으로 되어 있기 때문에 만들 수 없다. 왜냐하면 인스턴스 변수가 없고 모두 다 static으로 되어 있기 때문이다. - 상수로는 다음과 같다. (1)

kind-coding.tistory.com

 

'자바 > java.lang 패키지' 카테고리의 다른 글

java.lang패키지(7) - 래퍼(Wrapper) 클래스  (0) 2021.12.28
java.lang패키지(6) - Math 클래스  (0) 2021.12.27
java.lang패키지(4) - String 클래스(2)  (0) 2021.12.26
java.lang패키지(3) - String 클래스(1)  (0) 2021.12.24
java.lang 패키지(2) - Object 클래스(2)  (0) 2021.12.24
'자바/java.lang 패키지' 카테고리의 다른 글
  • java.lang패키지(7) - 래퍼(Wrapper) 클래스
  • java.lang패키지(6) - Math 클래스
  • java.lang패키지(4) - String 클래스(2)
  • java.lang패키지(3) - String 클래스(1)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      람다식
      java.lang패키지
      알고스팟
      InputStream
      snail
      자바 개념
      ServerSocket
      스트림
      소켓 프로그래밍
      코딩트리조별과제
      선택 정렬
      serializable
      Collections Framework
      안드로이드 스튜디오
      다형성
      코드트리
      제자리 정렬
      문자 기반 스트림
      outputstream
      Arrays
      file
      map()
      코딩테스트
      안정 정렬
      불안정 정렬
      역직렬화
      java.time 패키지
      유용한 클래스
      TCP 소켓 프로그래밍
      중간연산
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
    상단으로

    티스토리툴바