스프링 프레임워크(Spring Framework)는 자바 기반의 오픈소스 프레임워크로 자바 EE(Enterprise Edition)에서 요구하는 수준의 복잡한 기능들을 자바 EE를 사용하지 않고 구현하고자 시작되었습니다.
2002년 Rod Johnson이 자신의 저서 “Expert One-on-One J2EE Design and Developement”에서 제시한 코드와 아이디어를 발전시켜 오늘에 이르게 되었습니다.
스프링 프레임워크에 사용된 주요 특징은 다음과 같습니다.
스프링 프레임워크의 특징이며 스프링 프레임워크의 구조를 이해하기 위해 반드시 알아야 하는 세가지 중요 개념입니다.
제어의 역행 이라고도 하며 기존의 프로그램은 main() 과 같이 프로그램이 시작되는 곳에서 필요한 객체를 생성하고 생성된 객체의 메서드를 호출하는 등의 흐름을 가지는것과 달리 IoC는 객체가 자신이 사용할 객체를 직접 생성하거나 선택하지 않는 것으로 프로그램의 제어를 자신이 아닌 다른곳에 위임하는 것을 말합니다.
IoC 를 구현하는 방법으로 DL(Dependency Lookup)과 DI가 있습니다. DL은 저장소에 저장되어 있는 Bean에 접근하기 위해 개발자들이 컨테이너에서 제공하는 API를 이용하 Bean을 찾는 방식입니다. 당연히 컨테이너에 대한 의존성이 커지고 불필요한 코드 사용이 증가하므로 의존성 주입 으로도 불리우는 DI 방식을 사용합니다.
DI는 클래스간의 의존관계를 Bean 설정에 기반해 컨테이너가 자동으로 연결해 주는 방식입니다. 스프링프레임워크에서는 기본적으로 DI 방식을 사용 합니다.
다음의 여러 구현방법을 통해 DI개념과 스프링프레임워크를 사용한 코드를 대략적으로 이해하도록 합니다.
일반적인 구현 ShotGun 클래스는 다음에 나오는 다른 구현코드에서도 사용합니다.
class ShotGun{
void fire() { ... }
}
class Game {
public gameRun() {
ShotGun sg = new ShotGun();
sg.fire();
}
}
팩토리패턴 구현 ShotGun 에도 속성이 다른 여러 객체가 존재할 수 있는데 객체생성을 프로그램에서 하지 않고 팩토리 클래스를 통해 필요한 인스턴스를 얻어오는 방법입니다. 디자인 패턴중 팩토리 패턴을 사용한것으로 프로그램에서는 어떤 ShotGun의 인스턴스가 전달될지 알 필요가 없습니다.
class Game {
public gameRun() {
ShotGun w = Factory.getInstance();
w.fire();
}
}
class Game {
private ShotGun sg;
public void setShotGun(ShotGun sg) {
this.sg = sg;
}
public gameRun() {
sg.fire();
}
}
관점지향 프로그래밍 이라고도 하며 스프링프레임워크 이전에 개념이 등장 했으며 스프링프레임워크의 핵심 요소중 하나입니다. 제대로 내용을 이해하고 활용하려면 꽤나 많은 학습이 필요하며 생소한 용어도 다수 등장 합니다.
지나치게 AOP 자체를 학습하는데 많은 시간을 소요하기 보다는 핵심 개념을 정리하고 스프링프레임워크등을 활용해 실제 구현에 하나씩 적용해 가면서 이해도를 높이는것이 좋습니다.