본문 바로가기
IT/Java

Spring 에서 Singleton

by 성준하이 2023. 7. 28.
반응형

singleton 패턴에 대해서는 아래 참고 포스팅을 참고 바란다.

 

spring 에서의 기능중 하나는 의존성 주입인 DI 가 있다.

자세한 내용은 아래 참고 포스팅 참고바란다.

 

스프링에서는 컨테이너 위에 Bean이라고 하는 객체들을 생성한다.

그럼 개발자가 아닌 스프링에서 Bean을 대신해서 관리를 해준다.

 

여기서 Bean은 스프링위에 생성이 되는데,

호출이 될때마다 생성이 되는것이 아닌.

Bean은 하나만 생성해두고, 호출이 될때마다 그 객체를 가져다 쓴다.

 

여러번 호출이 된다고 해서 객체가 여러개 생기는게 아니고 , 이것이 싱글톤이다.

 

간단히 코드로 예제를 살펴보면.

 

@RestController
@RequiredArgsConstructor
public class TestController {
     private final TestService service;
     private final TestService service2;

@PostMapping("/api")
public String justApi(@RequestBody TestInDto inDto) {
     System.out.println(System.identityHashCode(service));
     System.out.println(System.identityHashCode(service2));

....이하 생략

일단 TestService역시 Bean으로 등록되어있고,

TestController에서 해당 테스트 서비스를 service 와 service2라는 이름으로 두번 호출이 되었다.

그럼 여기서 주소위치를 호출하는 identityHashCode를 출력하면 어떻게 나올까?(참고 포스팅 참고)

 

필자의 피시에서 출력은 아래와 같았다.

 

912946384

912946384

 

즉 동일한 메모리의 위치를 참조하고 있다.

 

한가지 테스트를 더 해보면 

Service안에 

private int cnt=0;

public int getCnt() {
     return this.cnt;
}
public int addCnt() {
     cnt= this.cnt+1;
     return cnt;
}

이라는 코드를 추가 후

다시 TestController 에서 

System.out.println(service.getCnt());
service.addCnt();
System.out.println(service2.getCnt());

를 할 경우 출력은

0, 1 이 순서대로 나온다.

 

분명 service에 addCnt를 해줬지만 동일 주소를 참조하는 service2에도 값이 증가된것을 확인할 수 있다.


참고 포스팅

https://thenicesj.tistory.com/146

 

객체지향 디자인 패턴 심화 정리 part.1

포스팅을 읽기 전에 아래 참고 포스팅에서 간단한 디자인패턴에 대한 정의와 종류에 대해서 읽고 오면 도움이 될것이다. 그리고 이번 포스팅에서는 좀더 심화된 내용을 다뤄볼 것이다. 저번 포

thenicesj.tistory.com

https://thenicesj.tistory.com/144

 

Spring 에서 IOC, AOP, DI 에 대하여

이번 포스팅에서는 SPRING의 핵심요소인 IOC, AOP, DI에 대해서 다뤄볼 것이다. 다른 특징들도 많지만 이 세가지는 스프링의 장점으로 많이 알려져있다. 하나씩 다뤄보도록 해보자. IOC(Inversion of Contro

thenicesj.tistory.com

https://thenicesj.tistory.com/599

 

JVM 내에 저장되어있는 데이터 위치 값 확인

자바를 사용한다면 JVM 이 뭔지 알것이라고 생각이 되지만 혹시 좀더 이해가 필요하면 아래 참고 포스팅을 참고 바란다. 자바에서 만약 String text = "A"; 이라고 선언을 하면 jvm 메모리 어딘가에 text

thenicesj.tistory.com

 

반응형

댓글