문자열(String) 개념 설명
자바의 String은 문자들의 *시퀀스를 나타내는 참조 자료형이다.
String 객체는 불변(immutable)하며, 한번 생성된 문자열은 변경할 수 없다. 문자열 연산시 새로운 String 객체가 생성다.
※ 시퀀스(Sequence)란?
- "연속된 데이터의 나열" 또는 "순서가 있는 데이터의 집합"을 의미한다.
- String은 내부적으로 char의 배열로 구현되어 있었다가 byte 배열로 변경되었다.
변화와 이유(char배열에서 byte 배열로 변경된 이유)
- Java 8까지
- char[] 배열 사용
- 각 문자당 2바이트 사용
- 유니코드 문자 저장
- Java 9 이후
- byte[] 배열로 변경
- Latin-1(1바이트)과 UTF-16(2바이트) 인코딩 모두 지원
- 메모리 효율성 개선 (대부분의 문자열이 ASCII만 사용하므로)
//실제 동작 예시
String str = "Hello";
// Java 8까지의 내부 저장 방식
char[] chars = {'H', 'e', 'l', 'l', 'o'};
// Java 9 이후의 내부 저장 방식 (ASCII 문자의 경우)
byte[] bytes = {72, 101, 108, 108, 111};
//메모리 사용량
// Java 8 이전
String str = "Hello"; // 10바이트 (2byte * 5chars)
// Java 9 이후
String str = "Hello"; // 5바이트 (1byte * 5chars)
간단한 설명:
String은 필름 카메라로 찍은 사진과 같다. 한번 현상된 필름 사진은 절대 수정할 수 없고, 다른 모습을 담고 싶다면 새로운 사진을 찍어야 하는 것처럼 String도 새로운 객체를 생성해야 한다.
주요 역할
- 텍스트 데이터 저장 및 처리
- 문자열 비교 및 검색
- 문자열 변환 및 조작
사용 목적
- 텍스트 기반 데이터 처리
- 사용자 입력 처리
- 파일 경로나 URL 등의 문자열 데이터 관리
자주하는 실수
- == 연산자로 문자열 비교 (equals() 메서드 사용해야 함)
- String 객체를 반복적으로 수정하여 성능 저하
- 불필요한 String 객체 생성
관련 개념 비교
특성 | String | StringBuilder | StringBuffer |
---|---|---|---|
변경가능성 | 불변 | 가변 | 가변 |
스레드 안전성 | 안전 | 비안전 | 안전 |
성능 | 낮음 | 높음 | 중간 |
주요 메서드와 실무 활용 예시
// 문자열 생성
String str = "Hello";
// 문자열 결합
str.concat(" World"); // Hello World
// 문자열 비교
str.equals("Hello"); // true
// 부분 문자열 추출
str.substring(0, 3); // "Hel"
// 문자열 검색
str.indexOf("l"); // 2
// 문자열 대체
str.replace("l", "L"); // "HeLLo"
// 문자열 분할
String[] parts = "a,b,c".split(",");
// 공백 제거
" hello ".trim(); // "hello"
// 대소문자 변환
str.toUpperCase(); // "HELLO"
str.toLowerCase(); // "hello"
실무 활용 예시:
사용자 입력 검증
if (userInput.trim().isEmpty()) {
throw new IllegalArgumentException("입력이 비어있습니다");
}
파일 경로 처리
String filePath = "/user/documents/file.txt";
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
URL 파라미터 파싱
String url = "name=John&age=25";
String[] params = url.split("&");
데이터 포맷팅
String formatted = String.format("Hello, %s!", userName);
JSON/XML 파싱 전처리
String jsonStr = jsonStr.trim().replace("\n", "");
'Java > 자바 학습' 카테고리의 다른 글
자바 문자열의 포매팅 (0) | 2025.05.09 |
---|---|
자바의 String은 클래스다. (0) | 2025.05.09 |
자바 제네릭 (1) | 2025.05.07 |
자바 컬렉션 프레임워크 (0) | 2025.05.07 |
자바의 예외 처리 (0) | 2025.05.07 |