logo

Java의 불변 문자열

문자열은 응용 프로그램을 작성하는 동안 피할 수 없는 유형의 변수입니다. 문자열 참조는 사용자 이름, 비밀번호 등과 같은 다양한 속성을 저장하는 데 사용됩니다. Java에서는 문자열 객체는 변경할 수 없습니다. . 불변(Immutable)은 단순히 수정 불가능하거나 변경할 수 없음을 의미합니다.

String 객체가 생성되면 해당 데이터나 상태는 변경할 수 없지만 새로운 String 객체가 생성됩니다.

아래 예제를 통해 불변성의 개념을 이해해 봅시다.

테스트불변문자열.java

 class Testimmutablestring{ public static void main(String args[]){ String s='Sachin'; s.concat(' Tendulkar');//concat() method appends the string at the end System.out.println(s);//will print Sachin because strings are immutable objects } } 
지금 테스트해보세요

산출:

 Sachin 

이제 아래 다이어그램을 통해 이해할 수 있습니다. 여기서 Sachin은 변경되지 않았지만 Sachin Tendulkar를 사용하여 새 객체가 생성되었습니다. 이것이 바로 String이 불변(immutable)이라고 알려진 이유입니다.

Java의 불변 문자열

위 그림에서 볼 수 있듯이 두 개의 객체가 생성되었지만 에스 참조 변수는 여전히 'Sachin Tendulkar'가 아닌 'Sachin'을 참조합니다.

하지만 이를 참조 변수에 명시적으로 할당하면 'Sachin Tendulkar' 개체를 참조하게 됩니다.

예를 들어:

테스트불변문자열1.java

 class Testimmutablestring1{ public static void main(String args[]){ String s='Sachin'; s=s.concat(' Tendulkar'); System.out.println(s); } } 
지금 테스트해보세요

산출:

문자열 java에서 문자열 바꾸기
 Sachin Tendulkar 

그러한 경우, s는 '사친 텐둘카르(Sachin Tendulkar)'를 가리킨다. 여전히 Sachin 객체는 수정되지 않았습니다.

Java에서 String 객체가 불변인 이유는 무엇입니까?

Java는 문자열 리터럴 개념을 사용합니다. 5개의 참조 변수가 있고 모두 하나의 개체 'Sachin'을 참조한다고 가정합니다. 하나의 참조 변수가 개체의 값을 변경하면 모든 참조 변수의 영향을 받습니다. 이것이 바로 String 객체가 Java에서 불변인 이유입니다.

다음은 String 객체를 불변으로 만드는 String의 일부 기능입니다.

1. 클래스로더:

Java의 ClassLoader는 String 객체를 인수로 사용합니다. String 개체가 수정 가능한 경우 값이 변경될 수 있고 로드되어야 하는 클래스가 다를 수 있다는 점을 고려하세요.

이런 종류의 오해를 피하기 위해 String은 변경할 수 없습니다.

2. 스레드 안전:

String 개체는 변경할 수 없으므로 여러 스레드에서 개체를 공유하는 동안 필요한 동기화를 처리할 필요가 없습니다.

3. 보안:

클래스 로딩에서 본 것처럼 불변 String 객체는 올바른 클래스를 로딩함으로써 추가 오류를 방지합니다. 이로 인해 응용 프로그램이 더욱 안전하게 만들어집니다. 뱅킹 소프트웨어의 예를 생각해 보십시오. String 객체는 변경할 수 없기 때문에 사용자 이름과 비밀번호는 침입자에 의해 수정될 수 없습니다. 이는 응용 프로그램을 더욱 안전하게 만들 수 있습니다.

4. 힙 공간:

String의 불변성은 힙 메모리 사용량을 최소화하는 데 도움이 됩니다. 새로운 String 개체를 선언하려고 하면 JVM은 해당 값이 String 풀에 이미 존재하는지 여부를 확인합니다. 존재하는 경우 동일한 값이 새 개체에 할당됩니다. 이 기능을 통해 Java는 힙 공간을 효율적으로 사용할 수 있습니다.

Java에서 String 클래스가 Final 클래스인 이유는 무엇입니까?

String 클래스가 final인 이유는 누구도 String 클래스의 메서드를 재정의할 수 없기 때문입니다. 따라서 새 String 개체와 이전 개체에 동일한 기능을 제공할 수 있습니다.