본문 바로가기
Category/개발일지

static 메소드와 스프링 IoC Singleton

by developer__Y 2024. 8. 14.

기존의 레거시 코드를 유지보수하던중 의문점이 드는 코드를 발견하였다.

전자정부프레임워크와 Mybatis를 기반에서 전역적으로 사용하는 공통 클래스가 abstract public class로 구현되어있고,

그 내부의 메소드는 static 형태로 존재하여 전역적으로 해당 method를 사용한다.

 

그런데, 해당 static 메소드 내부에서 Spring Bean에서 관리하는 @Service 객체를 직접 인스턴스를 생성하여 관련 처리를 하고있는것이다.

 

만약 위 static 메소드가 단순히 해당 메소드 내부에서 다른 어떠한 의존성을 가지지않는다면 static메소드로서 남아있으면 문제없겠지만, 해당 메소드가 Service 메소드와 의존성을 가진다면, 즉 스프링 컨테이너의 통제를 받는 다른 클래스와 연관을 가진다면 해당 메소드는 static이 아닌 스프링 컨테이너를 통해 의존성을 주입받는 형태로 변환 시켜야 한다고 생각하였다.

 

다른 연계된 로직들을 검토해본결과 해당 메소드가 꼭 static이 아니여도 관련 로직들을 처리하는데 문제가없다는 결론하에 static 메소드를 Spring Bean에 등록시켜 Singleton 인스턴스를 통해 해당 메소드를 호출하도록 변경하였다.