728x90
반응형
728x90
String
자바의 문자열을 다루는 클래스로 불변(immutable)입니다. 한 번 생성된 String 객체의 내용은 변경할 수 없고 새로운 String 객체를 생성하여 참조를 변경할 수 있습니다.
주요 특징
- 불변성(Immutability): String 객체는 생성 후 내용을 변경할 수 없는 불변성 객체
- String pool: 문자열 리터럴로 생성된 String 객체는 문자열 상수풀에 저장되어 메모리 효율을 높이고 동일한 문자열에 대해 여러 참조가 같은 메모리 주소를 가리킬 수 있게 함
- Thread-Safe: String은 불변성으로 객체의 내용이 변하지 않기 때문에 멀티스레드 환경에서 여러 스레드가 동시에 같은 String 객체를 읽어도 안전하게 동작
- final 클래스: String 클래스는 final로 선언되어 상속이 불가능하고 이는 불변성 유지와 보안 강화에 기여
주요 메서드
- charAt(int index): 지정된 인덱스의 문자를 반환
- concat(String str): 다른 문자열을 현재 문자열에 연결
- contains(CharSequence s): 지정된 문자열이 포함되어 있는지 확인
- equals(Object anObject): 두 문자열이 동일한지 비교
- indexOf(String str): 지정된 문자열의 첫 번째 발생 위치를 반환
- length(): 문자열의 길이를 반환
- replace(char oldChar, char newChar): 문자열에서 특정 문자를 다른 문자로 대체
- split(String regex): 정규식을 사용하여 문자열을 나눔
- substring(int beginIndex): 지정된 인덱스부터 시작하는 부분 문자열을 반환
- toLowerCase(): 문자열을 소문자로 변환
- toUpperCase(): 문자열을 대문자로 변환
concat(String str)과 +연산
두 문자열을 합치는 두 가지 방법의 차이는 무엇인가?
- concat(String str): 기존 문자열과 연결할 문자열의 내용을 새로운 String 객체에 복사 후 연결된 새로운 문자열 반환
- + 연산: 컴파일 단계에서 StringBuilder로 변환되어 append 연산 후 toString()을 통해 반환
concat(String str) | + 연산 | |
성능(여러 개의 문자열을 합치는 경우) | 합칠 때 마다 새로운 String 객체 생성으로 비효율적 | append 연산으로 합친 후 한 번의 toString() 을 통한 객체 생성으로 효율적 |
쓰레드 안정성 | 불변성인 String 객체 내용을 복사해 새로운 객체로 옮기는 것으로 멀티쓰레드 환경에도 안전 | StringBuilder를 통해 처리되어 동기화 과정이 없는 StringBuilder는 멀티쓰레드 환경에 안전하지 않음 |
StringBuilder
자바에서 가변 문자열을 다루는 데 사용되는 클래스입니다. String과 달리 문자열을 동적으로 수정할 수 있는 mutable한 특징을 가지고 있으며 문자열 추가, 삽입, 삭제, 교체, 뒤집기 등 다양한 작업을 효율적으로 수행 가능합니다.
주요 특징
- Mutable: StringBuilder는 가변(mutable)으로 문자열을 동적으로 수정 가능
- Non-Thread-Safe: StringBuilder는 동기화 과정이 없어 스레드에 안전하지 않음 → 여러 스레드가 접근할 경우 데이터의 일관성이 깨질 수 있음
- 성능: StringBuilder는 문자열을 추가하거나 수정할 때 새로운 객체를 생성하지 않아 성능이 좋음
주요 메서드
- append(String str): 지정된 문자열을 현재 문자열의 끝에 추가
- insert(int offset, String str): 지정된 위치에 문자열을 삽입
- replace(int start, int end, String str): 지정된 범위의 문자열을 다른 문자열로 교체
- delete(int start, int end): 지정된 범위의 문자열을 삭제, 혹은 지정 인덱스의 문자 삭제
- reverse(): 문자열을 뒤집음.
- toString(): StringBuilder의 내용을 String으로 반환
- length(): 문자열의 길이를 반환
- capacity(): StringBuilder의 현재 용량을 반환
- ensureCapacity(int min): StringBuilder의 용량을 최소한으로 설정
생성 방법
- StringBuilder(): 기본 용량(16)을 갖는 빈 StringBuilder를 생성
- StringBuilder(int capacity): 지정된 초기 용량을 갖는 빈 StringBuilder를 생성
- StringBuilder(String str): 지정된 문자열로 초기화된 StringBuilder를 생성
- StringBuilder(CharSequence seq): 지정된 문자열 시퀀스로 초기화된 StringBuilder를 생성
StringBuffer
StringBuilder와 마찬가지로 가변 문자열을 다루는 클래스입니다. 동적으로 수정할 수 있는 mutable한 특징을 가지고 있고 문자열을 추가, 삽입, 삭제, 교체, 뒤집기 등 작업을 효율적으로 수행할 수 있습니다.
주요 특징
- Mutable: StringBuffer는 가변(mutable)으로 문자열을 동적으로 추가하거나 수정 가능
- Thread-Safe: StringBuffer는 내부적으로 동기화되어 있어 멀티스레드 환경에서도 안전하게 사용 가능 → 여러 스레드가 동시에 접근해도 데이터의 일관성 유지 가능
- 성능: StringBuffer는 문자열을 추가하거나 수정할 때 새로운 String 객체를 생성하지 않아 String 보다 성능이 좋지만 동기화 과정에서 발생하는 오버헤드로 StringBuilder 보단 느림
주요 메서드
- append(String str): 지정된 문자열을 현재 문자열의 끝에 추가
- insert(int offset, String str): 지정된 위치에 문자열을 삽입
- delete(int start, int end): 지정된 범위의 문자열을 삭제
- replace(int start, int end, String str): 지정된 범위의 문자열을 다른 문자열로 교체
- reverse(): 문자열을 뒤집음
- toString(): StringBuffer의 내용을 String으로 반환
- length(): 문자열의 길이를 반환
- capacity(): StringBuffer의 현재 용량을 반환
생성 방법
- StringBuffer(): 기본 용량(16)을 갖는 빈 StringBuffer를 생성
- StringBuffer(int capacity): 지정된 초기 용량을 갖는 빈 StringBuffer를 생성
- StringBuffer(String str): 지정된 문자열로 초기화된 StringBuffer를 생성
- StringBuffer(CharSequence seq): 지정된 문자열 시퀀스로 초기화된 StringBuffer를 생성
비교
클래스 불변성 쓰레드 안전성 성능
클래스 | 불변성 | 스레드 안정성 | 성능 |
String | 불변 | 안전 | 낮음 → 매번 String 객체 생성 |
StringBuilder | 가변 | 불안전 | 빠름 → 동기화 과정이 없고 객체 생성 없이 여러 번 문자열을 조작 가능 |
StringBuffer | 가변 | 안전 | 보통 → 객체 생성 없이 여러 번 문자열 조작이 가능하나 동기화 과정에서 오버헤드 발생 |
728x90
'스터디 > CS' 카테고리의 다른 글
[CS] 자바 예외 - Java Exception (0) | 2025.04.07 |
---|---|
[CS] 자바의 final, finally, finalize (0) | 2025.04.04 |
[CS] 자바 문자열 할당 방식 (0) | 2025.03.27 |
[CS] 객체 지향 프로그래밍 특징 (0) | 2025.03.26 |
[CS] Garbage Collection (0) | 2025.03.25 |