일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CI
- jenkins
- springboot
- 스프링부트 웹 소켓
- 42seoul
- 아이패드다이어리
- 리눅스
- 스프링부트
- IOS
- DBMS
- 오블완
- Xcode
- swift
- 프로그래밍언어론
- Spring
- 티스토리챌린지
- AI
- 네트워크
- CD
- 다이어리
- 데이터베이스
- 인공지능
- sql
- 오라클
- 스프링
- libasm
- MySQL
- javascript
- 소켓
- JPA
- Today
- Total
Hi yoahn 개발블로그
10장 ISP: Interface Segregation Principle 인터페이스 분리 원칙 본문
소프트웨어 설계자는 사용하지 않은 것에 의존하지 않아야 한다.

가정:
user1 은 op1 을, user2 는 op2 를, user3 는 op3 만을 사용한다
OPS 가 정적 타입 언어 클래스라면, User 는 사용하지 않는 메서드에 의존하게 된다.
이러한 의존성으로 인해 사용하지 않는 메서드가 변경되면 User 도 다시 컴파일한 후 새로 배포해야 한다.

위와 같이 구성하면, 자신과는 관계없는 변경이라면, 다시 컴파일하고 배포하는 상황은 생기지 않는다.
위의 사례는 정적 타입 언어에 해당하는 사례.
동적 타입 언어(루비, 파이썬)에서는 소스 코드에 이러한 선언문이 존재하지 않는다. 대신 런타임에 추론이 발생한다.
따라서 소스 코드 의존성이 아예 없다. 재컴파일과 재배포가 필요없다.
정적 타입 언어보다 유연하며 결합도가 낮은 시스템을 만들 수 있다.
그렇다면 ISP 는 아키텍처가 아닌 언어와 관련된 문제인가?
ISP와 아키텍처
ISP 를 사용하는 근본적인 동기
일반적으로, 필요 이상으로 많은 걸 포함하는 모듈에 의존하는 것은 해로운 일이다.
(소스코드 의존성의 경우 더욱)
불필요한 재컴파일과 재배포를 강제하기 때문이다.
더 고수준인 아키텍처 수준에서도 마찬가지 상황이 발생한다.
<예시>
< S 시스템 구축 > → < F 프레임워크 도입 > → < D 데이터베이스 의존 >
F 에서는 불필요한 기능이 D 에 포함되어 있다면, S 와는 전혀 관계없는 기능인 것
그 기능 때문에 D 가 변경되면, F 를 재배포해야 할 수도 있고, S R까지 재배포해야 할 수도 있다.
D 내부의 기능 중 F 와 S에서 불필요한 그 기능에 문제가 발생해도 F 와 S 에 영향을 준다.
결론
불필요한 짐을 가진 무언가에 의존하면 예상치도 못한 문제에 빠진다는 사실이다.
사실 아직 재배포나 재컴파일이 그렇게 문제가 되는 상황을 겪어보지 않아서 이렇게 하는 방법도 있구나 싶다
'스터디 > 클린아키텍처' 카테고리의 다른 글
11장 DIP: Dependency Inversion Principle 의존성 역전 원칙 (0) | 2023.08.20 |
---|---|
9장 LSP: Liskov Substitution Principle 리스코프 치환 원칙 (0) | 2023.08.20 |
8장 OCP: Open-Closed Principle 개방-폐쇄 원칙 (0) | 2023.08.20 |
7장 SRP: Single Responsibility Principle 단일 책임 원칙 (0) | 2023.08.20 |
[클린 아키텍처] 3부 설계원칙 (0) | 2023.08.20 |