Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
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
Tags more
Archives
Today
Total
관리 메뉴

최용우

인터페이스 분할의 원칙 본문

장고

인터페이스 분할의 원칙

용우쨩 2024. 4. 9. 21:55

Django restframework로 view.py와 serializer.py를 작성하다보면 재사용에 대한 고민을 하게 된다.

기능별 API를 다 만들어야 하나? 아니면 재사용 할 수 있는건 조금 손봐서 다시 써야하나?

이런 저런 생각을 하다가 친구와 대화중 "인터페이스 분할의 원칙"을 듣게 되었다.

나는 처음 들어본 개념이다. 궁금해서 검색을 좀 하다가 이 원칙은 당연히 지켜야할 수 밖에 없는 것을 깨달았다.

일단 ChatGPT에게 물어본 내용을 아래에 첨부한다.

 

  1. 단일 책임 원칙 (Single Responsibility Principle, SRP): 단일 책임 원칙은 클래스, 모듈 또는 인터페이스가 하나의 주요 책임만을 가져야 한다는 것을 강조합니다. 이는 해당 요소가 변경되어야 하는 이유를 최소화하고, 유지보수성을 향상시키는 데 도움이 됩니다. 예를 들어, 파일 입출력 기능과 화면 출력 기능을 각각 다른 인터페이스로 분리하는 것이 좋습니다. 이렇게 하면 파일 관련 기능이 변경되어도 화면 출력에 영향을 주지 않습니다.
  2. 인터페이스 응집도 (Interface Cohesion): 응집도는 인터페이스 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다. 높은 응집도를 가진 인터페이스는 관련 기능들을 함께 묶어 하나의 목적을 수행하며, 낮은 응집도를 가진 인터페이스는 서로 다른 목적의 기능들을 포함합니다. 예를 들어, "사용자 인증"이라는 인터페이스는 사용자 로그인, 로그아웃, 비밀번호 변경과 같은 관련 기능들을 포함해야 합니다.
  3. 인터페이스 결합도 (Interface Coupling): 결합도는 인터페이스 간의 의존성 정도를 나타냅니다. 낮은 결합도를 가진 인터페이스는 다른 모듈과의 상호작용이 적으며, 이는 시스템의 유연성을 향상시킵니다. 인터페이스 간의 결합도를 최소화하기 위해 가능하면 추상화를 통해 구현 세부 사항을 숨겨야 합니다.
  4. 인터페이스 추상화 (Interface Abstraction): 추상화는 인터페이스를 통해 구체적인 구현을 숨기고 필요한 기능이나 속성에만 집중할 수 있도록 하는 것을 의미합니다. 이를 통해 시스템의 복잡성을 감소시키고 유연성을 높일 수 있습니다. 추상화는 인터페이스의 설계에 있어서 중요한 개념 중 하나입니다.
  5. 인터페이스 의존성 역전 원칙 (Dependency Inversion Principle, DIP): 이 원칙은 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다는 것을 강조합니다. 따라서 인터페이스는 구현에 의존하는 것보다는 추상화에 의존해야 합니다. 이는 시스템을 보다 유연하고 확장 가능하게 만들어 줍니다.

사실 위 내용은 정보처리기사 시험에도 단골로 등장하는 개념이다. 인터페이스 응집도와 결합도가 그것이다.

조금 먼 미래를 내다보았을 때도 용이한 유지보수를 위해선 인터페이스가 가급적 기능별로 구분되어 있는게 좋다.

왜냐하면 지금 이곳에서 수정한 부분이 다른곳에 영향을 미친다면 마음놓고 수정할 수 있는 개발자가 몇이나 될까.

설명이 조금 딱딱하고 어려운데 쉽게 풀어서 설명하면 다음과 같다. 조금 역설이긴 한데

 

"인터페이스는 최대한 분리하면서 묶어야 한다."

 

분리는 기능별로 쪼개라는 것이고 묶음은 추상화를 하라는 것이다.