String 클래스의 메서드들을 계속 잊어버려 복습겸 다시 정리해보았다.
🔖String 클래스
- Java에서 문자열을 다룰 때 가장 기본이 되는 클래스
- String 클래스는 문자열 데이터를 다루기 위한 불변(Immutable) 객체이다
- 한 번 생성된 문자열은 변경할 수 없으며, 문자열을 수정하는 것처럼 보이는 작업은 모두 새로운 문자열 객체를 생성하는 방식으로 처리된다
👉🏼 실제로는 새로운 문자열 객체가 생성된다
String str = "hello";
str = str + " world";
| 불변성 (Immutable) | 문자열을 수정할 수 없으며, 수정 시 새로운 객체가 생성된다 |
| 객체 생성 방식 | 문자열 리터럴로 생성하거나, new String()으로 생성할 수 있다 |
| 문자열 상수 풀 (String Pool) | 동일한 리터럴 문자열은 메모리 재사용을 통해 효율성을 높인다 |
| + 연산자 오버로딩 | 문자열 연결 시 + 연산자를 사용할 수 있다 |
| StringBuilder, StringBuffer와 비교 | 많은 문자열 수정이 필요할 경우, StringBuilder를 사용하는 것이 더 효율적이다 |
📝 주요 메서드 정리
| 메서드 | 설명 | 예시 |
| length() | 문자열 길이 반환 | "hello".length() → 5 |
| charAt(int index) | 특정 인덱스의 문자 반환 | "hello".charAt(1) → 'e' |
| substring(int beginIndex) | 특정 위치부터 끝까지 자름 | "hello".substring(2) → "llo" |
| substring(int begin, int end) | 범위 지정해서 자름 | "hello".substring(1,4) → "ell" |
| indexOf(String str) | 특정 문자열의 시작 위치 반환 | "hello".indexOf("l") → 2 |
| lastIndexOf(String str) | 마지막으로 등장하는 위치 반환 | "hello".lastIndexOf("l") → 3 |
| equals(Object obj) | 문자열 내용 비교 | "hi".equals("hi") → true |
| equalsIgnoreCase(String another) | 대소문자 무시 비교 | "Hi".equalsIgnoreCase("hi") → true |
| startsWith(String prefix) | 접두사 확인 | "hello".startsWith("he") → true |
| endsWith(String suffix) | 접미사 확인 | "hello".endsWith("lo") → true |
| contains(CharSequence s) | 포함 여부 확인 | "hello".contains("ell") → true |
| replace(CharSequence old, CharSequence new) | 문자열 치환 | "hello".replace("l", "r") → "herro" |
| toLowerCase() | 소문자로 변환 | "Hello".toLowerCase() → "hello" |
| toUpperCase() | 대문자로 변환 | "hello".toUpperCase() → "HELLO" |
| trim() | 앞뒤 공백 제거 | " hi ".trim() → "hi" |
| split(String regex) | 구분자로 나누기 | "a,b,c".split(",") → ["a", "b", "c"] |
| isEmpty() | 비어있는 문자열인지 확인 | "".isEmpty() → true |
| compareTo(String another) | 사전 순 비교 | "abc".compareTo("bcd") → 음수 |
| format(String format, Object...) | 형식 문자열 생성 | String.format("Hi %s", "Tom") → "Hi Tom" |
불변성 객체의 특징
- 스레드 안정성: 여러 스레드에서 안전하게 공유 가능하다
- HashMap 키로 사용하기 적합: 값 변경 위험이 없다
- 보안성 향상: 참조가 바뀌지 않기 때문에 안전하다
- 문열을 반복해서 수정해야 하는 경우, 매번 새로운 객체가 생성되어 성능 저하가 발생할 수 있다
- 이런 경우에는 StringBuilder 또는 StringBuffer를 사용하는 것이 좋다
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
System.out.println(sb); // hello world
StringBuilder는 내부 버퍼를 활용해 문자열을 수정하므로, + 연산을 반복하는 것보다 효율적이다
2025.01.19 - [IT/JAVA] - StringBuilder
StringBuilder
String 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데 덧셈 연산 많아진다면 성능적으로 좋지 않다많은 문자열을 연결하면 중간 문자열 객체가 생성되어 비효율적인 코드가 생성된
iamsh.tistory.com
반응형
'IT > JAVA' 카테고리의 다른 글
| 동기화 vs 원자적 연산 (1) | 2025.07.24 |
|---|---|
| ConcurrentHashMap – 멀티스레드 환경에서 안전하게 Map 사용하기 (1) | 2025.07.24 |
| JMH (JMH 라이브러리를 활용한 Java 코드 성능테스트) (2) | 2025.04.11 |
| ArrayList vs LinkedList (0) | 2025.04.08 |
| 코드 실행시간 비교 (0) | 2025.03.26 |