태태개발일지 - Spring?
Spring이 왜 위대한가?
이 부분에서는 기존에 항해 + 99 에서 배웠던 클린 레이어드 아키텍쳐를 사용했던 이유와 아주 유사하다.
우선 가장 간략하게 설명하면 "객체지향 적으로 만들어 주기 때문" & "DIP와 OCP를 만족시켜 주기 때문" 이라고 설명을 할 수 있다.
이게 무슨소리인지 알아보자.
객체지향에서는 다형성이 굉장히 중요하다. 예를 들면
public class Animal{
}
부모 클래스인 Animal이 있다.
그리고 부모 클래스를 상속 받은 Dog와 Cat이 있다고 가정하자.
public class Dog extends Animal {
}
public class Cat extends Animal {
}
public Use{
Animal animal = new Dog();
}
다음과 같이 Dog를 쓸 수도 있을 것이고, Cat();을 사용할 수 도 있는 것이다. 그렇기 때문에 Dog를 쓸때와 Cat을 사용할 때 Use란 Clinet의 코드를 바꿔 주어야한다. 이는 OCP와 DIP를 만족하지 못한다고 할 수 있다.
이를 만족해 주기 위해서는
public Use{
Animal animal = new Animal();
}
이렇게 하고 의존성을 주입받는 방식을 통해서 OCP와 DIP를 만족시킬 수 있다.
public Config{
public Animal animal (){
return new Dog();
}
}
이런 식으로 Config파일을 만들고, main 메서드에서 config파일을 읽어 Use에서 Aimal을 생성할 때 주입해주어야한다.
이런 복잡한 방식을 Spring이 해결해주는데 바로
@Configration Annotation과 @Bean Annotation으로 DIP와 OCP를 만족시켜준다.
Spring Container는 DI와 IOC 개념을 통해 Bean을 등록하고 관리해 주게 된다.
@Bean으로 등록해 주게 된다면. 생성자를 호출할 때 Spring Container가 Bean을 검색하고, 그에 맞는 클래스를 주입해주는 역할을 하기 때문에 Spring의 등장이 아주 혁명적이였던 것이다.