티스토리 뷰
SRP (Single Responsibility Principle)
: 단 하나의 책임만을 가져야 한다. 수정이 필요한 이유는 하나여야 한다.
작성된 클래스는 하나의 책임만을 가지며,
그 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어야 함.
따라서 어떤 변화에 의해 클래스를 변경해야 하는 이유는 하나뿐이어야 함.
(+ 각 개체 간의 응집력이 있다면 병합이, 결합력이 있다면 분리가 좋음)
OCP (Open-Closed Principle)
: 수정에는 닫히고, 확장에는 열어라
요구사항의 변경이 발생하더라도, 기존 구성요소에서 수정이 일어나지 않아야 하며,
기존 구성요소를 확장하여 재사용할 수 있어야 함을 의미함
-> 무엇이 변화하는 것인지, 변하지 않는 것인지를 구분
--> 변화하는 부분을 고려하여 추상화하여 쉽게 변화할 수 있게 함
중요 메커니즘 : 추상화, 다형성
LSP(리스코프 Substitution Principle)
: 추상 객체(상위) 부분을 구상 객체(하위)로 치환하여도 정상적으로 동작되어야 한다.
이 때 LSP 원칙이 제대로 지켜지지 않으면, 다형성에 기반한 OCP 원칙 또한 위반하는 것이 됨
이에 대한 예시로
IF) 정사각형 - 직사각형 의 객체에 대하여 부모-자식 관계가 성립한다면
코드는 다음과 같다.
//Square
public class Square{
private width;
private height;
//width==height 이므로
public void setWidth(int width){
this.width=width;
this.height=width;
}
public void setHeight(int height){
this.width=height;
this.height=height;
}
}
//Rectangle
public class Rectangle extends Square{
//width==height가 아니므로, 다음과 같이 재정의 되어야 함.
@Override
public void setWidth(int width){
this.width=width;
}
@Override
public void setHeight(int height){
this.height=height;
}
}
위의 Rectangle class 에서는, Square와 달리 모든 변의 길이가 같지 않으므로,
set 메소드는 위처럼 재정의 되어야 한다.
만약 위의 코드를 실행시키기 위해 다음과 같은 Main 클래스가 실행된다면,
public class Main{
public static void main(String[] args){
Square square=new Rectangle();
square.setHeight(5);
System.out.println(square.getWidth);
}
Rectangle class의 setHeight 메소드를 이용하여는 width 값이 초기화될 수 없으므로,
Exception이 발생하게 된다.
이 경우에서, 상위 타입의 객체가 하위 타입의 객체로 치환되었을 때 프로그램이 정상동작하지 않으므로,
이는 LSP원칙을 위반한다고 할 수 있다.
-> 구상 객체는 추상 객체가 약속한 규약(어떻게 작동하는 지에 대한 구현 사항)을 지켜야 함(자식 클래스는 항상 부모 클래스의 역할을 충실히 수행해야 함)
(재정의 되지 않아야 함.. 이라고도 말할 수 있음)
ISP(Interface Segregation Principle)
: 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리되어야 한다.
클라이언트 기준으로 인터페이스(기능)를 분리함으로써,
해당 클라이언트가 이용하지 않는 기능으로부터 영향을 받지 않을 수 있음
단일 책임을 주장하는 SRP 원칙을 준수하면, ISP 원칙 또한 만족될 수 있다.
(역방향은 성립하지 않음)
DIP(Dependency Inversion Principle)
: 의존 관계를 맺을 때, 변화하기 쉬운 것보다는 변화하기 어려운 것에 의존하라.
여기서 변화하기 어려운 것이란 추상적인 개념, 즉 인터페이스나 추상 클래스를 예로 들 수 있다.
따라서 의존성을 가질 때(한 클래스에서 다른 객체를 필드로 가질 때), 한 구상체에 의존하는 것 보다는 그 구상체를 추상화한 추상체에 의존하는 것이 좋음.
객체지향 SOLID 원칙 - SRP, OCP, LSP, ISP, DIP (tistory.com)
객체지향 SOLID 원칙 - SRP, OCP, LSP, ISP, DIP
오늘은 간단하게 객체지향 SOLID 5대 원칙에 대해 정리해두려고한다. 1.SRP (Single Responsibility Principle) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. SRP 원칙은 클래스가 하나의 기능만
devkingdom.tistory.com
'JAVA' 카테고리의 다른 글
함수형 인터페이스(Functional Interface) (0) | 2022.04.05 |
---|---|
Collections.sort vs Arrays.sort (0) | 2021.12.07 |
BufferedReader, BufferedWriter (0) | 2021.11.24 |
[java] Map method (0) | 2021.11.06 |
Map 을 정렬된 ArrayList로 변환 (0) | 2021.11.06 |
- Total
- Today
- Yesterday
- Sort
- 동적계획법
- Greedy
- 페르마의 정리
- 배낭 문제
- 희소 배열
- dp
- 분할정복
- 위상 정렬
- Knapsack
- 최단 거리
- 백트래킹
- 완전탐색
- dfs
- 완전 탐색
- 이분탐색
- MaxHeap
- MinHeap
- Priority Queue
- 부분 합
- 분할 정복
- RequiredArgsConstructor
- prirotyqueue
- 참조 지역성
- LowerBound
- 누적 합
- Segment Tree
- 구간 합
- HashSet
- 비트마스킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |