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
}
'JAVA 유용한 클래스' 카테고리의 다른 글
(JAVA)자바 multi-threading 이란 - 6 (0) | 2025.04.25 |
---|---|
(JAVA)자바 Thread - 5 (0) | 2025.04.25 |
(JAVA)Exception(예외처리) (0) | 2025.04.24 |
(JAVA)자바 API 문서 확인해 보기 - 2 (0) | 2025.04.24 |
(JAVA)Object 클래스란 뭘까? - 1 (0) | 2025.04.24 |