SOLID
객체 지향 설계 다섯 가지 원칙
- S: Single Responsibility Principle
- O: Open Closed
- L: Liskov Substitution Principle
- I: Interface Segregation Principle
- D: Dependency Inversion Principle
S: Single Responsibility Principle, 단일 책임 원칙
- 하나의 클래스는 하나의 책임(기능)을 가져야 한다.
- 책임의 캡슐화
public class Car{
private Seat seat;
private Heater heater;
private Wheel wheel;
}
O: Open Closed Principle, 개방 폐쇄 원칙
- 기능 추가 시, 기존 코드 변경이 없어야 한다.
- ex) 상속
L: Liskov Substitution Principle, 리스코프 치환 원칙
- 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제가 없어야 한다."
- 객체 지향에서의 상속은 조직도나 계층도가 아닌 분류도가 되어야 한다.
계층도의 예
춘향이는 아버지형의 객체 참조 변수이기에 아버지 객체가 가진 행위(메서드)를 할 수 있어야 하는데 춘향이에게 아버지의 어떤 역할을 시킬 수 있을까 ?
분류도의 예
논리적인 흠이 없다. 팽귄 한마리 이름은 뽀로로이고, 동물의 행위(메서드)를 잇게하는데 전혀 이상함이 없다.
아버지 - 딸 구조(계층도/조직도)는 리스코프 치환 원칙을 위배하고 있는 것이고, 동물 - 펭귄 구조(분류도)는 리스코프 치환 원칙을 만족하는 것이다.
I: Interface Segregation Principle, 인터페이스 분리 원칙
- 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스 사용해야 한다.
public interface Animal{
public void 짖다();
public void 걷다();
}
//강아지, 고양이는 같은 동물에 속하지만, 고양이는 짖지 않는다.
//위의 코드는 ISP에 위배
public interface Dog{
public void 짖다();
public void 걷다();
}
public interface Cat{
public void 걷다();
}
D: Dependency Inversion Principle, 의존 역전 원칙
- 의존 관계를 가질 때는 하위 개념보다 상위 개념 또는 추상화된 것에 의존해야 한다.
public class Rabbit{
private Carrot feed;
...
}
public class Rabbit{
private Apple feed;
...
}
//Carrot, Apple의 상위 클래스 Vegetable
public class Rabbit{
private Vegetable feed;
...
}
참고
https://ktko.tistory.com/entry/자바-객체-지향의-원리-SOLID-LSP-리스코프-치환-원칙 [KTKO 개발 블로그와 여행 일기]
'Programming > Java' 카테고리의 다른 글
JDK와 JRE (0) | 2024.10.29 |
---|---|
추상 클래스 (0) | 2024.10.08 |
업캐스팅, 다운캐스팅 (0) | 2022.02.23 |
ArrayList vs LinkedList (0) | 2022.02.23 |
Collections.sort() (0) | 2022.02.23 |