김영한의 스프링 강의에 저작권이 있습니다.
스프링이란?
필수
- 스프링 프레임워크
- 스프링 부트
선택
- 스프링 데이터
- 스프링 세션
- 스프링 시큐리티
- 스프링 Rest Docs
- 스프링 배치
- 스프링 클라우드
스프링 프레임워크
- 핵심 기술
- 스프링 DI 컨테이너, AOP, 이벤트, 기타
- 웹기술
- 스프링 MVC, 스프링 WebFlux
- 데이터 접근 기술
- 트랜잭션
- JDBC
- ORM 지원
- XML 지원
- 기술통합
- 캐시, 이메일, 원격접근, 스케줄링
- 테스트
- 스프링 기반 테스트 지원
- 언어
- 코틀린
- 그루비
스프링 부트
- 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본!!
- 단독으로 실행할 수 있는 스프링 애플리케이션 쉽게 생성!!(https://start.spring.io/)
- 톰캣 같은 웹 서버를 내장해서 웹서버 설치 안해도 괜찮음!
- starter종속성 제공으로 손쉬운 빌드 구성 가능!
- 스프링과 외부 라이브러리 자동 구성
- 등등...
스프링???
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크
- 스프링부트, 스프링 프레임워크를 모두 포함한 스프링생태계
- 최근에는 스프링, 스프링부트를 모두 포함한 생태계 그 자체를 이야기한다*
객체지향 프로그래밍??
모든 기술은 핵심 컨셉이 가장 중요하다
스프링의 핵심 개념, 컨셉
- 스프링은 자바 언어 기반의 프레임워크
- 자바 언어의 가장 큰 특징 : 객체지향 언어
- 스프링은 객체지향 언어가 가진 강력한 특징을 살려내는 프레임워크
옛날에는 EJB 스타일을 사용했다고 한다. 이 스타일은 굉장히 의존적이라 객체 지향의 좋은점을 잃었다고한다. 이 시점에서 순수한 객체 지향으로 돌아가자고 POJO 라는 개념도 나왔다. 하지만 스프링의 DI컨테이너는 그걸 가능하게 하였다. 즉 객체지향 프로그래밍을 할 수 있게 도와줬다.
객체지향 특징
- 추상화
- 캡슐화
- 상속
- 다형성*
다형성
^de21a8
[[다형성과 super]]
위키피디아 : 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다
유연하고 변경에 용의??
- 레고 블럭 조립
- 키보드, 마우스 교체
- 컴퓨터 부품 교체
- 컴포넌트를 쉽고 유연하게 변경
=> 다형성!!!
다형성의 실세계 비유
역할과 구현으로 세상을 구분한다. 역할과 구현으로 세상을 구분하면 세상이 굉장히 단순하고 유연하게 변한다
예를 들어보자
자동차 역할에 따라서 각각의 자동차에도 구현을 해놨기 때문에 어떤 자동차가 와도 운전자는 문제가 없다. 운전자는 자동차의 내부 구조는 몰라도 괜찮고 액셀, 브레이크, 핸들정도만 알면 자동차를 움직일 수 있다.
이렇게 분류하는 이유
클라이언트(여기선 운전자)를 위해서 이다. 클라이언트는 어떤 차가 와도 괜찮다. 내부 구조를 몰라도 운전이 가능하다(느슨한 결합) 심지어 새로운 자동차가 생산되어도 문제가 없다.
즉, 이 말은 자동차 세상을 무한히 확장 가능하다는 것. 클라이언트에 영향을 주지 않고 새로운 기술을 확장 가능하다는 것
또다른 예를 들어보자
위 사진에서 로미오가 누구고 줄리엣이 누군가는 중요하지 않다. 대본만 있으면 누가 와도 역할을 수행할 수 있다(물론, 얼마나 잘하냐는 다른 문제긴 하다)
이쪽 예시를 다시 보자.
모든 것이 클라이언트를 위한 것이다. 키보드 마우스 교체, 모두 클라이언트를 위한것이다. 사용자는 클릭와 마우스 이동만 알고 있으면 된다.
역할과 구현을 분리
- 자바 언어의 다형성을 활용
- 역할 : 인터페이스
- 구현 : 인터페이스를 구현한 클래스, 구현 객체
- 객체 설계시 역할을 먼저 부여하고 그 역할을 수행하는 구현 객체 만들기
자바 언어의 다형성
위에서 실세계의 비유를 봤으니 이제 자바 언어에서의 다형성에 대해 알아보자
MemberService는 클라이언트이다. save라는 추상 메서드를 인터페이스에 놓고 구현만 하면 모두 사용 가능하다. MemoryMemberRepository를 사용하다가 db를 사용해야지 라고 생각하면 db관련 클래스를 개발해서 교체만 하면된다. 이렇게 해도 클라이언트인 MemberService에는 전혀 지장이 없다.클라이언트는 인터페이스의 내부구조는 모르고 인터페이스 자체만 알고있기 때문이다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행시점에 유연하게 변경 가능하다
- 클라이언트를 변경하지 않고 서버의 구현기능을 유연하게 변경할 수 있다.
스프링과 객체지향
- 스프링은 다형성을 극대화 해서 이용할 수 있게 해준다
- 제어의 역전, 의존관계 주입은 다형성을 활용한 것
- 스프링을 사용하면 마치 레고블럭 주입하듯이, 공연무대 배우 선택하듯이 부품만 갈아 끼울 수 있다.
'Spring, Spring boot' 카테고리의 다른 글
테스트 코드 애너테이션 종류 (0) | 2023.10.13 |
---|---|
스프링 부트 프로젝트의 흐름 (0) | 2023.10.13 |
조회 빈이 두개 이상일 때 처리 법 (0) | 2023.10.11 |
스프링 빈 탐색위치 (0) | 2023.10.11 |
스프링 컨테이너 (0) | 2023.10.03 |