Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- centos pyhon 설치
- regex_search
- 백준
- selinux port 등록
- influxdb 설치
- subporcess path
- telegraf
- c3 초
- grafana dashboard
- python subprocess
- c3 step graph
- c3 축 없애기
- c++ 정규식
- c3 축 가리기
- c3 second
- InfluxDB
- CentOS7
- gcc regex
- python os
- 1697
- snmp
- 정규식 컴파일
- semanage
- snmp test
- python popen
- g++ 업데이트
- linux시간으로 변경
- gcc 업데이트
- 정규식 활용
- 정규식 문자열 출력
Archives
- Today
- Total
리셋 되지 말자
SRP와 ISP 본문
단일 책임 원칙(SRP)와 인터페이스 분할 원칙(ISP) - 클래스를 나누느냐 인터페이스를 나누느냐
SRP와 ISP는 같은 문제에 대한 두 가지 다른 해결책이라고 볼 수 있다.프로젝트 요구사항과 설계자의 취향에 따라 선택될 수 있다.
하지만 특별한 경우가 아니라면 단일 책임 원칙을 적용하는 것이 더 좋은 해결책이라고 할 수 있다.
인터페이스 최소주의 원칙
인터페이스를 통해 메서드를 외부에 제공할 때 최소한의 메서드만 제공하라는 것이다.
상위 클래스는 풍성하게, 인터페이스는 작게
앞의 게시물 '상속과 인터페이스'에서 상위 클래스는 풍성할수록 좋고, 인터페이스는 작을수록 좋다고 언급했다. 이는 리스코프 치환 원칙(LSP)로 예를 들 수가 있다.
LSP에 따라 하위 객체는 상위 객체인 척 할 수 있다.
빈약한 상위 클래스
package poorSuperClass;
import java.util.Date;
public class Driver {
public static void main(String[] args) {
사람 김학생 = new 학생("김학생", new Date(2000, 01, 01), "20000101-1234567",
"20190001");
사람 이군인 = new 군인("이군인", new Date(1998, 12, 31), "19981231-1234567",
"19-12345678");
System.out.println(김학생.이름);
System.out.println(이군인.이름);
// System.out.println(김학생.생일); // 사용불가
// System.out.println(이군인.생일); // 사용불가
System.out.println(((학생) 김학생).생일); // 캐스팅 필요
System.out.println(((군인) 이군인).생일); // 캐스팅 필요
// System.out.println(김학생.주민등록번호); // 사용불가
// System.out.println(이군인.주민등록번호); // 사용불가
System.out.println(((학생) 김학생).주민등록번호);
// 캐스팅 필요
System.out.println(((군인) 이군인).주민등록번호);
// 캐스팅 필요
김학생.먹다();
이군인.먹다();
// 김학생.자다(); // 사용불가
// 이군인.자다(); // 사용불가
((학생) 김학생).자다(); // 캐스팅 필요
((군인) 이군인).자다(); // 캐스팅 필요
// 김학생.소개하다(); // 사용불가
// 이군인.소개하다(); // 사용불가
((학생) 김학생).소개하다(); // 캐스팅 필요
((군인) 이군인).소개하다(); // 캐스팅 필요
((학생) 김학생).공부하다(); // 캐스팅 필요
((군인) 이군인).훈련하다(); // 캐스팅 필요
}
}
풍성한 상위 클래스
package richSuperClass;
import java.util.Date;
public class Driver {
public static void main(String[] args) {
사람 김학생 = new 학생("김학생", new Date(2000, 01, 01), "20000101-1234567",
"20190001");
사람 이군인 = new 군인("이군인", new Date(1998, 12, 31), "19981231-1234567",
"19-12345678");
System.out.println(김학생.이름);
System.out.println(이군인.이름);
System.out.println(김학생.생일);
System.out.println(이군인.생일);
System.out.println(김학생.주민등록번호);
System.out.println(이군인.주민등록번호);
// System.out.println(김학생.학번); // 사용불가
// System.out.println(이군인.군번); // 사용불가
System.out.println(((학생) 김학생).학번);
// 캐스팅 필요
System.out.println(((군인) 이군인).군번);
// 캐스팅 필요
김학생.먹다();
이군인.먹다();
김학생.자다();
이군인.자다();
김학생.소개하다();
이군인.소개하다();
// 김학생.공부하다(); // 사용불가
// 이군인.훈련하다(); // 사용불가
((학생) 김학생).공부하다(); // 캐스팅 필요
((군인) 이군인).훈련하다(); // 캐스팅 필요
}
}
상위클래스가 빈약할 때, 캐스팅(형변환)이 훨씬 많이 필요한 것을 확인할 수 있다.
'Java(폐지) > 객체지향 설계 5원칙-SOLID' 카테고리의 다른 글
DIP - 의존 역전 원칙 (0) | 2020.07.21 |
---|---|
ISP - 인터페이스 분리 원칙 (0) | 2020.07.21 |
LSP - 리스코프 치환 원칙 (0) | 2020.07.20 |
OCP - 개방 폐쇄 원칙 (0) | 2020.07.20 |
SRP-단일 책임 원칙 (0) | 2020.07.20 |
Comments