Contents
- SOLID 설계 원칙
객체지향 소프트웨어를 견고하고 확장 가능하게 설계 하기 위한 다섯가지 기본 원칙
SRP : 단일 책임 원칙
OCP : 개방-폐쇄 원칙
LSP : 리스코프 치환 원칙
ISP : 인터페이스 분리 원칙
DIP : 의존성 역전 원칙
책임 : 객체가 "해야하는 것" 또는 "할 수 있는 것" (기능과 관련)
즉, 하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데 집중
확장에 열림 => 변경 사항이 발생했을 때 기존의 코드를 유연하게 확장할 수 있어야 함
수정에 닫힘 => 이때, 기존의 코드에는 수정이 없어야 함
추상화를 통해 상속 및 다형성 구조를 잘 마련해 두면 OCP를 손쉽게 따라갈 수 있음
일반적으로 추상 클래스와 상속을 통한 클래스 관계 구축을 통해 OCP를 따름

void myData() {
Collection data = new LinkedList();
data = new HashSet();
modify(data);
void modify(Collection data) {
data.add(1);
...
}
data에 하위 클래스의 객체가 주어져도 modify 함수는 정상적으로 동작해야 한다.
class Animal {
int speed = 100;
int go(int distance) {
return speed * distance;
}
}
class Eagle extends Anlmal {
String go(int distance, boolean flying) {
if (flying)
return distance + "만큼 날아감";
else
return distance + "만큼 걸어감";
}
부모의 go 함수를 제대로 오버라이딩 하지 않으면 다형성이 작동되지 않음




객체들이 서로 정보를 주고 받을 때 의존 관계가 형성됨
이때, 객체들은 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺는 것이 각 클래스간의 결합도를 낮출 수 있음

변하기 어려운 추상적인 것들을 표현하는 수단으로 추상클래스와 인터페이스가 있음
DIP를 만족하려면 추상클래스 또는 인터페이스와 의존 관계를 맺도록 설계해야 함
