JAVA 유용한 클래스

(JAVA)String, StringBuffer

mynote6676 2025. 4. 24. 17:22

1.String 클래스 이해하기

String클래스는 자바에서 문자열을 표현하는데 사용됩니다.  String은 불변(immutable)객체로 한번 생성

된 문자열은 변경할 수 없습니다.

 

1.1. Stuing 객체는 두 가지 방식으로 생성할 수 있습니다.

1. 리터럴 방식: String 선언 방식

string 객체는 두가지 방식으로 생성할 수 있습니다.

1.리터럴 방식 : sturing str1 = "Hello";

문자열 리터럴은 String Constant Pool과 별개로 동작합니다.

2.new 연산자 사용 string str2 = new string("Hello"):

-힙 메모리에 새로운 객체를 생성하며, String Constant pool과는 별개로 동작합니다,

 

1.2. String Constant poold이란?

String Constant poold은 JVM의 힙 메모리 내에 존재하는 특별한 영역으로, 문자열 리터럴을 저장하고 재사용하여 메모리 효율성을 높입니다. 동일한 문자열 리터럴은 string Constant pool에서 하나의 객체만 생성되고 , 모든 변수가 이를 참조합니다.  

 

 

package _string;

import _object.Book;

public class StringTest2 {

    public static void main(String[] args) {

        // 스트링 객체는 불변이다.
        String str1 = new String("Hello");
        String str2 = new String("World");

        // 원래 객체 주소가 생성 되어있고 내부 변수 값이 변경이 된다면
        // String 클래는 수정되지 않고 불변이다.
        // 즉 수정이 되면다면 새로운 String 객체를 만드는 동작으로 실행된다.

        System.out.println("고유 주소 확인 : " + System.identityHashCode(str1));
        // 문자열 연결 기능 호출해 보기
        str1 = str1.concat(str2);
        System.out.println("수정 이후 고유 주소 확인 : " + System.identityHashCode(str1));

    }

}

2. StringButter 클래스 이해하기

String 클래스의 불변성으로 인해 문자열을 자주 변경할 때 메모리 낭비가 발생한다면, 이를 해결하기 위해 StringBuffer 또는

Stringbuilder를 사용할 수 있다.

 

2.1 SringBuffer VS StringBuilder

-StringBuffer

-내부적으로 가변적인 char[] 배열을 사용하여 문자열을 변경.

-동기화(synchronization)**를 지원하므로 멀티스레드 환경에서 안전.

-멀티 스레드 횐경(예 :백엔드 서버)에서 사용 권장.

 

StringBuilder ;

- StringBuilder와 동일한 기능이지만 동기화를 지원하지 않음.

-동기화 오버헤드가 없으므로 단일 스레드 환경에서 더 빠름

-단일 스레드 프로그램에서 사용 권장.

 

package _string;

public class StringBufferTest1 {

    // StringBuffer <-- 클래스를 이야기 하기 위해서 String 특징 ...
    public static void main(String[] args) {

        String str1 = new String("Hello");
        String str2 = new String("World");

        // 새로 배우는
        StringBuffer buffer1 = new StringBuffer(str1);

        System.out.println("수정 전 : " + System.identityHashCode(buffer1));

        // buffer1 에 값을 수정해 보자. 문자열 변경
        buffer1.append(str2);
        buffer1.append("111");
        buffer1.append("222");

        System.out.println("수정 후 : " + System.identityHashCode(buffer1));

        // 이전 버전는 hashCode(); 해당 객체의 유일성 보장하는 정수 값
        // API 8 버전에서는 buffer1.toString() 해야 값을 확인 할 수 있다.
        System.out.println(buffer1.toString());

        // StringBuffer 데이터 타입을 String 으로 형 변환 하려면 .toString() 호출하면 된다.
        String result = buffer1.toString();

    } // end of main

}