[JAVA] String, String Constant Pool

JHJeong·2024년 3월 13일
0

String

String 자료형을 생성하기 위해서 아래 2가지 방법으로 생성한다.

1. String s1 = "String Value";
2. String s2 = new String("String Value");
3. String s3 = "String Value";

1번 방식은 Literal하게 이용하는 방식이고, 이렇게 사용하게 되면 해당 String값은 Heap 영역 내의 "String Constant Pool"에 저장되어 3번에서 s3 객체를 생성할 때 재사용할 수 있게 된다.
2번 방식은 new 연산자를 통해서 String 객체의 생성자로 생성하는 방식이다. Heap 영역 내에 저장되지만, 재사용은 할 수 없어서 new 연산자로 같은 문자열을 생성한다면 생성할 때 마다 Heap 영역 따로 사용하게 된다.

대신 String을 Literal하게 생성하게 되면 Constant Pool에서 update를 할 수 없게된다. 즉, 불변성(Immutable)을 가진다고 할 수 있다.

String이 Immutable한 이유

  1. Security
  • 파일 경로, 네트워크 연결 정보 등 보안에 민감한 데이터가 문자열로 처리될 때, 불변성은 해당 데이터가 코드 실행 중에 변경되지 않도록 보장한다. 문자열이 가변적이라면, 악의적인 코드에 의해 중요 정보가 변경될 수 있으며, 이는 보안상의 심각한 위험을 초래할 수 있기 때문이다.
  1. Caching
  • 문자열 객체의 불변성은 같은 값을 가지는 문자열이 Constant Pool에서 단 한번만 생성되게 할 수 있기 때문에, 메모리 사용량을 최적화하고 성능을 개선하는데 도움이 된다.
  1. Synchronization
  • 문자열이 불변이기 때문에 여러 스레드가 동일한 문자열 객체를 안전하게 공유할 수 있다. 이는 문자열 객체를 사용할 때 추가적인 동기화가 없어도 스레드 안정성(thread-safety)를 보장한다는 것을 의미한다.
profile
이것저것하고 싶은 개발자

0개의 댓글