일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Sort
- 이펙티브자바
- 자바스크립트
- k8s
- 오블완
- 스프링 핵심원리
- 스프링
- kubernetes
- 김영한
- 자바
- 클린아키텍처
- 코딩테스트
- 티스토리챌린지
- java
- 예제로 배우는 스프링 입문
- Effective Java
- 알고리즘
- 스프링부트
- 알고리즘정렬
- JavaScript
- Effective Java 3
- 카카오 면접
- effectivejava
- 카카오
- 스프링핵심원리
- 이차전지관련주
- 이펙티브 자바
- Spring
- 엘라스틱서치
- ElasticSearch
- Today
- Total
Kim-Baek 개발자 이야기
[스프링 핵심원리] 5. 객체 지향 설계와 스프링 본문
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅
지금까지 강의에서는 스프링의 이야기가 아니라 객체 지향에 대한 이야기만 하고 있었다. 그렇다면 스프링관는 어떤 관계가 있어서 이런 이야기를 강의를 통해서 계속 했는지 궁금할 수 밖에 없다.
스프링과 객체 지향 설계
- OCP
- DIP
이전 글에서 정리한 것 처럼 객체 지향 5대 원칙 중, OCP와 DIP는 순수하게 자바로 작성하면 제대로 지켜지지 않는 한계가 있었다.
스프링이 OCP, DIP 원칙을 지원하고, 추가적으로 다형성까지 제공해주는 프레임워크가 되는 것이다.
- DI ( Dependency Injection ) : 의존관계, 의존성 주입
- DI 컨테이너 제공
위의 두 가지 기능을 제공하면서, 객체 지향 원칙을 지킬 수 있게 해주는 것이다. 이것을 통해서 우리가 가장 원했던, 클라이언트의 코드 변경없이 기능을 확장하고, 부품을 갈아끼우듯이 개발을 할 수 있게 된 것이다.
예전에 어떤 개발자가 순수하게 자바로 객체 지향 원칙을 잘 지키면서 개발을 해보려고 했다고 한다. 그랬더니 개발보다는 원칙을 지키기 위한 내용이 더 많아지는 배보다 배꼽이 더 커지는 형식이 된 것이다.
결국 순수하게 자바로 이 원칙들을 지키려면 스프링 프레임워크를 만들게 된다는 것이다. ( DI 컨테이너를 만들게 된다는 것이다 ) 지금까지 우리는 이러한 것을 모르고 그냥 스프링 프레임워크를 사용해온 것이다. 이제 왜 스프링이 만들어졌는지를 알기위해서 처음부터 코드를 작성해가면서 알아볼 예정이다.
정리
결국 역할과 구현을 구분해서 개발을 하는 것이 중요하다. 이상적으로는 모든 설계에 인터페이스를 적용하는 것이다.
하지만 이것도 문제는 분명히 있다. 추상화라는 비용이 들어간다는 것이다. 실제로 추상화된 인터페이스를 모두 사용한다면 어떤 구현체가 사용되는지 코드에 들어가봐도 알 수 없는 경우도 생기는 것이다.
다음부터는 직접 프로젝트를 생성하면서 진행을 하게 된다.
'개발 > Spring' 카테고리의 다른 글
[스프링 핵심원리] 7. 비즈니스 요구사항과 설계 (0) | 2021.09.28 |
---|---|
[스프링 핵심원리] 6. 스프링 프로젝트 생성 시작 (0) | 2021.09.28 |
[스프링 핵심원리] 4. 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2021.09.24 |
[스프링 핵심원리] 3. 좋은 객체 지향 프로그래밍이란? (0) | 2021.09.23 |
[스프링 핵심원리] 2. 스프링이란? (0) | 2021.09.22 |