일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- puppeteer
- Mongoose
- HTTP
- k8s
- java
- 프로그래머스
- ai
- graphql
- mongodb
- 백준알고리즘
- 조건문
- Android
- MapReduce
- 스프링부트
- Scanner
- eof
- 자바
- bufferdreader
- 스프링
- nodejs
- LangChain
- redis
- mysql
- java11
- restapi
- Apollo
- TCP
- Spring
- 서버
- Docker
- Today
- Total
자라나라 개발머리
[JAVA 11] StringBuilder 정리 본문
백준 알고리즘 해답을 보는데 자꾸만 눈에 거슬리는 StringBuilder.. 입출력 문제의 해답엔 십중팔구 얘가 등장해버린다.
공부를 안 할래야 안 할수가 없다.
StringBuilder란?
String 연산을 효율적으로 처리해주기 위한 클래스
StringBuilder는 어떻게 효율적으로 처리해주는가?
StringBuilder의 장점을 알려면 String의 특징을 알아야 한다.
String은 클래스이므로 String을 쓰려면 인스턴스를 생성해서 써야한다. 일반적으로는 생성문을 생략하고 쓴다.
//같은 의미
String str1 = new String("Hello!");
String str2 = "Hello!";
중요한 점은, String 클래스에서 생성되는 String 인스턴스는 Immutable 인스턴스다.
변경할 수 없는 인스턴스라는 뜻이다. 따라서 문자열 초기화 후엔 내용 변경이 불가하고 참조만 가능하다. 그래서 문자열 관련 연산을 할 때, 기존 인스턴스에서 변경되는 것이 아니라 새 인스턴스를 생성하게 된다. 이는 성능과 속도 면에서 비효율적이다.
StringBuilder 클래스는 위 단점을 보완한다. StringBuilder 클래스는 변경이 가능한 문자열을 생성해준다. 따라서 문자열 연산을 효율적으로 처리하게 해준다.
StringBuilder 사용법
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
sb.append("Hello "); //문자열 추가
sb.append("World!");
System.out.println(sb); //Hello World!
System.out.println(sb.toString()); //Hello World!
}
}
StringBuilder 객체 생성 후 append()로 문자열을 추가한다.
StringBuilder를 사용할 땐 toString()을 뒤에 붙여준다. sb만 써도 정상적으로 출력이 되는데, 왜 toString을 쓸까?
System.out.println(sb.getClass()); //class java.lang.StringBuilder
System.out.println(sb.toString().getClass()); //class java.lang.String
문자열을 출력하는덴 문제가 없다.
하지만 String이 필요한 경우(ex: 타 메소드에서 String을 인자로 받는 경우)엔 toString()으로 변경 후 써야한다. String 객체가 아니라 StringBuilder 객체이기 때문이다.
'Java' 카테고리의 다른 글
[Java] 롬복(Lombok)/애노테이션 프로세서(Annotation Processors) 사용법 및 정리 (0) | 2023.02.27 |
---|---|
[JAVA 11] EOF 처리 방법 (Scanner, BufferedReader) (0) | 2022.08.08 |
[JAVA 11] java.util.StringTokenizer 정리 (0) | 2022.08.07 |
[JAVA] BufferdReader read(), readLine() 차이 (0) | 2022.07.26 |
[JAVA] 왜 BufferdReader를 사용할까?/BufferdReader 사용 전후 비교 (0) | 2022.07.11 |