모든 기술은 핵심 컨셉을 제대로 이해해야 내 것이 된다고 한다.
그렇다면 스프링은 핵심 컨셉은 뭐였을까?
스프링의 핵심 컨셉은 바로
“객체지향 프로그래밍이 가능하게 만드는 것” 이였다.
프로그램을 명령어의 집합들로 보는 것이 아니라, 객체들의 모임으로 보며 객체들의 협력을 통해 프로그램이 동작하게 된다는 것!
그렇다면 좋은 객체지향 프로그래밍이란 뭘까??
객체지향 프로그래밍의 목적은 유연하고 변경이 용이하게 만드는 것이다.
객체지향의 핵심은 바로 다형성이다.
세상을 역할과 구현으로 나누는 것이며, 하나의 역할을 다양한 구현체 들이 대신 할 수 있게 만드는 것이다. 이렇게 만듦으로써, 유연하고 변경이 용이하도록 만들 수 있게 된다. 더불어 객체가 가진 역할을 명확하게 정의 내릴 수 있게 해줄 수 있는 것이다.
public class Car() {
Tire tire = new Tire();
}
publice class Tire() {
System.out.println("tire입니다.");
}
이 경우 car 객체를 만들고 tire는 하나밖에 만들지 못하게 된다.
public interface Tire(){
public void say();
}
라는 인터페이스를 만들고
// KoreaTire 클래스
public class KoreaTire implements Tire {
@Override
public void say() {
System.out.println("한국 타이어입니다.");
}
}
// AmericaTire 클래스
public class AmericaTire implements Tire {
@Override
public void say() {
System.out.println("미국 타이어입니다.");
}
}
public class Car() {
// Tire tire = new Tire(); 가 아니라
// Tire tire = new KoreaTire();
// Tire tire = new AmericaTire();
}
Tire라는 역할을 담당하는 Tire 인터페이스 만들고
그것을 구현하는 KoreaTire와 AmericaTire를 만들었다.
다형성을 통해 유연하고 변경이 용이하도록 만들 수 있게 된 것이다.
그리고 Tire 인터페이스를 상속 받은 KoreaTire와 AmericaTire 클래스로부터 만들어진 객체의 역할은 분명해졌다. Car 객체의 Tire로써 역할만 한다는 것이다.
그래서 인터페이스를 안정적으로 설계하는 것이 중요하다.
다시 돌아와 왜 스프링에 열광했을까?
객체지향 프로그래밍은 각자 역할이 주어진 객체들의 모임이며 객체들의 협력을 통해 프로그래밍이 실행되도록 하는 것이다.
이를 통해 얻는 효과는 유연하며 변경에 용이하게 된다는 것.
스프링은 IoC컨테이너를 Bean 객체들을 사용하여 각 역할을 가진 객체들의 구현을 쉽게 만들게 해주었다는 것이다.