1. String Pool
Java 개발자들은 모든 종류의 Java 어플리케이션에서 가장 많이 사용되는 데이터 타입이 String이 될 것이라고 예측했었다.
그래서 몇 가지 아이디어를 낸다.
1.
String pool(Constant pool)에 String 리터럴을 포함하는 것
•
목표는 String 객체를 공유해 temporary하게 생성된 String 객체를 줄여주는 것
•
공유를 하기 위해서는 Immutable(불변)한 String 클래스를 만들어야 함
2) Security
•
Java는 모든 서비스 레벨에서 보안 환경을 제공하자는 목표를 가지고 있다.
•
특히, String은 호스트 및 포트, 디렉터리 경로, DB 연결에 필요한 URL 등에 자주 사용되기 때문에 보안이 더 중요하다.
3) Use of String in Class Loading Mechanism
•
class loading mechanism에서 자주 사용됨
•
String이 Immutable하지 않다고 하면 공격자는 악용 가능
ex) java.io.Reader 등 Java 표준 클래스의 로드 요청시에 악성 com.unknown.DataStolenReader 클래스로 변경하게 할 수 있음
4) Multithreading Benefits
•
멀티 쓰레드 환경에서 동기화 문제는 보통 공유 자원에 동시에 쓸 때(Write) 일어난다.
•
만약 공유 자원이 Immutable하다면 항상 동일한 값을 반환할 것이기 때문이 더 이상 동기화를 e덜 고려해도 된다.
5) Hash
•
String은 HashMap, Hashtable과 같은 해시 기반 컬렉션의 키로 많이 사용되기 때문에 동일한 값으로 저장된 객체를 검색할 수 있도록 해시 코드 캐시가 가능해야 함