일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Kotlin
- 자바기초
- 웹크롤링
- ubuntu python
- MVVM pattern
- Nexus GraphQL
- graphQL
- Data structure
- 안드로이드 디자인패턴
- Design Pattern
- LinkedList
- unit test
- 안드로이드
- 유니티
- PYTHON
- 안드로이드 테스트
- dagger-hilt
- flutter
- Apollo Server
- 안드로이드 mvp
- mvvm
- Android
- Dependency Injection
- java
- 우분투 파이썬
- 파이썬 크롤링
- prisma
- 자바
- Apollo GraphQL
- Android test
- Today
- Total
Hun's Blog
[JAVA] String 과 String Buffer 의 차이 본문
참고 -
http://tcpschool.com/java/java_api_stringBuffer
String 과 String Buffer 의 차이
String - immutable class
1
2
3
4
5
|
- String 은 + 연산이 있을 때 마다 새로운 String 객체가 생성된다.
- 문자열 간 + 연산이 있는 경우 자바에서 자동으로 새로운 String 객체를 만든다.
- "Hello" , " " , "World" 총 3개의 String 자료형 객체가 만들어진 것이다.
** String 자료형은 한번 값이 생성되면 그 값을 변경할 수 없다.
이러한 속성의 클래스를 immutable class (불변 클래스) 라고한다.
불편 클래스는 append(), insert() 와 같은 값을 변경하는 set 메소드가 없다.
** 불편한 것 같은데 왜 사용하는가?
멀티 스레드 환경에서 객체가 변화되는 상황이라면
불변 클래스 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있기 때문이다.
하나의 객체에 접근하면서 각각 객체가 서로 영향을 주어서는 안되는 경우
불변 클래스 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장된다.
StringBuffer - mutable class
1
2
3
4
5
6
7
8
|
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb); // Hello World
System.out.println(sb.equals("Hello World")); // false
System.out.println(sb.toString().equals("Hello World")); // true
|
- StringBuffer는 단 한번만 생성된다.
- StringBuffer인 sb 라는 객체에 append() 메소드를 사용하여 문자가 추가 되는 것이다.
- insert() 메소드로 원하는 위치에 문자열을 삽입할 수 있다.
- 생성된 객체가 변경이 가능하다는 점에서 mutable class (가변 클래스) 라고한다.
** StringBuffer 클래스는 내부적으로 buffer 라고 하는 독립적인 공간을 가진다.
버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수도 있다. StringBuffer 를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라진다.
** 장점이 많은 것 같은데 StringBuffer 만 사용하면 안되나?
상황에 따라 다르다. StringBuffer 는 String 보다 무거운 편에 속한다. 문자열 추가나 변경등의 작업이 많은 경우 StringBuffer 를 사용하고, 변경 작업이 거의 없는 경우 String 을 사용하는 것이 좋다.
정리-
- String은 불변 클래스이고 불변 클래스로 생성된 객체는 값을 변경할 수 없다.
객체에 값이 변경될 때 변경되는 문자가 추가 or 제거되는 것이 아니라 완전히 새로운 객체가 생성되는 것이다. 그렇기 때문에 변경이 많은 경우 계속해서 객체가 생성되기 때문에 속도도 느려지고 메모리 사용량도 증가한다.
- StringBuffer는 가변 클래스이며 객체가 생성되고 나서 값을 변경할 수 있다.
문자 변경시 새로운 객체 생성 없이 바로바로 변경할 수 있기 때문에 메모리 낭비 없이 속도가 매우 빨라질 수 있으나 String 보다 무거워서 기본적으로는 메모리를 많이 사용한다.
문자 추가변경이 많은 경우 StringBuffer
그 이외에는 String을 사용한다.
'Language > Kotlin & Java' 카테고리의 다른 글
[JAVA] abstract와 interface의 차이점 (1) | 2020.03.21 |
---|---|
[JAVA] Method Overloading & Overriding (0) | 2020.03.21 |
[JAVA] Array DataStructure & ArrayList와 LinkedList의 차이점 (0) | 2020.03.21 |
[JAVA] Vector와 ArrayList의 차이점과 LinkedList (0) | 2020.03.21 |
[JAVA] JAVA란 무엇인가? (0) | 2020.03.21 |