초창기 자바 API의 클래스들 중 하나인 Vector
, Hashtable
, StringBuffer
같은 클래스들은 thread-safe
라는 목적을 달성하기 위해 sychronized
하게 설계되었습니다.
하지만 불행히도 이러한 sychronized
컬랙션을 단일 스레드에서 사용한다면 경우에도 성능에 큰 문제를 끼칩니다.
unsychronized
한 대체품을 사용하는 것이 낫습니다.
권고하지 않음 | 권고 |
---|---|
Vector |
ArrayList or LinkedList
|
Stack |
Deque |
Hashtable |
HashMap |
StringBuffer |
StringBuilder |
만약 동기화를 의도했다 하더라고, 사용법이 까다로울 수 있습니다. 따라서 사용 전에 다시 한 번 생각해야 합니다. 사용해도 되겠다는 확신하는 경우 이 경고를 무시해도 됩니다.
규칙을 어긴 코드
Vector cats = new Vector();
규칙을 준수한 해결책
ArrayList cats = new ArrayList();
예외
오버라이딩하는 메소드의 시그니처가 synchronized
클래스라면 이 규칙은 알람을 울리지 않습니다.
@Override
public Vector getCats() {...}
If you like SONARKUBE, don’t forget to give me a star.