반응형
💡Java의 String이 불변객체인 이유
불변 문자열은 수정되지 않는 한 가지 문자열 값을 나타내며, 새로운 문자열을 생성할 때 기존 문자열을 변경하는 대신 새로운 문자열 객체를 생성합니다. 즉, 객체가 변수에 할당되면 참조를 업데이트하거나 내부 상태를 어떤 방법으로도 변경할 수 없습니다.
String이 불변객체인 이유는 다음과 같습니다.
📌보안
문자열은 자주 암호화되어야 하며, 암호화된 문자열을 수정할 수 없도록 보호해야 합니다. 불변 문자열은 암호화나 해싱과 같은 변형 작업에서 안전합니다.
📌스레드 안전성
불변 문자열은 여러 스레드에서 동시에 공유될 때 스레드 안전합니다. 스레드 간의 경합 조건(Race Condition)과 같은 문제를 방지합니다.
📌 캐싱과 재사용
불변 문자열은 자주 사용되는 문자열을 캐시하고 재사용할 수 있습니다. 이로 인해 메모리 공간이 절약되고 성능이 향상됩니다.
📌 자연적인 해시 키
불변 문자열은 해시 테이블과 같은 자료 구조에서 사용하기에 이상적입니다. 객체가 생성된 후 해시 코드가 변경되지 않기 때문에 예상치 못한 동작을 방지합니다.
📌 매개변수와 반환 값
메소드의 매개변수나 반환 값으로 불변 문자열을 사용하면, 호출자와 메소드 간에 의도치 않은 부작용을 방지할 수 있습니다.
📌 최적화 가능
불변 문자열은 컴파일러나 런타임에 최적화할 수 있는 여지를 제공합니다. 예를 들어, 문자열 연결 연산(+)이 최적화될 수 있습니다.
📌 클래스 계층 구조
불변 클래스로 설계된 String은 자바의 클래스 계층 구조에서 중요한 역할을 합니다. 많은 자바 클래스 및 라이브러리에서 String을 사용하므로 불변성은 중요한 디자인 원칙 중 하나입니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] OOP의 4가지 특징 (1) | 2023.10.04 |
---|---|
[Java] Java의 접근 제어자의 종류와 특징 (0) | 2023.10.03 |
[Java]String, StringBuilder, StringBuffer의 차이 (2) | 2023.09.30 |
[Java] 컴파일러(Compiler) vs 인터프리터(Interpreter) (0) | 2023.09.29 |
[Java] 컴파일 과정 (0) | 2023.09.28 |