본문 바로가기
JAVA/자바 문법

[Java] String 클래스

by isfp_yykkng 2023. 9. 2.

String 클래스

String 클래스는 문자열을 표현하는 자바에서 가장 많이 사용하는 클래스이다.

String(문자열) 인스턴스 생성 방법

1. new 연산자를 이용하지 않고 인스턴스를 만드는 경우

String str1 = "hello";
String str2 = "hello";

new 연산자를 이용하지 않고 만들면 "hello" 라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 여기서 상수는 변하지 않는 값을 의미한다. 위에서 str2 의 "hello" 는 해당 문장이 실행될 때 hello 라는 문자열 상수가 윗줄에서 String str1 = "hello" ; 라는 문장을 통해서 만들어져 있기 때문에 str1이 참조하는 인스턴스를 str2도 참조한다.

즉, str1, str2가 같은 문자열 인스턴스를 참조할 경우 new 연산자를 사용하지 않았기 때문에 같은 인스턴스를 참조하는 것이다.

 

2. new 연산자를 이용해서 인스턴스를 만드는 경우 ⭐

String str3 = new String("hello");
String str4 = new String("hello");

new 연산자를 이용해서 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다. 위에 코드에서 String str4 = new String("hello") ; 이 문장이 실행될 때도 새롭게 만들게 되므로, str3과 str4는 서로 다른 인스턴스를 참조한다.

 

위의 str1 ~ str4 를 예제로 들어 설명하자면 다음과 같다.

if(str1 == str2) {
    System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}
// str1과 str2는 str1에서 이미 만들어진 같은 인스턴스를 참조하므로 true

if(str1 == str3) {
    System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}
// str3은 new 연산을 통해서 문자열을 생성했기 때문에 같은 인스턴스를 참조하지 않으므로 false

if(str3 == str4) {
    System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}
// str3과 str4는 new 연산을 통해서 문자열을 생성했기 때문에 같은 인스턴스를 참조하지 않으므로 false

// 참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교함. ⭐

위에서 설명한 바와 같이 str2는 new 연산자를 사용하지 않고 생성했기 때문에 str1에서 생성한 hello 인스턴스를 참조하기 때문에 str1과 참조하는 인스턴스가 같다. 하지만, str3과 str4는 new 연산자를 사용하여 새로운 인스턴스를 만들어 참조했기 때문에 완전히 다른 레퍼런스이다.

String 클래스 특징⭐

  • String은 다른 클래스와 다르게 new 연산자를 사용하지 않고 사용할 수 있다. 따라서 메모리를 아끼고자 한다면 String은 new를 사용하지 않고 사용하는 것이 좋다. 
  • String은 불변 클래스이다. (불변이란 String이 인스턴스가 될 때 가지고 있던 값을 나중에 수정할 수 없는 것이다.)
  • String이 가지고 있는 메소드 중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다. (String이 불변 클래스이기 때문)

예제

String str5 = "hello world";
String str6 = str5.substring(3);

substring은 문자열을 자른 결과를 반환하는 String 클래스의 메소드인데 이 코드가 실행되어도 String은 불변 클래스이기 때문에 str5는 "hello world" 그대로 변하지 않는다. 대신 str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 새로운 String을 참조하게 된다.

String클래스의 메소드

1. 문자열 길이 구하기 (length)

System.out.println( 문자열명.length() );

구하려는 문자열 이름 뒤에 .length() 메소드를 사용하면 해당 변수가 참조하는 문자열의 길이를 구해서 int 타입으로 리턴해주는 메소드이다. 

 

2. 문자열 붙히기 (concat)

String str = new String("hello"); //String str = "hello"; 도 결과는 동일

System.out.println(str.concat("world")); //출력결과는 helloworld 
System.out.println(str); //출력결과는 hello

기존 문자열 뒤에 .concat() 메소드를 사용하면 concat() 메소드의 인자로 가지고 있는 값을 기존 문자열 뒤에 붙혀서 새로운  String 타입으로 리턴해주는 메소드이다.  

 

3. 문자열 자르기 (subString)

//위에 코드에서 이어진다.
System.out.println(str.substring(1,3)); //hello를 담고 있는 str의 인덱스 1~3까지 자름. (결과 el)
System.out.println(str.substring(2)); //hello를 담고 있는 str의 인덱스 2~끝까지 자름. (결과 llo)

자르고자 하는 문자열 이름 뒤에 .substring() 메소드를 사용하여 문자열을 자를 수 있다. substring의 인자로는 시작 인덱스(1), 끝인덱스(3) 을 가질 수 있다. 첫번째 코드와 같이 시작 인덱스 1부터 끝인덱스 3 전까지 자른 것이다. 즉, hello의 1번 e 부터 3번 l 의 전인 l까지 잘라서 el 이 나온 것이다.

 

기본적인 String 클래스의 메소드는 이정도고 추가적인 메소드들은 나중에 사용하면서 알아보도록 하자.

'JAVA > 자바 문법' 카테고리의 다른 글

[Java] Object 값을 String 형으로 변환 (toString(), String.valueOf())  (0) 2024.03.19
[Java] 필드(속성)와 메소드  (0) 2023.09.02
[Java] 클래스  (0) 2023.08.31
[Java] 참조형 타입  (0) 2023.08.31
[Java] 객체지향언어  (0) 2023.08.31