1. 스프링 이전의 상황
EJB를 사용해서 프로그래밍을 진행했지만 이는 너무 비싼 문제와, 인터페이스를 모두 구현해야하고, 또한 EJB에 의존적인 프로그래밍을 해야 한다는 수많은 단점에 빡(?)이 친 스프링 개발자가 이보다 훨 ~ 씬 쉬운 개발을 위해 스프링을 만들게 되었다.
2. 스프링
스프링은 여러 의미로 불린다. 그러나 스프링에서 필수적인요소와 선택적 요소를 나눌 수는 있다 아래를 통해 살펴보도록 하자.
- 스프링(프레임워크)
- 스프링은 언어와 관련된 것을 의미하는 경우가 많다.
- 필수적인 요소로 단독 사용이 가능하다. 그러나 스프링부트 없이 사용하면 불편한 경우가 많다.
- 스프링부트
- 스프링(스프링 프레임워크)는 스프링부트와 함께 필수적인 요소로 스프링부트는 스프링을 편하게 쓰기 위한 부가적인 요소지만 현재는 현업에서 역시 뗄래야 뗼 수 없는 존재이다.
- 또한 스프링부트의 경우 필수적인 존재이긴하나 스프링(프레임워크)없이 별도로 따로 사용이 불가하다.
스프링은 문맥에 따라 다르게 불리고 있으며, 이는 각자 그 상황에 맞게 해석함이 옳바르다. 또한 대게 많이들 스프링이라고 한다면 스프링(프레임워크) + 스프링부트를 지칭하는 경우가 대부분이다.
3. 객체지향과 스프링
- 스프링은 자바언어 기반의 프레임워크로 자바는 객체지향이 핵심이니만큼 스프링 역시 객체지향이 핵심 중 핵심이다.
- 또한 스프링은 객체지향이라는 장점을 살려내는 프레임워크로 좋은 객체지향을 위한 프레임 워크로 사용된다.
자바 객체지향의 4가지 특징
- 추상화
- 캡슐화
- 상속
- 다형성
- 위의 3가지 특징도 매우 중요하지만 자바 객체지향의 꽃은 다형성이다.
다형성이란?
다형성에 대해서 쉽게 말하자면 자동차를 운전하는 사람이 자동차가 경유, 휘발유, 전기차 여부에 따라서 운전을 못하는 것이 아니니까 자동차의 역할이 바뀌어도 그대로 운전할 수 있는 것을 생각하면 편하다.
이처럼 다형성은 인터페이스의 구현체가 바뀌는 것에 영향 받지 않고 정상적인 진행을 계속 할 수 있는 것을 의미합니다.
역할 VS 구현
역할 = 인터페이스
구현 = 인터페이스를 구현하는 구현체
다형성의 관점에서 역할만 제대로 설계한다면 구현이 바뀌어도 상관이 없다.
객체의 협력 관계
클라이언트 (요청) -> 서버(응답)
객체의 협력관계를 살펴보고 이에 따라서 다형성을 이해하는 것이 중요하다.
※ 여기서 응답은 return이 없더라도 요청에 응하는 것을 응답으로 본다.
자바의 다형성(오버라이딩)
오버라이딩 = 재정의 상위 클래스의 내용을 하위 클래스가 상속받아 재정의 하는 것을 의미
오버로딩 = 같은 이름의 메서드를 다르게 기술하는 것을 의미
4. SOLID 원칙
SRP | 단일 책임 원칙 (Single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. |
OCP | 개방-폐쇄 원칙 (Open/closed principle)“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.” |
LSP | 리스코프 치환 원칙 (Liskov substitution principle)“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라. |
ISP | 인터페이스 분리 원칙 (Interface segregation principle)“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.” |
DIP | 의존관계 역전 원칙 (Dependency inversion principle)프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다. |
개방 폐쇄의 원칙이 다형성과 깊은 연관관계를 가지며 SOLID 원칙에서도 가장 중요한 원칙이다.
SOLID 원칙 역시 좋은 객체지향 설계를 위한 필수적인 지표이다!
5. 정리
스프링은 좋은 객체지향을 위해 만들어진 프레임워크로 스프링부트가 이를 도와 쓸 수 있고 선택적으로 다른 요소들을 곁들여서 사용할 수 있는 아주 좋은 프레임워크이다~
또한 스프링은 다형성을 사용해서 레고를 조립하듯 프로그래밍을 할 수 있게 돕고 우리는 그를 사용해 더욱 편리하게 프로그래밍을 할 수 있게 되었다 ~
다시 종합적으로 정리를 해보자면, 객체지향이라는 개념아래 자바언어가 있고 또 그 자바 언어를 기반으로 만들어진 프레임워크인 스프링이니 ~ 객체지향과 스프링은 뗄 수 없는 관계라는 것!
6. 출처
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢
www.inflearn.com
'Back-End > Spring' 카테고리의 다른 글
[Spring][스프링 기본편] - 3. 회원 도메인 구현 (0) | 2022.01.13 |
---|---|
[Spring][스프링 기본편] - 2. 비지니스 요구사항과 회원 도메인 설계 (0) | 2022.01.13 |
[SpringBoot][스프링 입문] - 5.3 회원 웹 기능 - 조회 (0) | 2021.12.28 |
[SpringBoot][스프링 입문] - 5.2 회원 웹 기능 - 등록 (0) | 2021.12.28 |
[SpringBoot][스프링 입문] - 5.1 회원 웹 기능 - 홈 화면 추가 (0) | 2021.12.27 |