Repeat is the best medicine for memory
스프링 생태계
스프링으로 개발한다는 것은 위의 그림과 같이 스프링 프레임워크 또는 스프링 부트 사용이 필수적이다. 이외의 오른쪽에 있는 기술들도 제공하는데, 각 용도에 맞춰 필요한 경우 스프링과 함께 편리하게 개발할 수 있도록 도와준다.
이외에도 스프링은 많은 기능들을 제공한다. ( 필요하다면 공식 사이트에 들어가서 확인해보자 )
이들 중에서 가장 중요한 것은 ' 스프링 프레임워크 ' 자체이며 아래와 같은 사항들이 모두 스프링 프레임워크 안에 들어간 기능이다.
여기에서는 스프링 프레임워크의 핵심 기술들에 대해서 정리하며 학습을 진행하겠다.
단, 스프링 부트를 사용하며 정리할 것인데, 스프링 부트는 스프링 프레임워크의 사용과 관련 기술들을 편리하게 사용할 수 있도록 지원하는 기술이며 아래와 같이 정리할 수 있다.
스프링이란?
스프링이란 기술을 만든 이유와 핵심 컨셉은 무엇일까?
다양한 관점에서 바라볼 수 있다.
웹 애플리케이션을 만들고, DB 접근 편리하게 해주는 기술인가??
전자정부 프레임워크?
웹 서버도 자동으로 띄워주고?
클라우드, 마이크로 서비스?
전부 스프링이라는 기술의 발생으로 결과론적인 모습일 뿐, 스프링 기술 자체의 핵심은 이게 아니다.
스프링의 진짜 핵심은
' 좋은 객체 지향 ' 애플리케이션을 개발할 수 있도록 도와주는 기술이다.
다형성
스프링이 좋은 객체 지향적 개발을 위한 프레임워크라는 부분을 이해하기 위해서 객체 지향 속성들 중 ' 다형성 '에 대해서 알아보자.
이를 위해 객체를 '역할'과 '구현'으로 구분해보자. ( 쉽게 역할을 인터페이스, 구현을 구현체(=클래스) 라고 봐도 좋겠다. )
아래의 그림은 이를 명료하게 보여주고 있다.
자동차라는 역할 즉, 기능은 변하지 않는다. 다만 어떤 구현체(실제 차량 모델과 종류)에 따라 구현체만 변경될 뿐 자동차라는 정의 하에 하는 기능과 역할은 모두 동일하다. 그리고 어떤 자동차를 구현체로 사용하던 이 기능을 필요로하는 운전자는 자동차라는 핵심 기능을 모두 동일하게 사용할 수 있다. 이것이 유연하게 변경이 용이한 객체 지향이 추구하는 느슨한 결합의 한 부분이다.
이를 프로그래밍 세계에 대입하면 클라이언트(운전자)는 필요한 기능을 가진 역할만 알고 실제 어떤 구현체를 사용하던지 상관없이 기능을 사용할 수 있다. 클라이언트는 기능이 필요할 뿐 어떤 구현체를 사용할 것인지에 대해서는 파악할 필요가 없는 것이다. 이를 다르게 표현하면, 클라이언트에 영향을 주지않으며 새로운 구현체을 얼마든지 만들어도 필요한 기능을 제공할 수 있다는 것이다.
코드 수준에서 표현하자면, 클라이언트(기능을 필요로 하는 존재)는 대상의 역할인 인터페이스만 알고 구현 대상의 내부 구조를 몰라도 되며, 인터페이스 상속을 통해서 구현체를 바꾸며 변경과 확장에 유연하게 대응할 수 있다는 것이다.
좀 더 코드 수준에서 연결지어 생각해보면, 인터페이스 상속과 오버라이딩을 고려해보자.
위의 그림을 이를 잘 표현하고 있는데, Service 객체는 save() 메서드를 필요로한다.
이를 위해서 특정 구현체(구현 클래스)를 사용할 수도 있겠지만, 역할과 기능(인터페이스와 구현체)의 관점에서 보다 유연하고 확장성 좋은 설계를 위해서는 인터페이스에 클라이언트(Service 객체)가 필요로 하는 메소드를 정의하고 이를 상속받는 구현체가 이를 오버라이딩으로 구현한다.
그럼 클라이언트는 save() 메서드 기능을 위해서 어떤 구현체에 의존할 필요가 없어진다. 이것이 객체 지향의 다형성을 활용한 설계의 한 부분이다.
이를 아래와 같이 정리할 수 있겠다.
<정리>
<한계>
그리고 이러한 객체 지향적 설계와 속성에 근거하여 스프링은 이를 편리하게 사용할 수 있도록 도와주는 프레임워크(길라잡이)라고도 볼 수 있는 것이다.
'Spring > SpringCore - basic' 카테고리의 다른 글
스프링 핵심원리 - 스프링 컨테이너 설계 이해, 스프링의 다양한 설정 형식 지원(JAVA/Xml), 스프링 빈 메타 정보(BeanDefinition) (1) | 2024.12.28 |
---|---|
스프링 핵심 원리 - 스프링 컨테이너와 스프링 빈(컨테이너 생성 원리 및 다양한 Bean 조회 방법들) (2) | 2024.12.27 |
스프링 핵심 원리 - 스프링으로 전환 (0) | 2024.11.13 |
스프링 핵심 원리 - 예제를 통해 이해하는 스프링의 핵심 원리 (3) | 2024.11.07 |
스프링 핵심 원리 - 좋은 설계 핵심 원칙(SOLID) (3) | 2024.11.06 |
댓글