좋은 객체 지향 프로그램을 위한 5가지 원칙
SRP
SRP (Single Responsibility Principle) 단일 책임의 원칙
한 클래스는 하나의 책임만 가져야 한다.
하나의 클래스가 여러가지 기능을 가져서 복잡한 연관 관계를 갖지 않는 것.
변경이 있을 때 파급효과가 적으면 SRP를 잘 따른 것.
OCP
OCP (Open-Closed Principle) 개방-폐쇄 원칙
가장 중요한 원칙 중 하나.
소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다.
다형성을 활용해 지킨다. 사용되는 코드의 영역에서 변경은 없으나, 코드는 확장될 수 있어야 한다.
처음에 이해하기 어려웠지만, 생각해보면 인터페이스, 클래스를 구분해 역할과 기능을 구분한 것처럼 새로운 클래스, 더 확장된 클래스는 만들어져 갈 수 있으나 이로 인해 코드의 변경은 없어야 한다. (의존관계 주입, DI를 통해 구현)
LSP
LSP (Liskov Subsititution Principle) 리스코프 치환 원칙
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
다형성에서 하위 클래스는 인터페이스의 규약을 지켜야 한다는 것. (인터페이스를 구현한 클래스를 신뢰하기 위해)
ISP
ISP (Interface Segregation Principle) 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
인터페이스에 역할에 대한 정의가 명확해지고 대체 가능성이 높아진다.
DIP
DIP (Dependency Inversion Principle) 의존 관계 역전 원칙
아주 중요한 원칙 중 하나.
추상화에 의존해야지, 구체화에 의존하면 안된다.
구현 클래스에 의존하지 말고 인터페이스에 의존해라.
(클라이언트는 구현된 클래스가 아니라 인터페이스를 바라보고 있어야 한다. 역할과 세부기능에서 역할을 알아야 함.)
'Java' 카테고리의 다른 글
[Java Spring] JPA Auditing (0) | 2021.04.10 |
---|---|
[Java Spring] 컨테이너와 IoC, DI (0) | 2021.04.08 |
[JAVA] 객체 지향 프로그래밍(OOP)의 특징 (0) | 2021.04.06 |
[JAVA] DB와 관련된 (순수 JDBC, JDBC 템플릿, JPA) (0) | 2021.04.06 |
[JAVA] 접근 제어자 (0) | 2021.04.01 |