일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- linux
- Web Server
- JVM
- javascript
- tool
- it
- Oracle
- Gradle
- elasticsearch
- Git
- redis
- ubuntu
- Spring Batch
- jsp
- 요리
- Spring Boot
- devops
- 맛집
- laravel
- Spring
- MySQL
- java
- IntelliJ
- springboot
- Design Patterns
- php
- ReactJS
- db
- jenkins
- Today
- Total
아무거나
String의 이해 본문
[String의 이해]
1. String(객체 자료형)
// 이상한 점은 String은 분명 대문자로 시작하므로, 기초데이터가 아닌 객체데이터 입니다.
// 하지만 뒤에 new를 사용하지 않고 기초데이터를 만들 때 처럼 초기화 하고 있다.
String string = "HelloWorld";
// String의 경우만 특이하게 객체데이터 이지만, 기초데이터처럼 사용할 수 있게 하였습니다.
// 이유는 아마도 많이 쓰이는 객체라서 편하게 사용하라고 그렇게 만든것 같습니다.
// 그러므로 아래 두 경우 모두를 사용할 수 있다.
String string = "HelloWorld";
String string = new String("HelloWorld");
2. String의 주요 기능들(메소드)
- concat: 문자열 연결
- substring : 문자열 자르기
- length : 문자열 길이
- toUpperCase : 대문자로 만들기
- toLowerCase : 소문자로 만들기
- charAt : 특정위치의 글자 찾기
- indexOf : 특정문자열의 위치
- equals : 문자열의 비교
- trim : 문자열 공백제거
- replace : 특정문자 변경
- repalceAll : 특정문자열 변경
3. String의 문제점
String클래스는 바로 메모리를 과소비 하는 것 입니다. String객체의 경우 처음 초기화된 데이터에 변화가 생기면 기존 것을 재활용 하기보다는 새것을 찾는다.
ex) 만약 "ABC"가 있는 String1객체와 "DEF"라는 문자열을 합친다고하면 한 메모리 안에서 합쳐지는게 아니고
ABC가 있는 메모리는 무시되고 새로운 메모리주소를 만들어 "ABCDEF"를 할당된다.
물론 나중에 아무도 참조하는 애가 없는 "ABC"가 있는 메모리 공간은 GC에서 회수한다. 그런데 회수하기 전까지는 메모리가 살아있는거니 메모리가 중복되는
것이다. 그래서 과소비하는것이 단점이다.
-> 그래서 !! String클래스의 대안으로 StringBuffer와 StringBuilder가 등장하게 된다.
4. StringBuffer와 StringBuilder의 등장
위의 3번의 문제점과 같이 String클래스의 새로운 메모리를 생성하는 문제로 인해 속도가 느려지는 현상이 있다. 그래서 속도적인 측면에서 더욱 개선된
StringBuffer와 StringBuilder가 등장한다.
[StringBuilder 주요 기능]
ex) StringBuilder stringBuilder = new StringBuilder("abcdefg");
- append : 문자열추가
- insert : 특정 위치에 문자열 추가
- delete : 문자열 삭제
- deleteCharAt : 특정 문자 하나 삭제
* StringBuffer와 StringBuilder는 약간의 차이가 있을 뿐 같다고 생각하시면 됩니다.
-> 기능은 같고, 단지 StringBuilder가 속도 면에서 좀 더 빠릅니다.
'Java & Kotlin > Java' 카테고리의 다른 글
Random 클래스 (0) | 2019.08.12 |
---|---|
Calendar api (0) | 2019.08.12 |
스트레티지 패턴 (0) | 2019.08.12 |
싱글턴 패턴(Singleton Pattern) (0) | 2019.08.09 |
인터페이스 (0) | 2019.08.08 |