spring 공부 중 가장 많이 사용하는 단어들을 정리해보자
1.pojo
pojo는 Plain Old Java Object로 직역하면 오래된 자바 오브젝트? 라는 뜻으로 쓰인다고 한다.
그 의미는 무거운 ejb(Enterprise JavaBeans) 반대로 가벼운 자바 객체를 강조하는 의미로 사용 되고 있었다고...
getter/setter 와 같이 단순한 메서드를 가지고 java의 특정 규약이 아닌 어떤 곳에서도 종속적이면 안 되는 객체를 말하는 것.
아무 생각 없이 코딩할 때는 몰랐지만 어노테이션을 사용할 때 @controller class에 원래 상속을 받던 것들을 모두 제거했다. 이와 같이 service도 마찬가지로 종속성을 제거함으로써 pojo 클래스의 형태로 사용하면 유지 보수에 용이한 유연한 코딩을 할 수 있다고 한다.
public mainparm extend HttpServlet{ ....
@controller
public mainparm (){ ....
2.di
di(Dependency Injection)는 ioc, aop와 더불어 스프링 프레임워크의 핵심이라고 생각한다.
한글로는 의존성 주입이라는 이해가 되지 않는 뜻이다. 쉽게 말하면 어떤 객체를 자신이 아닌 외부에서 의존성을 결정해 준다는 개념이다. 객체를 내부에서가 아닌 외부에서 결정해서 조립해 준다? 이런 느낌 .. 그럼 프로그램에서 의존성이라는 것은 또 뭘까?
public class hello1
public void printing(String msg){
System.out.print(msg);
}
}
public class app{
public void run(){
hello1 hw = new hello1();
hw.printing("hi");
}
}
라는 코드가 있을 때 app 클래스가 hello1 클래스에 의존한다고 말한다.
근데 생각하기에 뭔가 문제가 있어 보이진 않는데 왜 굳이 의존성을 밖에서 결정하는 걸까?
내가 여기서 새로운 버전의 printing 메서드를 유지 보수하면서 좀 더 세련되게 바꾸고 싶다면?
실행 코드 자체를 바꾸는 것보다. 외부 파일로 원하는 기능이 실행되게 설정한다면 유지 보수 시에 코드를 변경하는 일없이 깔끔하게 처리할 수 있다.
public class hello2{
public void printing(String msg){
System.out.print(msg+"라는메세지를 받았다.");
}
}
public class app{
public void run(){
hello2 hw = new hello2(); //실행부분을 계속해서변경해야함
hw.printing("hi");
}
}
public interface prints{ //인터페이스 추가
public void printing(String msg);
}
public class hello2 implements prints //hello 클래스
public void printing(String msg){
System.out.print(msg+"라는메세지를 받았다.");
}
}
public class app{
private prints hw;
public void run(){
hw.printing("hi")
}
}
<bean id ="hw" class="org.hy.web.entity.hello2"/>
<bean name="controller" class="org.hy.web.app">
<property name="hw" ref="hw"></property>
</bean>
이때 hello1버전으로 돌아가고 싶다면 실행 코드는 그대로 둔 채로 xml 설정 파일을 수정해 주면 된다.
<bean id ="hw" class="org.hy.web.entity.hello2"/> <!--이부분을-->
<bean id ="hw" class="org.hy.web.entity.hello1"/> <!--이렇게 변경해주면된다-->