JAVA/기초공부

[JAVA] String 클래스

SoU330 2024. 9. 29. 18:46

 

 

자바에서 String 클래스란?

: 자바에서 문자열을 다루기 위해 제공되는 대표적인 클래스

문자열은 char의 배열로 구성된 데이터 타입이며 자바에서는 String 클래스가 이러한 문자열을 처리하고 관리하는 역할을 한다.

 

 

 

String 클래스 주요 특징

1. 불변성

String 객체는 한 번 생성되면 그 값을 변경할 수 없다. 문자열을 수정하는 경우 새로운 String 객체가 생성되고 원래의 문자열은 변경되지 않는다. 

-> 멀티스레드 환경에서 안전하게 사용할 수 있다. (상태 변화가 없기 때문에 동기화 불필요, 공유 객체를 안전하게 재사용, 데이터 일관성 보장)

 

2. 리터럴로 선언 가능

String str = "Hello"; 처럼 문자열 리터럴을 이용해 선언할 수 있다. 자바는 동일한 리터럴 값을 가진 문자열을 메모리의 하나의 공간에서 재사용하기 때문에 성능상 이점이 있다.

-> 메모리 효율성, 성능 최적화 (String Constant Pool)

 

3. 메소드 제공

  • length() : 문자열의 길이 반환
  • charAt(int index) : 특정 인덱스에 위치한 문자 반환
  • substring(int beginIndex, int endIndex) : 문자열의 부분 문자열 반환
  • equals(Object anObject) : 두 문자열이 같은지 비교
  • toUpperCase(), toLowerCase() : 대소문자 변경

 

4. 가변 문자열 사용을 위한 대안

String 객체가 불변이므로 자주 수정해야 하는 문자열 작업에서는 성능 이슈가 있을 수 있다. 이런 경우 StringBuilder 또는 StringBuffer 클래스를 사용하는 것이 좋다.

 

 

 

 

 

 

String 클래스 생성

String strA = new String("소유진");
String strB = "김유진";

 

 

문자열 복사

 strA = strB;

 

 

 

String 클래스 인스턴스 비교

== 연산자

: 문자열이 저장된 주소를 비교하므로 인스턴스의 내용이 같은지를 올바르게 판단할 수 없다.

equals()

: 참조변수가 참조하는 내용이 같은지를 판단한다.

String strA = new String("ABBA");
String strB = "ABBA";

// 문자열에서 == 연산자는 주소를 비교
boolean resultA = (strA == strB);
System.out.printf("== 연산자는 주소 비교 : %b\n",resultA);

// 문자열에서 내용 비교 시 문자열에서 equals() 메소드 사용
boolean resultB = strA.equals(strB);
System.out.printf("equals() 메소드는 내용 비교 : %b\n",resultB);

-> 내용을 비교하려면 equals() 함수를 사용해야한다.

-> 만약 new 키워드 없이 했다면 주소로 비교하더라도 true 의 결과가 나온다. 자바는 동일한 리터럴 문자열을 하나의 메모리 공간에서 재사용하기 때문이다.

 

 

 

 

 

 

String 클래스의 문자열 연결 

+ 연산자

연산할 두 개의 문자열 중 하나가 String 문자열이면 문자열이 아닌 값이 String 으로 변환하여 문자열을 연결한다.

// 문자열에서 + 연산자는 문자열을 연결
String strA = "안녕하세요. ";
strA += "저는 ";
strA += "소유진";
strA += "입니다.";
System.out.printf("문자열 연결의 경우 : %s\n",strA);

// 문자열과 숫자를 연결 시 숫자는 문자열로 변환되어 연결된다.
String strB;
strB = "당신의 자바 점수는 " + 100 + "점 입니다.";
System.out.printf("문자열과 숫자 연결의 경우 : %s\n",strB);

 

 

 

 

toString()

자바언어의 최상위 클래스는 Object 클래스이며 Object 클래스로부터 상속 받은 모든 클래스는 toString() 메서도를 가지고 있다.

이 메소드를 사용하여 기본형 데이터와 객체를 String 클래스인 문자열로 나타낼 수 있다.

 // toString() 메소드 오버라이딩
public String toString() {
    return String.format("이름 : %s, 주소 : %s, 핸드폰번호 : %s\n",name,address,phoneNumber);
}

PersonInfo 클래스 안에 이 메소드가 있으면

 

// PersonInfo 형 객체생성 후 초기값을 생성자에게 전달
PersonInfo prInfo = new PersonInfo("유진","서울","010-1212-3434");

// toString() 메소드는 객체를 문자열로 표현한 값을 리턴한다.
System.out.println(prInfo);

이렇게 했을 때 위의 형식대로 출력된다.

-> println() 메소드가 객체를 출력할 때 내부적으로 toString() 메소드를 호출하기 때문이다.

 

 

 

 

 

 

 

String 클래스 배열

문자열이 여러 개이면 배열을 사용할 수 있다.

 // 문자열 배열 선언
String strA[] = new String[4];

// 문자열 배열에서 객체생성 후 초기값을 default 생성자에게 전달
strA[0] = new String("김태연");

// 문자열 배열은 객체이므로 객체를 생성하지 않고 문자열 저장
strA[1] = "권유리";
strA[2] = "이순규";
strA[3] = "황미영";

// 문자열에 저장된 값을 for 문을 이요하여 출력
for (String stA : strA)
    System.out.printf("  %s",stA);
System.out.println();

// 문자열 배열 선언 및 초기값 부여2
String strB [] = {
        "최수영", "임윤아", "서주현", "김효연"
};

for (String stB : strB)
    System.out.printf("  %s",stB);

 

'JAVA > 기초공부' 카테고리의 다른 글

[JAVA] 메소드 오버라이딩  (0) 2024.10.01
[JAVA] 패키지  (3) 2024.09.29
[JAVA] this와 this() 메소드  (0) 2024.09.28
[JAVA] 생성자와 생성자 중복  (5) 2024.09.28
[JAVA 기초] 클래스 정의 및 객체 생성  (1) 2024.09.25