일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- http
- 타입이 서로 다른 두 데이터 제네릭
- unity 오브젝트
- MariaDB
- Create
- ForignKey
- c#상속
- final
- request
- 요청
- JDBC
- static을 왜사용할까?
- unity 레이아웃
- 메소드 정의
- response
- spring
- 메소드 지정자
- Database
- C#
- WriteLine
- unity 간단 설정
- 평면좌표상에서 두점 거리 구하기
- 타입 변수 표기법
- java
- select
- @ Builder
- db
- DROP
- 데이터베이스
- static
- Today
- Total
이론을 싫어!
[java] String Buffer 와 String Builder 언제 쓸까?? 본문
String Buffer 와 String Builder
문자열 처리는 보통 String 이긴 하지만 불편의 속성을 갖게 된다.
예시)
String str1= "홍길동"
만약에 홍길동 문자열을 저장하게 되면
str1 이라는 변수가 "홍길동"의 문자열이 저장되어 있는
주소값을 str1이 가지고 있게 된다.
근데 만약에 str1에 문자열을 더하게 된다면 어떻게 될까??
str1= str1+ "학생";
이라고 선언을 하게 되면 지금 str1이 가지고 있는 주소값 0x0001에
홍길동 학생이라고 붙어 있으면 좋겠지만 그렇지 않다는 것이다.
홍길동의 문자열과 학생의 문자열이 합쳐진 또 다른 공간을 만들고
그 공간의 주소(할당된 주소)를 str1이 가지게 된다.
즉, 결론은 문자열을 계속 더해주면 기존의 주소값에서 데이터의 값이 추가가 되는 것이 아니라
새로운 공간을 계속 만들고 그 할당된 주소 값을 변수가 가지게 되는 것이다.
그러다 보니 문자열의 변경이 빈번하게 일어나게 될 경우에는 메모리의 영향을 줄수 밖에 없다.
이 문제를 해결하기 위해서 불변이 아닌 가변의 속성인
String Buffer 클래스 또는 StringBuilder 를 사용하는 것이다.
사용법
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
|
public class StringBufferTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb=new StringBuffer(); // StringBuffer
sb.append("홍길동");
sb.append(System.lineSeparator()); // 한줄 띄어쓰기
sb.append("학생");
/* 이렇게 선언 해도 상관 없음
sb.append("홍길동")
.append(System.lineSeparator()) // 한줄 띄어쓰기
.append("학생");
*/
StringBuilder sb1=new StringBuilder(); // StringBuilder
sb1.append("홍길동");
sb1.append(System.lineSeparator());
sb1.append("학생");
System.out.println(sb1.toString());
}
}
|
cs |
그러면 도데체 String Buffer 와 String Builder는 언제 써야되나??
간단하게 정리를 해보면
String -> 문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer -> 문자열 연산이 많고 멀티쓰레드 환경일 경우 (멀티 쓰레드는 CPU의 최대 활용을 위해서 프로그램을 둘 이상 동시에 실행하는 것)
StringBuilder -> 문자열 연산이 많고 싱글 쓰레드 또는 동기화를 고려하지 않아도 되는 경우 ( 싱글 쓰레드는 오직 하나의 쓰레드로만 실행하는것)
이럴 때 쓰면 된다.
'java' 카테고리의 다른 글
[java] 예외처리 해봅시다 (0) | 2023.04.02 |
---|---|
[java]자바 클래스 및 라이브러리 (import는 뭐야??) (0) | 2023.04.02 |
[java] 오버로딩과 오버라이딩~ (0) | 2023.03.31 |
[java]Math클래스를 사용해서 편리하게 계산하자 (0) | 2023.03.31 |
[java]인터페이스 it에서 말하는 인터페이스 과연 똑같은것일까? (0) | 2023.03.31 |