본문 바로가기

JAVA/DAY 16 _ 23.09.07

불변/가변객체2

String str1 = "안녕";
String str2 = "안녕";

String str3 = new String("안녕2");
// --> 새로운 문자열 객체를 생성하는 방법 중 하나입니다. 
// --> 이 코드는 "안녕2"라는 문자열을 가진 새로운 문자열 객체를 생성하고, 그것을 str3 변수에 할당합니다.
// --> 이 경우에는 항상 새로운 문자열 객체를 생성하게 됩니다.
System.out.println(str3 + "str3");


String str4 = "Hello, 안녕, aa";

// String. --> static인것들이 보임(위에 s붙은 애들)
// static인것들 : 함수다! 외부에서 입력받은 값으로 해결하는 애들
// static API들은 무조건 '클래스명.'으로 호출하기

// str4. --> static아닌것들도 보임
// static아닌것들 : "Hello, 안녕, LOW" 이것들로 조작하는 애들
// ex)

if(str4.contains("ell")) {
System.out.println("문자열에 ell이 포함되어있니? 앞뒤바꾸면 의미가 달라지므로 주의.");
}	

if(str4.equals("안녕")) {
System.out.println("안녕이랑 같니?");
}

if("안녕".equals(str4)) {
System.out.println("앞뒤를 바꿔도 되겠지~ 얘도 참조주소니까는...");
}

## 불변객체 ex) concat

 

// concat : 새로운 문자열을 생성하여 기존 문자열에 다른 문자열을 추가합니다.
// 기존 문자열 자체를 변경하지 않고 새로운 문자열을 반환합니다.
// 따라서 아래와 같은 코드는 str4의 내용을 변경하는 것이 아니라 새로운 문자열을 생성하고 str4에 할당하는 것입니다.

// --> 이전의 str4는 가비지 컬렉션(Garbage Collection)에 의해 회수됩니다.

str4.concat("aaa");			
System.out.println(str4);
// 이렇게 str4만 불러오면 결과를 return못해서 그냥 Hello, 안녕, LOW만 출력됨

String a = str4.concat("str4에 지금 적는 문자열을 붙여주는 API");
System.out.println(a);
// ★ 불변객체 : 내부가 변하지 않아
// --> 객체를 사용하여 새로운 객체를 생성해야 상태를 변경할 수 있음
// 출력 : Hello, 안녕, LOWstr4에 지금 적는 문자열을 붙여주는 API

str4 = str4.concat("앞으로는 String concat쓸때 자기 자신을 변수로 받을거야!");
System.out.println(str4);
// 출력 : Hello, 안녕, LOW앞으로는 String concat쓸때 자기 자신을 변수로 받을거야!
// 이러면 str4자체를 변경시킬 수 있지? 
// --> 이전의 str4는 가비지 컬렉션(Garbage Collection)에 의해 회수됩니다.

 

 

 *** 만약 문자열을 더 효율적으로 결합하려면 StringBuilder나 StringBuffer를 사용하는 것이 좋습니다.
// --> 가변 문자열을 효율적으로 처리하며문자열 연결 작업을 수행할 때 메모리와 성능 면에서 더 효율적입니다.

StringBuilder stringBuilder = new StringBuilder(str4);
stringBuilder.append("앞으로는 String concat쓸때 자기 자신을 변수로 받을거야!");
str4 = stringBuilder.toString();
//	--> 위 코드는 StringBuilder를 사용하여 문자열을 효율적으로 연결하고,
//	마지막에 toString 메서드를 호출하여 str4에 새로운 문자열을 할당합니다.

 

'JAVA > DAY 16 _ 23.09.07' 카테고리의 다른 글

API _ String  (0) 2023.09.19
불변/가변객체1  (0) 2023.09.19
라이브러리  (0) 2023.09.19
Enum(열거형)  (0) 2023.09.19
Class 설계원칙  (0) 2023.09.19