hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie
CS/OOP

[OOP] SOLID - Interface Segregation Principle

[OOP] SOLID - Interface Segregation Principle
CS/OOP

[OOP] SOLID - Interface Segregation Principle

 이 글은 객체지향 5대 원칙, SOLID Principle 중 Interface Segregation Principle에 대해 다룬다.

 

정의

 Interface Segregation Principle은 object는 자신이 사용하지 않는 method를 포함한 interface에 의존하면 안 된다는 원칙이다. 이 원칙은 dependency와 overhead에 대한 이야기이다.

 

 

 

언제 사용해야 할까?

 만약 어떤 class C가 interface I를 implement하는 예시를 생각해 보자. interface I에는 method A, B, C 등 여러 가지 method가 있다. 그러나 class C는 method A밖에 사용하지 않는다. 이 경우 class C에서는 사용하지 않는 method B, method C를 구현해야 하며 만약 method B나 method C의 내용이 바뀐다면 interface I와 interface I에 의존성을 가지고 있는 class C 또한 재컴파일된 후 재배포되어야 한다.

  • 재컴파일 후 재배포는 C++과 같은 static language에 한정되긴 한다. python과 같은 dynamic typed language는 runtime에 추론이 발생하기 때문에 재컴파일과 재배포가 필요 없다.
  • java의 경우 static typed language이지만 method를 runtime에 결정하는 late binding을 수행하기 때문에 바뀐 코드만 재컴파일한다.

 

 이런 경우 interface의 분리가 필요하다. interface I에서 method A만 있는 interface를 분리해야 한다.

 

 

 

이점 

coupling 감소, cohesion 강화

 Interface Segregation Principle을 준수하기 위해서는 큰 interface를 작은 interface로 나누어야 한다. 이로 인해 interface를 구현하는 class들 간의 dependency를 줄일 수 있을 뿐만 아니라, interface에 꼭 필요한 method들만 모이게 되므로 cohesion이 커진다.

 

유지보수성 증가

 Interface Segregation Principle을 준수했다면 interface를 작게 분리하며 요구사항 변경 시 해당 interface만 수정하면 된다. 때문에 다른 기능이 영향을 받지 않기 때문에 유지보수성이 향상된다.

 

 

 

유의점

 항상 그렇듯 적당히가 어렵다. interface를 너무 많이 쪼개버리면 코드의 재활용도 어려워지고 class architecture가 난잡해진다. 따라서 적당히 분리해야 한다. 따라서 Interface Segregation Principle이 적용된 많은 design pattern과 예시들을 보며 항상 더 좋은 방법이 없는지 끊임없이 고민해야 한다.

 

 

 

 

 

 

 

 

 

 

저작자표시 (새창열림)

'CS > OOP' 카테고리의 다른 글

[OOP] SOLID 정리  (0) 2023.03.12
[OOP] SOLID - Dependency Inversion Principle  (0) 2023.03.12
[OOP] SOLID - Liskov Substitution Principle  (0) 2023.03.09
[OOP] SOLID - Open Closed Principle  (0) 2023.03.07
[OOP] SOLID - Single Responsibility Principle  (0) 2023.03.06
  • 정의
  • 언제 사용해야 할까?
  • 이점 
  • 유의점
hyelie
hyelie

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.