본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring> Bean 사용하기

왜 bean을 사용할까? 과거에 클래스를 막 배웠을 때는

객체를 변수에 생성하여 사용했다.

클래스이름 변수 = new 클래스이름( )

이런 식으로..

하지만 만약 객체 클래스가 수십가지라면 어떻게 될까?

쉽게 이용하기 위해서라면

각 객체 클래스는 따로 구성하고

각 객체 클래스를 다루는 클래스를 따로 두면서

클래스를 사용해야하는 메인은 다루는 클래스를 갖고 노는 방식으로 설계하는게 좋다.

 

대충 이런 식으로... 

 

 

 

 

복습 ) Dependency Inversion Principle (의존성 역전 원칙 )

추상적인 것이나 개념은 변하기 어려운 것이다.

구체적인 방식이나 사물은 변하기 쉬운 것이다.

객체지향 기술에서 클래스와 인터페이스가 추상적이거나 변하기 어려운 것이다.

의존성 역전에 만족하려면 구체적인 클래스보다 인터페이스나 추상클래스에 의존해야한다.

왜 이렇게 해야할까?

이유는 의존성 역전에 만족하면 변화에 유연하기 때문이다.

메인함수가 어떤 구체적인 클래스 메소드를 사용도록 설계한다면 

여기에 수정사항이 있을 경우 일일히 다 맞춰야 하고,

만약 오버로딩하여 다양한 매개변수가 있고 추가하거나 수정하면  그거에 맞게 다 설계해야한다.

 

예를 들어

 

처음에 인간이 기관총을 달라고 묘사하지 않고 ak-47을 달라고 묘사했다고 치자면

나중에 m16이나 k2 기관총이 추가됐을 때 우리는 인간 입장에서 m16과 k2 를  다 따로 묘사해야한다.

만약 수십가지 무기가 생기면 거기에 맞춰서 인간 입장에서 다 따로 추가해야한다.

하지만 인간이 기관총을 달라고 묘사했고 무기에 정의되어 있는 쏜다라는 행동만 사용하게 설계되어 있으면

m16하고 k2가 생겨도 거기에 쏜다라는 행동을 정의하고 인간에게 전달하기만 하면 된다.

그러면 인간에서 굳이 바꿀 일은 없고 m16하고 k2 객체만 생성해서 전해주면 끝이다...

 

 

 

아 이래서 인터페이스나 단계가 높은 부모클래스/ 추상클래스로 설정하는구나

 

 

 

다시 spring으로 돌아와서..

 

applicationContext.xml 은 container이다. 여기에 bean을 설정한다.

Coach 는 인터페이스

HelloSpringApp은 메인앱

BaseballCoach와 TrackCoach는 객체 클래스

 

 

1. spring configuration 파일을 불러온다.

2. container 에서 bean을 얻는다.

3. bean 에서 method를 실행한다.

4. context를 닫는다.