<< 2008년 1월 1일 (화) | | 2008년 1월 3일 (목) >>

Java Tips : 정규 표현식 잘 사용하기

아래의 정규 표현 라이브러리는 멀티 쓰레드에서 안정적이지 않다는 내용을 글들이 많습니다.
여러분도 array index exception같은 예외 상황이 로그에 남아 있다면 심각하게 고민해봐야 할 듯 합니다.
그래서 멀티 쓰레드에서 안전하게 사용할려면 아래와 같이 사용하시면 됩니다.

Java Tips : String.intern()의 쓰임새

1. 샘플 문제

아래의 코드의 실행 결과는 어떻게 나올까요? 한번 알아맞춰 보세요.



2. 실행 결과

true
false
true
true
false
false
true

Java에서 쓰이는 모든 String 객체는 상수풀에서 관리되고, 상수풀은 클래스와 같은 Heap의 Permanent area(고정 영역)에 생성되어 Java 프로세스의 종료까지 그 LifeTime을 갖습니다.
즉, String을 new로 생성하지 않고 "" 리터럴을 사용하여 생성할 경우, 내부적으로 new String() 메소드 호출 이후에 String.intern()이라는 메소드가 호출되어 고유의 인스턴스를 공유하도록 interned됩니다.  이것은 생성한 String을 Constant pool에 등록하는(만약 이전에 같은 char sequence의 문자열이 이미 상수풀에 있다면 문자열을 힙에서 해제하고 그 상수풀의 레퍼런스를 반환) 작업을 수행합니다.
일반적으로 문자열들을 비교하기 위해서 equals메서드를 사용하지만, equals메서드로 문자열의 내용을 비교하는 것보다는 등가비교연산자(==)를 이용해서 주소(4 byte)를 비교하는 것이 더 빠릅니다.
그러나, intern() 과정에서 전체 문자열을 equals() 함으로 문자열 억제로 확실히 효과가 크다고 판단되는 상황이 아니면 권장하지 않습니다.
태그 :