본문 바로가기
프로그래밍/Java

[Java]Java의 String이 불변객체인 이유

by 시간많은백수 2023. 10. 2.
반응형

💡Java의 String이 불변객체인 이유

불변 문자열은 수정되지 않는 한 가지 문자열 값을 나타내며, 새로운 문자열을 생성할 때 기존 문자열을 변경하는 대신 새로운 문자열 객체를 생성합니다. 즉, 객체가 변수에 할당되면 참조를 업데이트하거나 내부 상태를 어떤 방법으로도 변경할 수 없습니다.

String이 불변객체인 이유는 다음과 같습니다.

 

📌보안

문자열은 자주 암호화되어야 하며, 암호화된 문자열을 수정할 수 없도록 보호해야 합니다. 불변 문자열은 암호화나 해싱과 같은 변형 작업에서 안전합니다.

 

📌스레드 안전성

불변 문자열은 여러 스레드에서 동시에 공유될 때 스레드 안전합니다. 스레드 간의 경합 조건(Race Condition)과 같은 문제를 방지합니다.

 

📌 캐싱과 재사용

불변 문자열은 자주 사용되는 문자열을 캐시하고 재사용할 수 있습니다. 이로 인해 메모리 공간이 절약되고 성능이 향상됩니다.

 

📌 자연적인 해시 키

불변 문자열은 해시 테이블과 같은 자료 구조에서 사용하기에 이상적입니다. 객체가 생성된 후 해시 코드가 변경되지 않기 때문에 예상치 못한 동작을 방지합니다.

 

📌 매개변수와 반환 값

메소드의 매개변수나 반환 값으로 불변 문자열을 사용하면, 호출자와 메소드 간에 의도치 않은 부작용을 방지할 수 있습니다.

 

📌 최적화 가능

불변 문자열은 컴파일러나 런타임에 최적화할 수 있는 여지를 제공합니다. 예를 들어, 문자열 연결 연산(+)이 최적화될 수 있습니다.

 

📌 클래스 계층 구조

불변 클래스로 설계된 String은 자바의 클래스 계층 구조에서 중요한 역할을 합니다. 많은 자바 클래스 및 라이브러리에서 String을 사용하므로 불변성은 중요한 디자인 원칙 중 하나입니다.

반응형