일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- Git
- StringBuilder
- sql문
- String클래스
- 개발자
- 백엔드
- 프로그래머스 SQL
- 알고리즘
- 메서드
- 스프링
- 클래스
- 백준
- 정보처리기사
- scanner
- MySQL
- select문
- DML
- BufferedReader
- 웹개발
- 정보처리기사필기요약
- order by
- 데이터 조회
- 프론트엔드
- 프로그래머스 sql 고득점 kit
- where
- select
- Linux
- mybatis
- 리눅스
- SQL
- 자바
- JavaScript
- github
- 입출력
- html
- 자바스크립트
- 예외처리
- 프로그래밍
- 형변환
- Today
- Total
ToBe끝판왕
[ JAVA ] 문자열클래스 / String / StringBuffer / StringBuilder 본문
자바( JAVA ) 에서 문자열을 다루는 대표적인 클래스
연산이 많지 않을때는 어떤 클래스를 사용하더라도 문제 없지만
연산횟수가 많아지거나 복잡한 상황에서 특징에 알맞게 적절한 클래스를 사용해보자
String 클래스
• 불변성을 갖는다. ( 변하지 않는 문자열을 자주 사용하는 경우에 좋은 성능 )
• 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
• concat 메서드 혹은 +연산자를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도
기존 문자열에 새로운 문자열을 붙이는것이 아니라, 새로운 String객체를 만든 후 새로운 String
객체에 연결된 문자열을 저장하고 그 객체를 참조하도록 한다.
String Str = " Hello "; // String Str = new String( "Hello" );
Str = Str + " World "; // [ Hello World ]
• String 클래스 객체는 Heap 메모리영역( 가비지 컬렉션 동작 영역 ) 에서 생성하고 한번 생성된 객체의
내부 내용을 변화시킬 수 없다.
• 문자열 연산( 문자열 추가 , 수정 , 삭제 등 ) 이 많은 경우 Heap메모리에 많은 임시 가비지가 생성되어
Heap 메모리 부족으로 성능이 좋지 않다.
StringBuffer 클래스 / StringBuilder 클래스
• 가변성을 가지고 있다.
• API를 이용하여 동일 객체내에서 문자열을 변경하는 연산이 가능하다.
• 문자열 연산( 문자열 추가, 수정, 삭제 ) 이 많은 경우에는 StringBuffer / StringBuilder 클래스를 사용해야 한다.
• StringBuffer / StringBuilder 클래스가 제공하는 메서드는 동일하다.
StringBuffer sb = new StringBuffer( "Hello" );
sb.append( "World" );
• 차이점
"동기화의 유무" 에서 차이점을 보인다.
StringBuffer는 각 메서드별로 Synchoronized Keyword가 존재, 멀티스레드 환경에서 동기화를 지원한다.
하지만, StringBuilder는 동기화를 보장하지 않는다.
( 멀티스레드 환경에서는 StringBuffer를 사용 , 단일스레드 환경에서는 StringBuilder를 사용 )
최종 정리
• String 클래스
- 문자열 연산이 적고 멀티쓰레드 환경일 경우
- 짧은 문자열을 더할 경우
• StringBuffer 클래스
- 문자열 연산이 많고 멀티쓰레드 환경일 경우
- 개발중인 시스템의 부분이 쓰레드에 안전한지 모를 경우
• StringBuilder 클래스
- 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 될 경우
- 쓰레드에 안전한지 여부가 전혀 관계없는 프로그램 개발시
'■ 공부 기록 > 개념 정리' 카테고리의 다른 글
[ 개념 ] DIP ( Dependency Inversion Principle ) (5) | 2024.10.29 |
---|---|
[ JPA ] ORM의 개념 / 장단점 (0) | 2022.06.03 |
[ JAVA ] 문자열분리 / StringTokenizer 클래스 / Split( ) 메서드 (0) | 2022.05.19 |
[ JAVA ] Exception 개념 / 예외처리( try-catch문 ) (0) | 2022.05.17 |
[ JAVA ] 입출력 / Scanner / BufferedReader / InputStream (0) | 2022.05.16 |