inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

옵션 처리

싱글톤 객체와 setter 주입, 생성자 주입

343

taeyeong.jeong419

작성한 질문수 1

0

스프링은 싱글톤으로 객체를 생성하기 때문에 변경 가능성이 없어야 한다고 하셨잖아요, 그런데 의존관계 주입 방법에서 setter를 이용해 주입하는 방법은 변경 가능성이 있는 경우에 사용하라고 하신것과 약간 충돌이 나는 느낌이 있어서요,

  1. 위 설명에서 무엇을 알려주시고자 했는지 의도에 대한 부가설명을 해주세요.

    혹시 싱글톤 객체는 stateless 해야 한다는 것은 구현체의 필드값이 stateless 해야 한다는 것이고, 생성자 주입과 setter 주입은 어떤 구현체를 쓸 것인가와 관련된 부분인가요? 제가 다른 주제의 이야기를 혼동하고 있었나요?

  2. 또, 생성자 주입을 이용하는 이유는 단지 널포인터익셉션을 방지하기 위함일 뿐인가요? 이것만 주의하면 setter 주입을 사용해도 되나요? 변경 가능성이 있는 의존관계에서 사용한다는데 생각보다 많은 곳에서 사용될 것 같아서요,,

 

 

spring oop

답변 1

2

나무늘보

안녕하세요, taeyeong.jeong419 님! 공식 서포터즈 codesweaver 입니다.

스프링 컨테이너는 스프링 빈을 (기본적으로) 싱글톤 스코프로 관리합니다.

싱글톤인 스프링 빈은 여러 프로세스가 동시에 접근, 사용할 수 있기에 stateless 설계가 중요합니다.

그렇지 않으면 리소스 충돌이 일어나는 등 상황을 예측할 수 없기 때문입니다.

 

그래서 강의에서는 생성자를 통한 스프링 빈 주입을 권장하였습니다.

그리고 setter를 제공하지 않아, 외부에서 이를 변경할 가능성을 완전히 차단합니다.

그리고 멤버 변수에 private final을 적용하여 내부에서 변경할 가능성도 차단하는게 일반적입니다.

 

이런 규칙은 ‘법칙’이 아니기에 강요할 수 없으나, 여러 상황을 겪으며 축적된 좋은 사례(best practice)라고 생각하시면 됩니다.

감사합니다.

빈 스코프 개념의 중요성

0

16

1

SingletonService가 JVM이 뜰 때 생성되는게 맞나요?

0

66

2

섹션3. 11 회원객체 다이어그램

0

38

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

40

1

코드 자료

0

85

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

83

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

100

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

104

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

89

1

테스트 속도가 나중에 영향이 있을까요?

0

91

1

gradle 설정 안떠서 질문 남깁니다!

0

145

2

build.gradle로 프로젝트를 여는 이유

0

100

1

provider 사용하는 이유

0

98

1

다음 강의 뭘 들어야 할까요

0

140

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

70

1

beanB

0

94

2

퀴즈다시풀기

0

77

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

105

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

72

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

116

2

도메인의 정의?

0

64

1

ApplicationContext 질문입니다.

0

68

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

98

2

ai api 선정하기 관련 질문

0

141

2