본문 바로가기
국비학원 전 강의 필사/점프 투 자바

#03-05 StringBuffer - <점프 투 자바>

by kkooHan 2022. 8. 25.

 

출처 : https://wikidocs.net/book/31

 

 

점프 투 자바

**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...

wikidocs.net

 

 

 

 

 

 

필사 :

 

 1. append

 2. insert

 3. substring

 

StringBuffer는 문자열을 추가하거나 변경 할 때 주로 사용하는 자료형이다.

StringBuffer의 메소드들을 살펴보면서 사용법에 대해서 알아보자.

 

 

 

 

 

1. append

다음은 StringBuffer 객체를 생성하고 문자열을 생성하는 예제이다.

StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);

 

결과값은 다음과 같다.

hello jump to java

 

 

StringBuffer 자료형은 append 메소드를 사용하여

계속해서 문자열을 추가해 나갈 수 있다.

 

그리고 위 예제와 같이 toString() 메소드를 이용하면

String 자료형으로 변경할 수 있다.

 

 

위 예제를 String 자료형만 가지고 표현하면 다음과 같이 작성할 수 있다.

String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result);

 

결과값은 다음과 같다.

hello jump to java

 

두 개의 예제의 결과는 동일하지만

내부적으로 객체가 생성되고 메모리가 사용되는 과정은 다르다.

 

 

첫 번째 예제의 경우 StringBuffer 객체는 한 번만 생성된다.

 

두 번째 예제는 String 자료형에 + 연산이 있을 때마다

새로운 String 객체가 생성된다.

(문자열 간 + 연산이 있는 경우 자바는

 자동으로 새로운 String 객체를 만들어 낸다.)

 

두 번재 예제에서는 총 4개의 String 자료형 객체가 만들어지게 된다.

 

 

String 자료형은 한 번 값이 생성되면 그 값을 변경할 수가 없다.

이렇게 값을 변경할 수 없는 것은 immutable 하다고 한다.

 

trim, toUpperCase 등의 메소드를 보면

문자열이 변경되는 것처럼 생각될 수도 있지만

해당 메소드 수행 시 또 다른 String 객체를 생성하여 리턴할 뿐이다.

 

하지만 StringBuffer는 이와 반대로 값을 변경할 수 있다(mutable하다).즉 한 번 생성된 값을 언제든지 수정할 수 있다.

 

 

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

 

그건 상황에 따라 다르다.

 

StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다.

new StringBuffer();로 객체를 생성하는 것은

일반 String을 사용하는 것보다 메모리 사용랑도 많고 속도도 느리다.

 

따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 

문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리하다.

 

 

 

StringBuilder

 

StringBuffer와 비슷한 자료형으로 StringBuilder가 있다.StringBuilder의 사용법은 StringBuffer의 사용법과 동일하다.

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);
// 출력 결과도 같다.

 

StringBuffer는 멀티 스레드 환경에서 안전하다는 장점이 있고

StringBuilder는 StringBuffer보다 성능이 우수한 장점이 있다.

 

따라서 동기화를 고려할 필요가 없는 상황에서는

StringBuilder를 사용하는 것이 유리하다.

 

 

 

 

 

2. insert

insert 메소드는 특정위치에 원하는 문자열을 삽입할 수 있다.

StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello ");
System.out.println(sb.toString());

 

결과값은 다음과 같다.

hello jump to java

insert를 사용하여 0번째 위치에 "hello"라는 문자열을 삽입했다.

 

 

 

 

 

3. substring

substring 메소드는 String 자료형의 substring 메소드와 동일하게 사용된다.

StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4));

 

결과값은 다음과 같다.

Hell

 

substring(시작위치, 끝위치)와 같이 사용하면

StringBuffer 객체의 시작위치에서 끝위치 전까지의 문자를 뽑아낸다.

 

 

 

 

 

느낀점 : 

 

한 번 직접 활용해봐야 더 이해가 되고 기억에 남을 것 같다.

 

 

1. append  (append : 덧붙이다, 첨부하다     cf) 수정하다 : modify  / apply: 신청하다 )

 

StringBuffer의 append 메소드를 사용하기 위해서

StringBuffer의 객체 생성.

 

StringBuffer sb = new StringBuffer();

sb.append("hello");

String result = sb.toString();

System.out.println(result);

 

 

.toString();

StringBuffer를 String으로 바꿔주는 메소드

 

 

System.out.println(sb.toString()); 해도 결과는 같게 나오네.

 

 

+=

'+='을 통해서 += 오른쪽에 있는 값을

+= 왼쪽의 변수에 추가시키고 있다.

String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result);

 

 

 

2. insert  (insert : 끼우다, 삽입하다)

 

StringBuffer sb = new StringBuffer();

sb.append("hello");

sb.insert(1, "zz");

String result = sb.toString();

System.out.println(result);

 

// hzzello 출력.

index(1)글자 앞에 추가가 된다.

 

 

 

3. substring

시작위치 이상, 끝위치 미만 글자 출력

 

댓글