객체 지향 프로그래밍 및 설계의 5가지 기본원칙을 솔리드 원칙(SOLID) 이라고 한다.
SRP, OCP, LSP, ISP, DIP의 앞글자를 따서 SOLID 원칙이다.
https://dreamcoding.tistory.com/69?category=1079638
1. SRP : 단일 책임 원칙
Single Responsibility Principle
객체는 단 하나의 책임만을 가질 수 있도록 해야 한다.
좋은 설계란 기본적으로 시스템에 새로운 요구사항이나 변경이 있을 때 가능한 한 영향받는 부분을 최소화해야한다.
‘나’의 역할은 여러개가 있다.
‘나’를 공통점으로 두고, 각각의 역할에 맞게 하위 클래스로 구분하여 나눈다.
공통점이 없다면 상위 클래스를 제거해야 한다.
공통점을 가진 ‘나’를 extends하여 각각의 책임에 따라 클래스를 분류한다.
-> 나라는 독립적인 객체의 존재는 유지하되 객체지향적인 관점에서 각각의 역할에 따른 객체로써의 사용이 가능하게 되어 하나의 클래스에서의 행위들을 역할이라는 관점을 통해 나눌 수 있다.
2. OCP : 개방-폐쇄 원칙
Open-Closed Priciple
확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야한다.
클래스의 기존 기능의 변경없이 해당 클래스의 기능을 확장시키는 것이 목적이다.
이를 통해 사용중인 클래스의 변경으로 인한 버그 발생을 피할 수 있다.
기존 코드 수정에는 폐쇄적이다.
( OracleDriver, MysqlDriver, PostgreSQLDriver…)
3. LSP : 리스코프 치환 원칙
Liskov Substitution Principle
일반화 관계
자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다.
이를 위해 부모 클래스와 자식 클래스 사이는 행위가 일관되어야 한다.
슈퍼클래스에서 상속받은 메서드들이 서브클래스에 오버라이드(재정의)되지 않도록 해야한다.
또한 재정의되지 않았다면 부모와 자식클래스의 예제 실행결과가 동일하다.
요약 : 상위 타입의 객체를 하위 탑입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
4. ISP : 인터페이스 분리 원칙
Interface Segregation Principle
클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
인터페이스란?
동일한 목적하에 동일한 기능을 수행하게끔 강제하는 것이 인터페이스의 역할이자 개념
어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용하여 구현된다면 그 클래스는 반드시 그 인터페이스에 포함되어 잇는 메소드를 구현하도록 강제하는 것
즉, 자바의 다형성을 극대화하여 개발 코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해서 인터페이스를 사용한다.
메소드 오버라이딩 : 객체 지향 프로그래밍에서 서브클래스 또는 자식 클래스가 자신의 슈퍼클래스들 또는 부모 클래스들 중 하나에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것을 제공하는 언어의 특징이다.
즉, ISP는 인터페이스를 클라이언트에 특화되도록 분리시킨다.
5. DIP : 의존관계 역전 원칙
Dependency Inversion Principle
소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다.
상위계층(정책 결정)이 하위계층(세부사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
DIP는 의존관계를 맺을 대 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하기 보다는 변화하기 어려운것, 거의 변화가 없는 것에 의존한다.
- 의존성 주입 : 클래스 외부에서 의존되는 것을 대상 객체의 인스턴스 변수에 주입
- DI 를 이용해 대상 객체를 변경하지 않고도 외부에서 대상객체의 외부 의존 객체를 바꿀 수 있다.
https://dreamcoding.tistory.com/69?category=1079638
'Lecture Note > CS' 카테고리의 다른 글
[Java] 우선순위 큐 개념정리 - 프로그래머스 이중우선순위큐 문제풀이 (0) | 2023.11.30 |
---|---|
Q1. http vs https, 메소드, 응답코드, 버전, restful (0) | 2022.04.28 |
CS 면접 준비하기(마지막 업데이트 : 04.28) (0) | 2022.04.28 |