스프링의 핵심 개념, 컨셉 ???
- 스프링은 자바 언어 기반의 프레임워크.
- 자바 언어의 가장 큰 특징인 객체지향을 담는다.
- 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크.
- 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크.
기존의 개발 성향은 EJB에 종속이 되서 객체지향의 좋은 특징들을 잃어버리게 됨
→ 그것을 탈피하기 위해서 Spring을 개발하여 객체 지향 중심적인 설계를 하도록 함.
좋은 객체 지향 프로그래밍이란?
흔히 아는 객체지향의 정의 말고 key word 로 생각해보자.
객체의 모임, 객체의 메세지, 유연성, 변경의 용이
→ 레고 블록을 조립하듯이, 컴퓨터 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
즉 객체지향의 핵심은 다형성이다.
클라이언트에 영향을 주지 않고 무한히 확장 하여 새로운 것을 통해 기존의 역할을 대신 할 수 있도록 설계하는 방법.
A의 역할을 수행할 수 있는 a가 있을 때 새로운 b를 생성해서 a를 대체 할 수 있도록 하는 설계.
역할과 구현으로 구분하면 세상이 단순해지고 유연해지면서 변경이 용이해진다.
- 클라이언트는 대상의 역할만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
자반 언어의 다형성을 활용한다면 아래와 같이 설명할 수 있다.
역할 = 인터페이스
구현 = 인터페이스를 구현한 클래스, 구현 객체
객체를 설계할 때 역할과 구현을 명확히 분리하여 설계 하고 인터페이스 먼저 설계 후 그 역할을 수행하는 구현 객체 설계한다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작을 해야한다.
- 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.
이 모든것이 잘 설계된다면
유연하고 변경이 용이하며 확장 가능한 설계를 할수 있기에 클라이언트에 영향을 주지 않는 변경이 가능하고 그러기 위해서는 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.
한계
→ 인터페이스가 곧 역할
인터페이스가 변한다면 클라이언트와 서버 모두에 큰 변경이 발생한다.
따라서 인터페이스를 변화 없이 안정적으로 설계하는 것이 정말 중요하다.