[자바/Java] String 클래스의 구조와 특징

dongbrown·2024년 7월 26일

Java

목록 보기
1/6

1. String 클래스 개요

1.1 String 클래스의 구조

Java의 String 클래스는 문자열을 다루는 핵심 클래스로, 불변(immutable) 특성을 가지고 있습니다.

public final class String {
    private final byte[] value; // Java 9 이후
    // private final char[] value; // Java 9 이전

    // 다양한 메서드들
    public int length() { ... }
    public String concat(String str) { ... }
    // 기타 메서드들...
}

Java 9 이후의 변경사항

  • Java 9 이전: private final char[] value;
  • Java 9 이후: private final byte[] value;
    ->char2byte 를 차지한다. 그런데 영어, 숫자는 보통 1byte 로 표현이 가능 하다. 그래서 단순 영어, 숫자로만 표현된 경우 1byte 를 사용하고(정확히는 Latin-1 인코딩의 경우 1byte 사용) , 그렇지 않은 나머지의 경우 2byte 인 UTF-16 인코딩을 사용한다. 따라서 메모리를 더 효율적으로 사용할 수 있게 변경

2. String 객체 생성

2.1 생성 방법

String 객체를 생성하는 두 가지 주요 방법:

  1. 리터럴 방식 (쌍따옴표 사용)
  2. new 키워드를 사용한 객체 생성

2.1.1 예제 코드

public class StringCreationExample {
    public static void main(String[] args) {
        String str1 = "Hello, World!";  // 리터럴 방식
        String str2 = new String("Hello, World!");  // new 키워드 사용

        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);
    }
}

2.2 문자열 풀 (String Pool)

리터럴 방식으로 생성된 문자열은 문자열 풀에 저장되어 메모리를 최적화합니다.

3. String vs char 배열

3.1 기본 비교

Java에서 문자를 다루는 기본 타입은 char이지만, 여러 문자를 다룰 때는 String이 더 편리합니다.

3.1.1 예제 코드

public class CharArrayVsString {
    public static void main(String[] args) {
        char[] charArray = {'J', 'a', 'v', 'a'};
        String str = "Java";

        System.out.println("char array: " + new String(charArray));
        System.out.println("String: " + str);
    }
}

3.1.2 출력 결과

char array: Java
String: Java

4. String 연산과 메서드

4.1 문자열 연결

문자열 연결은 + 연산자나 concat() 메서드를 사용할 수 있습니다.

4.2 주요 메서드

  • length()
  • toUpperCase()
  • toLowerCase()
  • substring()
  • trim()

4.2.1 예제 코드

public class StringOperationsExample {
    public static void main(String[] args) {
        String prefix = "Hello";
        String suffix = "World";

        String result1 = prefix.concat(", ").concat(suffix);
        String result2 = prefix + ", " + suffix;

        System.out.println("Using concat(): " + result1);
        System.out.println("Using + operator: " + result2);

        // 기타 유용한 메서드들
        System.out.println("Length: " + result2.length());
        System.out.println("Uppercase: " + result2.toUpperCase());
        System.out.println("Substring: " + result2.substring(0, 5));
    }
}

5. String 비교

5.1 동일성 vs 동등성

  • 동일성(Identity): == 연산자 사용
  • 동등성(Equality): equals() 메서드 사용

5.2 비교 예제

public class StringComparisonExample {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("Hello");

        System.out.println("str1 == str2: " + (str1 == str2));  // true (동일성)
        System.out.println("str1 == str3: " + (str1 == str3));  // false (동일성)
        System.out.println("str1.equals(str3): " + str1.equals(str3));  // true (동등성)
    }
}

6. 결론

Java의 String 클래스는:

  • 문자열 처리를 위한 강력하고 편리한 도구
  • 불변성을 가짐
  • 다양한 메서드 제공
  • Java 프로그래밍에서 핵심적인 역할 수행

문자열을 다룰 때는 String 클래스의 특성을 이해하고, 적절한 메서드와 비교 연산을 사용하는 것이 중요합니다.

0개의 댓글