개념을 공부하고 기억한다는 것은 지루하다. 그래서 간결한 실전코드를 눈으로 보면서 감각적으로 익히는 것이 훨씬 빠르고 효과적이라고 생각하기 쉽다. 많은 사람들이 설명은 집어치우고 코드를 내놔라라고 말하는 이유가 그때문이다. 그래서 명제로 가득찬 개념설명은 무시하고 건너뛰기 쉽다. 하지만 때로는 간단하고 기본적인 정의와 개념을 기억하는 것이 꽤나 복잡하게 보이는 문제를 손쉽게 해결하는데 도움을 주기도 한다.

스프링의 쌩초보 기초개념을 정리하는데 도움이 되는 본격적인 상식퀴즈를 시작해보자.

 

Hello인터페이스가 있고,

interface Hello { void sayHello(String name) }

이를 구현한 HelloImpl 클래스가 있다. 빈으로 등록할 용이라 @Component를 붙였다. 자동으로 helloImpl 이름의 빈으로 등록될 것이다.

@Component
public class HelloImpl implements Hello {
  public void sayHello(String name) { … }
}

이 빈을 사용하는 Client1과 Client2가 있다. 둘다 동일한 빈을 사용할 것이지만 Client1은 Hello인터페이스 타입으로 DI하고 Client2는 HelloImpl 타입으로 DI하는 차이만 있을 뿐, 둘다 동일한 helloImpl빈을 DI하고 있다.

@Component
public class Client1 {
  @Autowired Hello hello
  …
}

@Component
public class Client2 {
  @Autowired HelloImpl helloImpl
  …
}

이 세개의 클래스를 빈으로 등록하고 사용해보자. 아무런 문제가 없다. Hello타입으로 DI하든 HelloImpl타입으로 DI받든 둘다 HelloImpl클래스로 정의한 빈을 DI받는데 아무 지장이 없다.

이제 문제다.

이 세 개의 빈 정의를 그대로 둔 채로 다른 빈 이나 XML설정을 추가하는 것으로 기존의 HelloImpl, Client1, Client2 사이의 DI관계에서 문제가 발생하도록 하는 것이다. 힌트를 주자면 이 세 개의 빈 사이의 DI작업 중에 문제가 발생해서 컨테이너가 초기화 되지도 못하게 만드는 것이다. [업데이트] 한가지 조건이 있다. Hello나 HelloBean타입의 빈을 추가로 등록해서 @Autowired에 의해서 하나의 빈을 선택하지 못하도록 만드는 방법은 제외한다. 추가할 빈은 Hello나 HelloBean타입이어서는 안된다.

과연 이 평범해 보이는 DI에 문제를 일으킬 수 있는 다른 설정 또는 빈은 어떤 것이 있을까 생각해보자. 그 이유는 무엇이고, 그 사실로부터 배울 수 있는 교훈은 무엇일까?

제목 그대로 스프링에 대한 기초적인 상식만 안다면 금방 발견할 수 있는 쉬운 문제이다. 하지만 스프링 고수라고 하더라도 기본개념과 기초가 약하면 쉽지 않은 문제이다.

 

힌트 하나 더. 스프링의 최신기능과 상관없다. 1.x대에도 적용되는 문제이다. 참, 1.x대라면 세 개의 빈 등록을 @Component와 @Autowired 대신 동일한 조건을 가진 <bean>과 <property>등을 이용한 DI방식으로 바꿔야 하겠지만.

이 문제는 스프링의 DI에 관한 기초상식을 점검하기 위한 것이다. 즉, 상식을 따르지 않았을 때 어떤 문제가 생길 수 있는가 하는 질문이다. 문제 속에 해답에 대한 결정적인 힌트가 있다.

Related posts:

  1. Spring 상식퀴즈 (1) – DI 태클하기 해답편
  2. 당신은 고난받기 위해 태어난 사람
  3. 태터툴즈를 버리고 wordpress를 쓰다
  4. Spring 3.0 (56) @Bean 사용의 주의사항
  5. 태터툴즈 이틀 사용기
  6. 둘째 하늘이 태어나다
  7. 태터툴즈 – TimeZone (2)
  8. 태터툴즈 버그? – TimeZone
  9. S1A 2008 셋째날 – Spring JavaConfig
  10. Inside Spring (6) 애노테이션 설정 지원 스프링 웹 테스트용 DispatcherServlet 만들기
  11. Spring 3.0 (58) Static Class를 XML없이 빈으로 등록하기
  12. Inside Spring (5) PropertyPlaceholderConfigurer를 @Bean으로 정의해서는 안되는 이유
  13. Google App Engine for Java에서 Spring 3.0 사용하기
  14. Spring 3.0 EL (Spel)을 이용한 AssertThrows 확장 (1)
  15. Spring 3.0 (26) Spring Expression Language와 @Value

Facebook comments:

to “Spring 상식퀴즈 (1) – DI 태클하기”

  1. gucci mane blogspot Spring 상식퀴즈 (1) – DI 태클하기 » Toby’s Epril

  2. Browse This Site
    [url=http://cheapbaileybuttonoutlet.com]bailey button uggs[/url]
    bailey button uggs

  3. factory brand shoes online Spring 상식퀴즈 (1) – DI 태클하기 » Toby’s Epril

  4. Why Not Check Here
    [url=http://bootsforwomenoutlet.com]uggs for women[/url]
    uggs for women

  5. ugg shoes online Spring 상식퀴즈 (1) – DI 태클하기 » Toby’s Epril

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha