inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

빈 등록 초기화, 소멸 메서드

스프링 빈이 스프링에 의존하지 않는다는 것의 의미

해결된 질문

413

lets_go

작성한 질문수 5

1

안녕하세요! 강의에서 설정 정보를 사용하면 "스프링 빈이 스프링 코드에 의존하지 않는다"라고 말씀해주셨는데요.

@Bean이 있어 스프링 코드를 사용해야 하는 환경인데, 스프링에 의존하지 않는다는 게 어떤 의미인지 한 번에 잘 이해가 가지 않습니다.

import org.springframework.beans.factory.annotation.Autowire;

@Bean에 들어가보면 위와 같이 springframework를 임포트하는데, 이래도 스프링 코드가 아닐 수 있나요? 아니면 이 정도 코드는 스프링이 없어도 작동하는 건가요?

추가 설명 부탁드립니다! 감사합니다.

oop spring

답변 4

2

David

안녕하세요. lets_go님, 공식 서포터즈 David입니다.

스프링 빈이 스프링 코드에 의존하지 않는다에서 설정 정보 클래스는 제외하여 생각하시면 됩니다.

설정 정보 클래스는 어쩔 수 없이 스프링 코드가 들어가야 하는 부분이라서요.

 

class NoSpringCode { }

 

@Configuration

class ConfigurationForNoSpringCode {

@Bean

NoSpringCode noSpringCode() { return new NoSpringCode(); }

}

 

@Component

class YesSpringCode {

  @Autowired ...

}

 

위처럼 3개의 클래스가 있습니다.

YesSpringCode는 @Component, @Autowired 애노테이션을 가집니다. 이 애노테이션들은 스프링에 종속적인 코드입니다. 그리고 설정 정보 클래스 없이도 빈으로 등록됩니다.

그에 반해 NoSpringCode에는 스프링에 종속적인 코드가 없습니다. 그러나 해당 클래스를 빈으로 등록하려면 별도의 설정 정보(ConfigurationForNoSpringCode)가 필요합니다.

즉, 스프링에 빈으로 등록할 때 사용되는 부분과 그렇지 않은 부분을 분리한 것입니다.

따라서, NoSpringCode는 스프링 코드에 의존하지 않는다고 말할 수 있습니다.

당연히 ConfigurationForNoSpringCode는 어쩔 수 없이 스프링 코드에 의존적으로 작성될 수 밖에 없고요.

감사합니다.

0

lets_go

David님 안녕하세요! 의존적인 것과 그렇지 않은 것을 비교해주셔서 더 쉽게 이해가 되네요 ㅎㅎ 예제 코드까지 들어가며 친절히 설명해주셔서 감사합니다!

0

taeu kim

이해한 부분 틀린 포인트 있으면 피드백 부탁드립니다. 감사합니다. 

0

lets_go

안녕하세요. 같은 수강생으로서 궁금증이 해결될 때까지 다시 질문하시는 태도가 굉장히 멋지다고 생각합니다.

다만 여기는 제 질문 글이라, 글을 쓰실 때마다 저에게 이메일과 인프런 사이트에서 알림이 뜨고 있습니다.

질문 글을 따로 작성해주시면 taeu kim님도 더 정확한 답변을, 더 편하게 받으실 수 있을 것 같습니다. 괜찮으시다면 따로 작성해주시길 부탁드립니다. 감사합니다 :)

답글 달아주시는 David님도 고생 많으세요!

0

taeu kim

아 정말요? 몰랐습니다..ㅠㅠ 죄송해요

0

lets_go

괜찮습니다 감사해요! 로드맵 완강까지 힘내봐요💪🏻

0

taeu kim

ConfigurationForNoSpringCode(설정 정보 클래스)가 정확히 무엇인가요?

"별도의 설정 정보"라고 알려주셨는데, 저희 예제 에선 무엇을 나타내나요? @Bean 인가요? @Bean옆의 "initMethod = "init" 인가요? 

1

David

본 강의 관심사의 분리편을 참고해주세요.

0

taeu kim

설정 정보 클래스 = ConfigurationClass 

(예를들어, 관심사 분리 편의 AppConfig.class)

같은 맥락에서 이번 회차의 configurationClass인 LifeCycleConfig는 별도의 설정 정보인 NetworkClient를 성정해주어야 하는데, 이를 위해선 @Bean 이라는 설정정보 어노테이션이 필요할 수 밖에 없다. 따라서 의존한다는 것을 이야기하신 부분에 "설정 정보" 부분은 제외하고 이해하면 된다.

김영한님께서 말씀하신 "의존 하지 않는 다"의 의미는 bean으로 등록된 NetworkClient 안에서 초기화, 종료 메소드가 initalizingBean과 같은 "스프링에 의존하는 코드(implement 해야하므로)"가 아닌 init(), close()를 사용하므로 의존하지 않는다는 것이다.

0

taeu kim

그에 반해 NoSpringCode에는 스프링에 종속적인 코드가 없습니다. 그러나 해당 클래스를 빈으로 등록하려면 별도의 설정 정보(ConfigurationForNoSpringCode)가 필요합니다. 에서 (ConfigurationForNoSpringCode) == @Bean 을 의미하는 건가요?? 

0

David

말 그대로 ConfigurationForNoSpringCode(클래스)입니다.

0

taeu kim

이번 경우에는  NetworkClient.class를 의미하는건가요?

1

David

질문이 이해되지 않는데 더 풀어서 설명해주시겠어요?

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

0

30

1

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

0

27

1

코드 자료

0

64

2

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

0

68

2

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

0

89

1

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

0

97

1

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

0

84

1

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

0

84

1

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

0

129

2

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

0

95

1

provider 사용하는 이유

0

96

1

다음 강의 뭘 들어야 할까요

0

131

2

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

0

67

1

beanB

0

85

2

퀴즈다시풀기

0

70

1

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

0

98

2

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

0

68

3

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

0

107

2

도메인의 정의?

0

60

1

ApplicationContext 질문입니다.

0

67

1

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

0

97

2

ai api 선정하기 관련 질문

0

125

2

생성자 자동주입 관련해서

0

68

1

생성자 직접 호출 vs 팩토리 메서드 패턴

0

99

2