YJ의 새벽
Spring ( 객체지향 설계 5가지 원칙 ( (SOLID)) 본문
-- 객체지향의 핵심은 다형성.
-- 다형성만으로 쉽게 부품을 갈아 끼우듯 개발할 수 없다.
-- 다형성만으로 구현 객체를 변경할 때 클라이언트 코드도 함께 변경된다.
-- 다형성만으로는 OCP, DIP 를 지킬수 없다.
- SOLID
-- SRP : 단일 책임 원칙 ( Single Responsibility Principle )
-- OCP : 개방-폐쇠 원칙 ( Open / Closed Principle )
-- LSP : 리스코프 치환 원칙 ( Liskov Substitution Principle )
-- ISP : 인터페이스 분리 원칙 ( Interface Segregation Principle )
-- DIP : 의존관계 역전 원칙 ( Dependency Inversion Principle )
SPR 단일 책임원칙
-- 한 클래스는 하나의 책임만 가져야한다.
-- 하나의 책임이라는 것은 모호하다. ( 클수도 , 작을수도있음 )
- 한 클래스가 수행할수 있는 기능(책임) 이 여러개라면 ,
클래스 내부 함수끼리 결합이 발생할 가능성이 높아진다.
-- 중요한 기준은 변경 이다.
( 변경이 있을때 파급 효과가 적으면 단일책임원칙을 잘 따른것.
OCP 개방-폐쇠 원칙
-- 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀있어야 한다.
- 즉 , 기존의 코드를 변경하지않고 기능을 수정하거나 추가할수 있도록 설계하여야한다.
-- 다형성.
-- 인터페이스를 구현한 새로운 클래스를 하나만들어,
새로운 기능을 구현 .
OCP 문제점
-- 구현객체를 변경하려면 클라이언트 코드를 변경해야한다.
ex ) MemberRepository m = new MemoryMemberRepository() ; // 기존코드
MemberRepository m = new JdbcMemberRepository() ; // 변경코드
-- 다형성을 사용했지만 . OCP 원칙을 지킬수없다.
-- 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.
( Spring Container )
LSP 리스코프 치환 원칙
-- 객체는 정확성을 깨드리지 않으면서 하위타입의 인스턴스로 바꿀수 있어야한다.
- 즉, 하위타입 객체는 상위타입 객체에서 가능한 행위를 수행할수 있어야한다.
상위타입을 하위타입객체로 치환해도 정상적으로 동장해야한다.
ex )) 자동차인터페이스는 엑셀은 앞으로 가는기능,
뒤로 가게 구현하면 LSP 위반 , 느리더라도 앞으로 가야함.
ISP 인터페이스 분리 원칙
-- 한클래스는 자신이 사용하지 않는 인터페이스는 구현하지않아야한다.
- 클라이언트는 자신이 사용하는 메서드에만 의존해야한다.
- 클라이언트가 사용하지않는 인터페이스에 변경이 발생하여도 영향을 받지않도록 만들어야한다.
-- 특정클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
-- 자동차 인터페이스 --> 운전 , 정비 로 분리
사용자 인터페이스 --> 운전자, 정비사 로 분리
-- 인터페이스가 명확해지고, 대체 가능성이 높아진다.
DIP 의존관계 역전 원칙
-- 추상화에 의존해야지, 구체화에 의존하면 안된다.
- 변하기 어려운것 ( 추상적인것 ) 에 의존해야지,
변하기 쉬운것 ( 구체적인것 ) 에 의존하면 안된다.
-- 구현클래스에 의존하지말고, 인터페이스에 의존하라는 뜻.
'Spring > Spring' 카테고리의 다른 글
Spring 3 ( 파라미터 가져오기 , 화면전환 ) (0) | 2023.04.21 |
---|---|
Spring 2 ( 개발환경 ( STS )) (0) | 2023.04.21 |
Spring 1 ( 개요 ) (0) | 2023.04.21 |
SpringBoot 개념정리? (0) | 2023.03.09 |
Spring. (0) | 2023.02.13 |