Synchronized 클래스인 Vector, Hashtable, Stack, StringBuffer를 사용하면 안 됩니다.

 

초창기 자바 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. :star2:

원문으로 바로가기

Star This Project