java 기초 탄탄~

StringBuffer 클래스

임종뚱 2019. 11. 30. 20:24

StringBuffer의 생성과 특징

StringBuffer 클래스는 스트링을 다루는 클래스로서 String 클래스와 매우 유사한 기능을 한다.

그러나 가장 큰 차이점은 String 객체가 한 번 만들어진 문자열을 수정할 수 없는 것과는 달리 StringBuffer 객체는 내부에 문자열을 저장하는 가변 크기의 버퍼를 가지고 있기 떄문에 생성 후 문자열 값을 바꿀 수 있다 

따라서 StringBuffer는 문자열을 추가하거나 변경 할 떄 주로 사용하는 자료형이다

 

잠깐!

간단한 문자열을 처리하는 것은 String클래스를 이용하고 문자열의 길이가 길거나 문자열 작업이 많은 경우 StringBuffer클래스를 이용하는 것이 적합하다.

 

 

StringBuffer 예제1

StringBuffer은 생성자를 제공하며  초기 버퍼의 크기가 16인 스트링 버퍼 객체를 생성해준다.

StringBuffer자료형은 append()메소드를 사용하여 문자열을 추가해 나갈 수 있다.

결과값

 

위 예제를 String자료형으로만 가지고 표현할 수 있다.

 

 

첫 번째 예제의 경우 StringBuffer 객체는 단 한번만 생성된다. 두번 째 예제는 String 자료형에 + 연산이 있을 때마다 새로운 String 객체가 생성된다(문자열 간 + 연산이 있는 경우 자바는 자동으로 새로운 String 객체를 만들어 낸다). 두번 째 예제에서는 총 5개의 String 자료형 객체가 만들어지게 된다.

※ String 자료형은 한번 값이 생성되면 그 값을 변경할 수가 없다. 이렇게 값을 변경할 수 없는 것을 immutable 하다고 한다. trim, toUpperCase 등의 메소드를 보면 문자열이 변경되는 것 처럼 생각 될 수도 있겠지만 해당 메소드 수행 시 또 다른 String 객체를 생성하여 리턴할 뿐이다. StringBuffer 는 이와 반대로 값을 변경할 수 있다(mutable 하다). 즉 한번 생성된 값을 언제든지 수정할 수 있다.

그렇다면 무조건 StringBuffer를 사용하는 것이 좋을까?

그건 상황에 따라 다르다. StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다. new StringBuffer() 로 객체를 생성하는 것은 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느리다. 따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리하다.

 

StringBuffer 예제2

reverseString 함수를 정의하여 입력받은 문자열을 StringBuffer 클래스를 사용하여 거꾸로 반환하는 예제이다.

이 떄 .toString() 메소드를 사용하면 String자료형으로 변경할 수 있다.

결과값

 

StringBuffer 예제3

위 예는 0 번째 위치에 "hello " 라는 문자열을 삽입하는 방법을 보여준다.

결과값

 

StringBuffer 예제4

 

substring(시작위치, 끝위치)와 같이 사용하면 StringBuffer 객체의 시작위치에서 끝위치까지의 문자를 뽑아내게 된다.

 

결과값

 

 

오늘 공부 끝~!!