Java에서 문자열이 왜 불변인지?

왜 Java에서 String이 불변인지는 인기 있는 면접 질문 중 하나입니다. 문자열은 모든 프로그래밍 언어에서 가장 많이 사용되는 클래스 중 하나입니다. 우리는 Java에서 String이 불변이고 final임을 알고 있습니다. Java 런타임은 이를 특별한 클래스로 만드는 String pool을 유지합니다.

Java에서 String이 불변인 이유는 무엇인가요?

Java에서 String이 불변인 이유를 이해하는 데 도움이 되는 String 불변성의 몇 가지 이점을 살펴보겠습니다.

  1. String pool은 Java에서 String이 불변이기 때문에 가능합니다. 이렇게 함으로써 Java 런타임은 서로 다른 String 변수가 풀 내의 동일한 String 변수를 참조할 수 있기 때문에 많은 힙 공간을 절약할 수 있습니다. String이 불변이 아니라면 String 인터닝이 불가능했을 것입니다. 왜냐하면 어떤 변수가 값을 변경하면 다른 변수에도 그 변경이 반영되었을 것이기 때문입니다.
  2. 문자열이 불변형이 아니라면 응용 프로그램에 심각한 보안 위협을 초래할 수 있습니다. 예를 들어, 데이터베이스 사용자 이름, 암호는 데이터베이스 연결을 얻기 위해 문자열로 전달되며 소켓 프로그래밍에서 호스트 및 포트 세부 정보가 문자열로 전달됩니다. 문자열이 불변형이기 때문에 참조 값이 변경되지 않으며 그렇지 않으면 해커가 참조된 값을 변경하여 응용 프로그램에서 보안 문제를 발생시킬 수 있습니다.
  3. 문자열이 불변형이기 때문에 멀티스레딩에 안전합니다. 단일 문자열 인스턴스는 다른 스레드에서 공유될 수 있습니다. 이로 인해 스레드 안전성을 위해 동기화를 사용할 필요가 없어집니다. 문자열은 암묵적으로 스레드 안전합니다.
  4. 문자열은 자바 클래스로더에서 사용되며 불변성은 올바른 클래스가 클래스로더에 의해 로드되고 있는지를 보장합니다. 예를 들어, java.sql.Connection 클래스를 로드하려고 하지만 참조 값이 변경되어 myhacked.Connection 클래스로 변경되어 데이터베이스에 원치 않는 작업을 수행할 수 있는 경우를 상상해보십시오.
  5. 문자열이 불변형이기 때문에 생성 시에 해시코드가 캐시되어 다시 계산할 필요가 없습니다. 이로 인해 맵의 키로 사용하는 데 매우 적합하며 처리 속도가 다른 HashMap 키 객체보다 빠릅니다. 이것이 문자열이 HashMap 키로 가장 널리 사용되는 이유입니다.

위에 나열된 몇 가지 이유는 문자열 불변성의 이점을 보여주는 것으로 생각합니다. 이것은 Java String 클래스의 훌륭한 기능이며 특별합니다. 자체 불변 클래스를 작성하는 방법을 알아보려면이 게시물을 읽으십시오.

더 많은 Java String 예제는 GitHub 저장소에서 확인할 수 있습니다.

Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java