자바에서 문자를 다루는 대표적인 타입은 char
, String
2가지가 있다.
기본형인 char
는 문자 하나를 다룰 때 사용한다. char
를 사용해서 여러 문자를 나열하려면 char[]
를 사용해야 한다. 하지만 이렇게 char[]
을 직접 다루는 방법은 매우 불편하기 때문에 자바는 문자열을 매우 편리하게 다룰 수 있는 String
클래스를 제공한다.
String
클래스를 통해 문자열을 생성하는 방법String str1 = "hello";
String str2 = new String("hello");
String
은 클래스다. int
, boolean
같은 기본형이 아니라 참조형이다. 따라서 str1
변수에는 String
인스턴스의 참조값만 들어갈 수 있다.
문자열은 매우 자주 사용된다. 그래서 편의상 쌍따옴표로 문자열을 감싸면 자바 언어에서 new String("hello")
와 같이 변경 해준다.
String str1 = "hello"; //기존
String str1 = new String("hello"); //변경
String
클래스 구조public final class String {
//문자열 보관
private final char[] value;// 자바 9 이전
private final byte[] value;// 자바 9 이후
//여러 메서드
public String concat(String str) {...}
public int length() {...}
...
}
private final char[] value;
여기에는 String
의 실제 문자열 값이 보관된다. 문자 데이터 자체는 char[]
에 보관된다.
String
클래스는 개발자가 직접 다루기 불편한 char[]
을 내부에 감추고 String
클래스를 사용하는 개발자가 편리하게 문자열을 다룰 수 있도록 다양한 기능을 제공한다. 그리고 메서드 제공을 넘어서 자바 언어 차원에서도 여러 편의 문법을 제공한다.
참고 : 자바 9 이후 String 클래스 변경 사항
자바 9부터는
String
클래스에서char[]
대신에byte[]
을 사용한다.private final byte[] value;
자바에서 문자 하나를 표현하는
char
는2byte
를 차지한다. 그런데 영어, 숫자는 보통1byte
로 표현이 가능하다. 그래서 단순 영어, 숫자로만 표현된 경우1byte
를 사용하고, 그렇지 않은 나머지의 경우2byte
인 UTF-16 인코딩을 사용한다. 따라서 메모리를 더 효율적으로 사용할 수 있게 변경되었다.
String
클래스는 문자열로 처리할 수 있는 다양한 기능을 제공한다.
length()
: 문자열의 길이를 반환한다.charAt(int index)
: 특정 index
의 문자를 반환한다.subString(int beginIndex, int endIndex)
: 문자열의 부분 문자열을 반환한다.indexOf(String str)
: 특정 문자열이 시작되는 인덱스를 반환한다.