[Spring] Static 사용을 피해야 하는 이유

hyewon jeong·2023년 4월 17일
0

Spring

목록 보기
41/59

1. Static 사용을 피해야 하는 이유

1-1. thread safe 하지 않음

프로그램 전역에서 사용되기 때문에 모든 스레드에서 static필드를 공유하게 됩니다. 이때 한 스레드에서 값을 변경할 경우 다른 모든 스레드에서 영향을 받을 수 있다.
-> 동시성 문제를 야기함

1-2. thread safe하게 만들기 위해 추가적인 작업필요

전역적으로 관리되기 때문에 기본적으로 thread safety하지 않으며, synchronize를 사용하여 이를 보장하기 위해서는 추가적인 작업이 필요합니다.

1-3. 메모리 문제

static 멤버는 프로그램이 종료될 때까지 GC로 회수되지 않기 때문에, 많은 수의 static 필드나 메서드가 존재할 경우 메모리에 영향을 미칠 수 있다.
static필드에 데이터가 계속해서 쌓이게 되면 OutOfMemory가 발생할 수 도 있다.

1-4. static 메서드는 오버라이딩 불가

1-5. static 멤버는 Serialization 불가

객체 직렬화는 인스턴스에 대해 적용되기 때문에 클래스 자체 정보인 static 멤버는 여기에 포함되지 않습니다.

2. static 을 활용 예

2-1. 자주 사용하지만 절대 변하지 않는 변수, 즉 상수의 경우에는 관례적으로 final static을 사용하여 선언합니다.

예를 들어 자주 사용하지만 절대 변하지 않는 변수, 즉 상수의 경우에는 관례적으로 final static을 사용하여 선언합니다. 이 경우 적어도 1바이트 이상의 GC 대상 객체가 사라지게 됩니다. GC가 애초에 대상으로 인식하지 않기 때문에 성능 향상에 도움을 줄 수 있습니다.

다만 단순히 편리하다는 이유로 잘못 사용하게 되면 의도한 바와 달리 예상하지 못한 문제를 야기할 수도 있습니다.

참고
https://kellis.tistory.com/127

profile
개발자꿈나무

0개의 댓글