Java: String의 주요 메서드
1. String의 인스턴스 메서드
1.1 개요
String 클래스의 인스턴스 메서드는 문자열 객체를 통해 호출하는 메서드입니다. 즉, "hello".length()처럼 문자열 인스턴스를 기준으로 작동합니다.
1.2 주요 인스턴스 메서드 + 메모리 작동
Java의 String 클래스는 다양한 문자열 조작 기능을 제공하는 인스턴스 메서드를 포함하고 있다. 아래는 자주 사용되는 메서드들의 설명과 예시이다. 모든 String 인스턴스 메서드는 원본 문자열을 절대 수정하지 않으며, 필요한 경우 항상 새로운 문자열 객체를 Heap에 생성한다. (*불변성(immutability)*)
length()
문자열의 길이를 반환한다.
예:"hello".length()
→5
📌 설명: 내부char[]
배열의 길이를 반환하며, 연산은 매우 빠름 (O(1)).
charAt(int index)
지정한 인덱스의 문자를 반환한다.
예:"java".charAt(1)
→'a'
📌 설명: 내부 배열에서 해당 인덱스의 문자에 직접 접근.IndexOutOfBoundsException
주의.
substring(int begin, int end)
지정한 범위의 부분 문자열을 반환한다.
예:"hello".substring(1, 3)
→"el"
📌 설명: 새로운String
객체가 생성됨. 원본 문자열은 변하지 않음.
indexOf(String s)
주어진 문자열이 처음 등장하는 인덱스를 반환한다.
예:"hello".indexOf("l")
→2
📌 설명: 내부적으로 왼쪽부터 한 문자씩 비교. 시간복잡도는 O(n).
lastIndexOf(String s)
주어진 문자열이 마지막으로 등장하는 인덱스를 반환한다.
예:"hello".lastIndexOf("l")
→3
📌 설명: 내부적으로 오른쪽부터 역방향 검색. 불변 객체지만 탐색은 가변적으로 수행됨.
contains(String s)
특정 문자열이 포함되어 있는지를 boolean으로 반환.
예:"hello".contains("he")
→true
📌 설명: 내부적으로indexOf(...) >= 0
과 동일한 방식으로 작동.
startsWith(String prefix)
주어진 문자열로 시작하는지 확인.
예:"hello".startsWith("he")
→true
📌 설명: 접두어 길이만큼의 앞쪽 문자들을 순차 비교.
endsWith(String suffix)
주어진 문자열로 끝나는지 확인.
예:"hello".endsWith("lo")
→true
📌 설명: 끝부분에서 길이만큼 잘라 비교. 새로운 객체는 생성되지 않음.
equals(String s)
문자열의 내용을 비교한다.
예:"hi".equals("hi")
→true
📌 설명: 참조값이 다르더라도, 내부 문자 배열이 동일하면 true. 대소문자 구분.
equalsIgnoreCase(String s)
대소문자 무시하고 내용을 비교.
예:"Hi".equalsIgnoreCase("hi")
→true
📌 설명: 내부적으로toLowerCase()
후equals()
수행. 추가 연산 포함됨.
toUpperCase()
문자열을 모두 대문자로 변환.
예:"java".toUpperCase()
→"JAVA"
📌 설명: 원본 문자열은 유지되고, 대문자로 된 새 문자열 객체가 생성됨.
toLowerCase()
문자열을 모두 소문자로 변환.
예:"JAVA".toLowerCase()
→"java"
📌 설명:toUpperCase()
와 동일하게 새 객체 생성됨. 원본 유지.
trim()
문자열의 앞뒤 공백을 제거한다.
예:" hello ".trim()
→"hello"
📌 설명: 공백이 없는 경우에도 새로운 문자열 객체가 생성될 수 있음 (JDK 버전에 따라 다름).
replace(CharSequence old, CharSequence new)
문자열 내에서 지정한 문자열을 다른 문자열로 치환.
예:"apple".replace("p", "b")
→"abble"
📌 설명: 모든 치환 결과를 담은 새 문자열 객체 생성. 원본 변경 없음.
split(String regex)
지정한 정규 표현식을 기준으로 문자열을 나누고 배열로 반환.
예:"a,b,c".split(",")
→["a", "b", "c"]
📌 설명: 내부적으로 정규식 패턴을 컴파일하여 배열을 생성. 반환 타입은String[]
.
1.3 특징
- 모두 String 객체를 통해 호출한다.
- String은 불변(immutable)이라, 원본 문자열은 변경되지 않고 새 문자열을 반환한다.
2. String의 클래스 메서드
2.1 개요
String 클래스의 클래스 메서드는 static 메서드이며, 객체 생성 없이 String.으로 호출할 수 있다.
주로 타입 변환이나 문자열 생성에 사용된다.
2.2 주요 클래스 메서드 목록
Java의 String 클래스는 객체 없이도 호출 가능한 클래스 메서드(static method)들을 제공한다. 자주 쓰이는 타입 변환, 문자열 생성, 서식 처리 작업을 편리하게 처리하기 위해 고안되었다.
String.valueOf(...)
다양한 타입의 값을 문자열로 변환한다.
예:String.valueOf(123)
→"123"
📌 설명: 내부적으로 해당 타입을 문자열로 바꿔 새로운String
객체를 Heap에 생성한다.null
이 들어가면"null"
문자열이 반환됨.
String.copyValueOf(char[])
주어진char[]
배열을 문자열로 변환한다.
예:String.copyValueOf(new char[]{'h','i'})
→"hi"
📌 설명:valueOf(char[])
과 동일하며, 내부적으로 새String
객체가 생성됨.
String.format(String format, Object... args)
형식 지정 문자열을 생성한다.
예:String.format("%04d", 5)
→"0005"
📌 설명:printf
스타일 형식을 기반으로 포맷 처리. 내부에서Formatter
클래스를 사용해 문자열을 구성하고, Heap에 새 객체로 반환.
String.join(String delimiter, CharSequence...)
여러 문자열을 하나로 연결하고, 사이에 지정된 구분자를 넣는다.
예:String.join("-", "a", "b", "c")
→"a-b-c"
📌 설명: 내부적으로StringBuilder
를 이용하여 문자열을 효율적으로 이어붙인 후, 최종적으로String
객체로 반환됨.
String.valueOf(char[])
문자 배열 전체를 문자열로 변환한다.
예:String.valueOf(new char[]{'j','a','v','a'})
→"java"
📌 설명: 배열 전체를 읽어서 새로운String
객체를 생성한다. 부분 변환도valueOf(char[], offset, count)
로 가능.
2.3 특징
- 클래스 이름으로 직접 호출 (String.format(...))한다.
- 보통 타입 변환, 포맷팅, 조합 등에 사용된다.
- 객체 없이도 사용할 수 있다.
- static 키워드로 정의되며, String 클래스 이름으로 직접 호출
- 내부적으로는 대부분 새로운 문자열을 생성하여 Heap에 저장