왜 Java에서 String이 불변인지는 인기 있는 면접 질문 중 하나입니다. 문자열은 모든 프로그래밍 언어에서 가장 많이 사용되는 클래스 중 하나입니다. 우리는 Java에서 String이 불변이고 final임을 알고 있습니다. Java 런타임은 이를 특별한 클래스로 만드는 String pool을 유지합니다.
Java에서 String이 불변인 이유는 무엇인가요?
Java에서 String이 불변인 이유를 이해하는 데 도움이 되는 String 불변성의 몇 가지 이점을 살펴보겠습니다.
- String pool은 Java에서 String이 불변이기 때문에 가능합니다. 이렇게 함으로써 Java 런타임은 서로 다른 String 변수가 풀 내의 동일한 String 변수를 참조할 수 있기 때문에 많은 힙 공간을 절약할 수 있습니다. String이 불변이 아니라면 String 인터닝이 불가능했을 것입니다. 왜냐하면 어떤 변수가 값을 변경하면 다른 변수에도 그 변경이 반영되었을 것이기 때문입니다.
- 문자열이 불변형이 아니라면 응용 프로그램에 심각한 보안 위협을 초래할 수 있습니다. 예를 들어, 데이터베이스 사용자 이름, 암호는 데이터베이스 연결을 얻기 위해 문자열로 전달되며 소켓 프로그래밍에서 호스트 및 포트 세부 정보가 문자열로 전달됩니다. 문자열이 불변형이기 때문에 참조 값이 변경되지 않으며 그렇지 않으면 해커가 참조된 값을 변경하여 응용 프로그램에서 보안 문제를 발생시킬 수 있습니다.
- 문자열이 불변형이기 때문에 멀티스레딩에 안전합니다. 단일 문자열 인스턴스는 다른 스레드에서 공유될 수 있습니다. 이로 인해 스레드 안전성을 위해 동기화를 사용할 필요가 없어집니다. 문자열은 암묵적으로 스레드 안전합니다.
- 문자열은 자바 클래스로더에서 사용되며 불변성은 올바른 클래스가 클래스로더에 의해 로드되고 있는지를 보장합니다. 예를 들어,
java.sql.Connection
클래스를 로드하려고 하지만 참조 값이 변경되어myhacked.Connection
클래스로 변경되어 데이터베이스에 원치 않는 작업을 수행할 수 있는 경우를 상상해보십시오. - 문자열이 불변형이기 때문에 생성 시에 해시코드가 캐시되어 다시 계산할 필요가 없습니다. 이로 인해 맵의 키로 사용하는 데 매우 적합하며 처리 속도가 다른 HashMap 키 객체보다 빠릅니다. 이것이 문자열이 HashMap 키로 가장 널리 사용되는 이유입니다.
위에 나열된 몇 가지 이유는 문자열 불변성의 이점을 보여주는 것으로 생각합니다. 이것은 Java String 클래스의 훌륭한 기능이며 특별합니다. 자체 불변 클래스를 작성하는 방법을 알아보려면이 게시물을 읽으십시오.
더 많은 Java String 예제는 GitHub 저장소에서 확인할 수 있습니다.
Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java