스프링의 DI 주입 및 IoC 를 알고계신다면 이해가 좀 더 쉽습니다 ^^
간단하게 설명드리면
해당 메소드에서 다른 Class 또는 Method 를 호출한다고 가정을 해볼때
호출되는 method 가 static이 아니라면 어떻게 호출을 할까요?
결국 객체를 new 를 사용해서 새로 만든후에 Class.method 로 호출할 수 밖에 없습니다.
여기서 스프링의 IoC 의 개념이 무너집니다.
스프링은 객체를 new 로 만들지 않습니다. 왜냐면 객체의 생성 및 소멸에 대한 권한을 컨테이너에
넘겼기 때문입니다~
만약 static 을 사용하시려 한다면 의존되는 객체를 static 또는 new 로 만들어야 합니다.
그렇게 사용하신다면 굳이 스프링을 사용하실 필요가 없습니다.
스프링의 핵심기능인 IoC 를 사용하지 않겠다고 하시게 되는것이니까요~
** static 으로 만들면 heap 이 아닌 class(method) 영역에 상주시키니까 속도나
메모리 면에서(접근) 더 빠를수도 있습니다. 그런 경우도 당연히 있지요
하지만 static method 안에서 다른 객체를 new 로 생성한다거나 한다면 해당 method 가
호출될때마다 객체가 새로 생성되며, 그 객체에 대한 생성과 소멸을 직접 관리하셔야 합니다.
스프링을 이런 객체에 대한 생성과 소멸을 관리해주며, 싱글톤 레지스트리라는 방법을 사용하여
객체를 Singleton 과 같이 한번만 생성 하기 때문에 오히려 성능이 더 좋을 수 있습니다.
어떤쪽을 택하시겠습니까??
'WIL(What I Learned)' 카테고리의 다른 글
What does the colon (:) operator do? (0) | 2021.08.16 |
---|---|
java input (Scanner class) (0) | 2021.08.16 |
JPA에서 복수의 pk 지정하기 (0) | 2021.07.22 |
Entity에 무작위의 문자열을 id값으로 지정하기 (0) | 2021.07.22 |
TIL (0) | 2021.07.13 |