728x90
반응형
StringBuilder
문자열 조작에 사용되는 클래스이다.
왜 사용하는가?
효율적이기 때문에 사용한다.
이게 왜 효율적이냐를 설명하려면
문자열의 불변 특성에 대해서 먼저 이해하고 가야한다.
|
불변 객체인 String
- string에서 동일한 문자열 리터럴을 여러번 생성하면,
새로운 객체를 생성하지 않고 String Pool에서 동일한 객체를 참조(즉 재사용)한다.
String str1 = "Hello";
String str2 = "Hello";
// str1과 str2는 동일한 객체를 참조한다
위의 그림처럼 두 스트링이 동일한 객체를 참조하고 있음을 알수있다.
그런데 만약 여기서 str2를 수정한다면 어떻게 될까?
public class Main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = str1.concat(" World");
System.out.println("str1: " + str1); // "Hello"
System.out.println("str2: " + str2); // "Hello World"
}
}
concat은 str1을 수정하지 않고, Hello Wrold라는 새로운 객체를 만들어서 반환한다.
이렇게 문자열을 수정할 때 마다 매번 새로운 객체가 만들어지고,
기존의 문자열은 변하지 않는다.
그러니까 메모리가 많이 소모가 되겠지.
또한
public class Main {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2); // true (같은 객체 참조)
System.out.println(str1 == str3); // false (다른 객체 참조)
System.out.println(str1.equals(str3)); // true (값은 동일)
}
}
이렇게 new를 이용해 새로운 객체 str3를 만드는 경우에도
값은 동일하되, 각 문자열은 다른 객체를 가리킨다.
문자열이 이렇게 불변성을 가진 이유는 "안전성" 때문이다.
하지만, 문자열을 자주 수정해줘야 할 경우에는 이렇게 새로운 객체를 만들기 보다는
기존의 객체를 수정하는게 훨씬 메모리를 절약할 수 있겠지
그러면 이제 사용법에 대해 알아보자.
StringBuilder의 주요 메서드
1. append(String str)
- 문자열을 끝에 추가한다.
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!"); // "Hello, World!"
System.out.println(sb);
2. insert(int offset, String str)
- 특정 위치에 문자열을 삽입한다.
- 아래 코드의 경우에는 6번째 인덱스에 삽입
StringBuilder sb = new StringBuilder("Hello World");
sb.insert(6, "Beautiful "); // "Hello Beautiful World"
3. delete(int start, int end)
- 지정된 범위의 문자열을 삭제한다.
StringBuilder sb = new StringBuilder("Hello, World!");
sb.delete(5, 7); // "Hello World!"
4. replace(int start, int end, String str)
- 지정된 범위의 문자열을 다른 문자열로 대체한다.
StringBuilder sb = new StringBuilder("Hello, World!");
sb.replace(7, 12, "s2ej1n"); // "Hello, s2ej1n!"
5. reverse()
- 문자열을 뒤집는다.
StringBuilder sb = new StringBuilder("Hello");
sb.reverse(); // "olleH"
6. toString()
- StringBuilder 객체를 문자열로 변환한다.
- 문자열 조작을 끝마친 후에 최종 문자열을 반환하기 위해서는 toString()을 호출해야한다.
StringBuilder sb = new StringBuilder("Hello");
String str = sb.toString(); // "Hello"
728x90
반응형
'☁️ 구름 X kakao DeepDive > ☁️ Java' 카테고리의 다른 글
[Java] 접근제어자 (0) | 2025.01.28 |
---|---|
[Java] 정수 자료형과 실수 자료형 (+형변환과 부동소수점까지) (1) | 2025.01.15 |
[Java] 자바의 자료형과 변수, 상수(final)에 대해 알아보자 (0) | 2025.01.15 |
[Java] 자바 프로그램 실행해보기 (0) | 2025.01.14 |
[Java] 자바의 기본 - JVM, JRE, JDK이란? (2) | 2025.01.14 |