김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • local저장소
  • GitHubDesktop
  • 깃허브데스크탑
  • KMU_WINK
  • ㄱ
  • 원격저장소
  • Remote저장소
  • 로컬저장소

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

[클린소프트웨어#8] SOLID-인터페이스 분리 원칙(Interface Segregation Principle)
• 독서/Design Pattern

[클린소프트웨어#8] SOLID-인터페이스 분리 원칙(Interface Segregation Principle)

2022. 10. 20. 16:39
 

[클린소프트웨어#7] SOLID-의존 관계 연적 원칙(Dependency Inversion Principle)

[클린소프트웨어#6] SOLID-리스코프 치환원칙(Liskov Substitution Principle) [클린소프트웨어#5] SOLID-개방 폐쇄 원칙(Open Closed Principle) [클린소프트웨어#4] SOLID-단일 책임 원칙(Single Responsibility..

devforyou.tistory.com

 

# SOLID

  • SRP (Single Responsibility Principle) 단일 책임 원칙
  • OCP (Open Closed Principle) 개방 폐쇄 원칙
  • LSP (Liskov Substitution Principle) 리스코프 치환 원칙
  • ISP (Interface Segregation Principle) 인터페이스 분리 원칙
  • DIP (Dependency Inversion Principle) 의존 역전 원칙

 

# 인터페이스 분리 원칙(Interface Segregation Principle)

 인터페이스 분리 원칙은 SOLID원칙 중에서 그나마 가장 이해하기가 수월 할 것이다. 클래스가 커질 수록 클라이언트들 간에 좋지 않은 결합도가 생기기 마련이다. 만일 이렇게 비대해진 클래스에 변경이 가해진다면, 이와 결합된 여러 클래스들에 영향을 끼치게 될 것이다. 핵심은 클라이언트는 자신이 실제로 호출하는 메소드에만 의존해야 한다는 것이다. 클래스의 인터페이스를 클라이언트 고유의 인터페이스 여러개로 분해하여 결합도를 낮춰야 한다.

 

# ATM 사용 예제

ATM에는 현금 입금, 인출, 이체등 여러 Transcation을 지원해야 한다. 그리고 이러한 Excute이 될 때마다 UI에 새로운 화면이 그려져야 한다.

UI을 그려주는 ATM UI라는 인터페이스를 각기의 UI에 구현함으로써 해결 할 수 있다.

그렇다면, 입금,인출,이체등의 행위로 UI와 어떻게 상호작용이 되어야 할까? 먼저 그다지 좋지 않은 해결책을 봐보자.

Deposit, Withdraw,Transfer는 Excute()에 대해서 어떠한 행위를 할 것이다. 그리고 나서는 UI를 업데이트하기 위해 UI인터페이스에 의존한다. 

class DepositTransaction {
	private UI ui;
    
    @override
    public void excute(){
    	// 입금을 수행함....
        ui.RequestDepositAmout()
    }
}

그러나 DepositTransaction에서는 사용하지 않는 RequestWitdrawalAmout(), RequestTransferAmout(),InformInsufficientFunds()가 존재하고, 만일 새로운 Transcation이 추가되면 UI인터페이스를 수정해야하고 그에 의존하는 다른 Transcation들이 재 컴파일 되어야 한다. 이런 일을 막기 위해서 UI인터페이스를 분리해야한다. 각 클라이언트에서 사용하는 인터페으들만으로 말이다.

 각 Transaction은 자신을 위한 특정 UI버전에 대해서는 알고 있어야한다. 그러나 전체에 대해서는 알 필요가 없다.

 

저작자표시 (새창열림)

'• 독서 > Design Pattern' 카테고리의 다른 글

[클린소프트웨어#7] SOLID-의존 관계 역전 원칙(Dependency Inversion Principle)  (0) 2022.10.20
[클린소프트웨어#6] SOLID-리스코프 치환원칙(Liskov Substitution Principle)  (0) 2022.10.20
[클린소프트웨어#5] SOLID-개방 폐쇄 원칙(Open Closed Principle)  (0) 2022.10.19
[클린소프트웨어#4] SOLID-단일 책임 원칙(Single Responsibility Principle)  (0) 2022.10.19
[클린소프트웨어#3] 애자일한(Agile)설계를 위한 방법과 7가지 부패한 특성  (1) 2022.10.18
    '• 독서/Design Pattern' 카테고리의 다른 글
    • [클린소프트웨어#7] SOLID-의존 관계 역전 원칙(Dependency Inversion Principle)
    • [클린소프트웨어#6] SOLID-리스코프 치환원칙(Liskov Substitution Principle)
    • [클린소프트웨어#5] SOLID-개방 폐쇄 원칙(Open Closed Principle)
    • [클린소프트웨어#4] SOLID-단일 책임 원칙(Single Responsibility Principle)
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바