일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바 소인수분해
- 소인수분해 구하는 공식
- 펙토리얼
- 경우의 수 자바
- 배열 순환
- cursor 우클릭 메뉴
- 자바 팩토리얼
- 티스토리챌린지
- cursor 설치
- 숨어있는 숫자의 덧셈 (1) 자바
- spring boot 배너 설정
- 정보처리기사 필기 벼락치기
- 정보처리기사 필기
- 프로그래머스 공 던지기 게임
- 자바 합성수 찾기
- 배열 순환 자바
- 오블완
- 왓챠피디아 클론 코딩
- 비전공자 정보처리기사 필기
- 프로그래머스
- 접속 url 출력
- 피그마 썸네일
- 정처기 필기 벼락치기
- 스프링부트 의존성 설정
- 배열 순환 문제 공식
- string과 stringbuilder 성능 최적화
- 스프링 부트 배너 설정
- 스프링 부트 프로젝트 세팅
- 프로그래머스 문자열 정렬하기(1)
- 비전공자 정처기 필기
- Today
- Total
여름 언덕에서 배운 것
[스프링 핵심원리 기본편] SOLID 원칙, 객체지향 설계와 스프링 본문
SRP - 단일책임원칙
중요한 기준은 변경으로 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것
ex ) UI 변경 , 객체의 생성과 사용을 분리
OCP - 개방-폐쇄 원칙 (중요 )
소프트웨어 요소에는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
다형성을 생각해보자, 지금까지 배운 역할과 구현의 분리를 생각하면 된다.
로미오와 줄리엣 대본은 그대로지 배우가 바뀌어도 상관 없다.
문제점 ) 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다.
분명 다형성을 사용했지만 OCP 원칙을 지킬 수 없다.
그래서 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요한데
이걸 스프링 컨테이너가 해준다 .
LSP 리스코프 치환 원칙
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 다 바꿀 수 있어야 한다.
다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다.
자동차 인터페이스의 엑셀 기능은 앞으로 가는 것인데 , 뒤로 가게 구현한다면 이는 LSP 위반이다
ISP 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다
자동차 인터페이스를 운전 인터페이스 , 정비인터페이스로 분리하면
사용자 인터페이스를 운전자와 정비사 클러이언트로 분리를 할 수 있다.
-> 분리하면 정비인터페이스가 변해도 운전자 클라이언트에 영향을 안준다!
인터페이스를 적당하게 쪼개는 것도 좋음! 인터페이스가 명확해짐
DIP 의존관계 역전 원칙
구현클래스에 의존하지 말고! 인터페이스에 의존하기
구현이 아닌 역할(ROLE)에 의존하게 해야합니다.
그런데 !
멤버서비스는 멤버 리포지토리라는 인터페이스에도 의존하지만 , 구현클래스 메모리멤버 리포지토리에도 의존한다.
역할(인터페이스)가 아닌 구현에 의존 DIP 위반이 보임
정리
객체지향의 핵심은 다형성입니다.
다형성만으는 쉽게 부품 갈아 끼우듯이 개발 할 수 없다
다형성만으로는 OCP와 DIP를 지킬 수 가 없다..
뭔가 더 필요하다... 그래서 스프링 필요!
스프링은DI , DI컨테이너 제공으로 OCP,DIP를 가능하게 해줍니다!
DI 는 Dependency Injection으로 의존관계 의존성 주입을 말합니다.
DI 컨테이너는 자바 객체를 컨테이너 안에 넣어놓고 의존관계를 연결하고 주입할 수 있도록한다.
이것들을 해야 클라이언트 코드 변경없이 기능이 확장됩니다
정리
모든 설계에 역할과 구현을 분리하자
애플리케이션 설계도 공연을 설계하듯이 배역만 만들어두고 ,배우는 언제든지 유연하게 교체될 수 있어야합니다
(스프링 컨테이너 필요)
할인 정책 - 간단하게 인터페이스 만들고
개발이 진행되면서 기획이 정리되면 기능 확장해가고
인터페이스 설계가 참 중요합니다
'가랑비에 옷 젖는 줄 모른다 💻 > 스프링' 카테고리의 다른 글
[스프링 핵심 원리 - 기본편] 객체 지향 원리 적용, AppConfig(DI) (0) | 2023.10.10 |
---|---|
[스프링핵심원리-기본편] 스프링 핵심원리 이해1- 예제만들기 (0) | 2023.10.09 |
[스프링핵심원리-기본편]스프링과 스프링부트 (0) | 2023.10.09 |
[스프링입문]섹션7 - AOP (0) | 2023.10.05 |
[스프링입문]섹션6-스프링 DB 접근 기술 (0) | 2023.09.29 |