본문 바로가기
교육, 학습/인프런_김영한

스프링 핵심원리 기본 - 스프링이란

by 개발하는 경제학도 2021. 12. 29.

강의 소개

인프런 김영한 스프링 완전 정복 시리즈 중 '스프링 핵심 원리 - 기본 편'정리입니다.

자세한 내용을 수강하고 싶으시다면 김영한님 강의 수강을 적극 추천합니다.


 

 

1. 스프링이란?

스프링이라는 단어는 문맥에 따라 다르게 사용된다.

1) 스프링 DI 컨테이너 기술    2) 스프링 프레임워크    3) 스프링 생태계 등

 

스프링 프레임워크

  • 스프링의 가장 핵심 기술 (스프링 DI 컨테이너, AOP, 이벤트, 기타)
  • 웹 기술 (스프링 MVC, 스프링 WebFlux)
  • 데이터 접근 기술: 트랜젝션, JDBC, ORM 지원, XML 지원

 

스프링 부트

  • 스프링의 많은 기능들을 편리하게 사용할 수 있도록 도와준다.
  • 최근에는 기본으로 사용한다.
  • 톰캣 같은 웹 서버를 내장한다.(별도 설치 X) 지금은 스프링 부트로 빌드, 서버 띄우는 것까지 자체적으로 해준다.

(이전에는 빌드 -> 톰캣서버 별도 설치 -> 톰캣 서버의 특정 위치에다가 빌드된 스프링을 넣어 번거로웠다)

  • 쉬운 빌드가 가능하도록 starter 종속성을 제공한다.

(AOP 스타터, DATA JPA 스터터 등등을 깔아야 했던 과거와 달리, 현재는 한 개만 설정하면 나머지 starter 라이브러리도 구성할 수 있도록 편리해졌다)

 

그밖에

스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치, 스프링 클라우드

 

 

2. 스프링의 핵심 컨셉

스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크

(스프링은 자바 언어의 핵심인 객체 지향을 강력히 살려낸다)

 

 

3. 좋은 객체 지향 프로그래밍

객체지향의 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

 

객체 지향 프로그래밍

  • 컴퓨터 프로그램을 여러 개의 독립된 단위인 '객체'들의 모임으로 파악하는 것이다.
  • 각각의 객체는 메시지를 주고받으며 데이터를 처리할 수 있다.
  • 장점은 유연하고 변경이 용이하다는 것이다. 궁극의 유연하고 변경이 용이하는 것은 바로 '다형성'을 나타낸다.

 

다형성(Polymorphism)

역할과 구현으로 세상을 구분하는 것이다.

예를 들어 운전자가 자동차 중 아반떼에만 의존하고 있다면 테슬라, K7을 운전하지 못할 것이다.

하지만 운전자가 자동차 역할에만 의존하게 된다면? 차종이 여러 번 바뀌어도 계속 운전할 수 있다.

여기서 운전자는 클라이언트를, 자동차 역할은 인터페이스를, 아반떼 등의 차종은 인터페이스의 구현을 의미한다.

운전자(클라이언트)가 자동차 역할(인터페이스)에 의존하는 경우 장점은 아래와 같다.

  • 클라이언트가 자동차의 내부구조를 몰라도 된다
  • 구현이 내부적으로 바뀌더라도 클라이언트에게 전혀 영향이 없다
  • 차종이 바뀌어도 상관없이 운전할 수 있다.

즉, 클라이언트에게 영향 주지 않고 자동차는 새로운 기능을 제공할 수 있는 것이다.

그래서 역할과 구현으로 구분하면 클라이언트는 대상의 역할(인터페이스)만 알면 된다.

객체 설계 시 역할(인터페이스)을 먼저 부여 후, 그 역할을 수행하는 구현 객체를 만들어야 하는 것이다.

 

다형성의 본질

인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.

객체는 독립적일 수 없다. 객체의 핵심은 협력이다.

클라이언트 변경 없이, 서버의 구현 기능을 유연히 변경할 수 있다.

 

스프링과 객체 지향

스프링의 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용하여 역할, 구현을 다룰 수 있게 한다.

스프링을 사용하면 구현을 편리하게 바꿀 수 있다.

 

SOLID 원칙

객체지향의 핵심은 다형성이지만,

다형성 만으로는 SOLID 원칙 중에서 OCP(개방-폐쇄 원칙), DIP(의존 역전 원칙)를 지킬 수 없다.

 

 

스프링은 가능하다(스프링의 등장)

그런데 스프링이 다형성, OCP, DIP 원칙을 지킬 수 있게 해 준다!

DI(의존성 주입), DI 컨테이너를 사용한다면.

즉, 클라이언트 코드의 변경 없이 기능 확장이 가능하다.

 

 

출처: 스프링 핵심 원리 - 기본편

댓글