Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • visionOS
    • iOS
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • 부스트캠프
  • AVAudioSession
  • 소프트웨어 테스트
  • ios
  • Git
  • 백준
  • avaudiosessionportdescription
  • ImageResource
  • 티스토리챌린지
  • jekyll
  • if let
  • 소프트웨어 공학
  • 모듈화
  • Concurrency
  • swift
  • CS
  • 알고리즘
  • 오블완
  • Python
  • 소프트웨어공학
  • image
  • guard
  • AutoLayout
  • Optional
  • MVC
  • SwiftUI
  • Animation
  • boj
  • Swift5.7
  • constraint

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
[소프트웨어 공학] 디자인 원칙 SOLID
CS

[소프트웨어 공학] 디자인 원칙 SOLID

2022. 9. 26. 10:39

로버트 마틴 5가지 원칙

  • SRP, OCP, LSP, ISP, DIP

 

SRP(Single Responsibility Priciple) 단일 책임 원칙

  • 클래스는 하나의 책임(수행 작업)만 부여
    • 하나의 작업을 모두 수행
    • 클래스 변경(수정) 씨 변경 이유도 하나

 

OCP(Open Closed Priciple) 개방 폐쇄 원칙

  • 기존 코드의 변경 없이 새로운 기능 추가
    • 독립적인 작업 단위를 클래스로 분리, 캡슐화

 

LSP(Liskov Substitution Priciple) 리스코프 치환 원칙

  • 기반 클래스와 파생 클래스에서 제공하는 연산은 일관성 있는 행위(behavior) 여야 함
    • 기반 클래스 인스턴스를 파생 클래스 인스턴스로 대체해도 프로그램의 의미 불변
  • Pre -> Pre` & Post` -> Post (if Pre then Pre` & in Post` then Post)
    • Pre/Post: 기반 클래스 연산의 선행/후속 조건
    • Pre`/Post`: 파생 클래스 연산의 선행/후속 조건

 

ISP(Interface Segregation Priciple) 인터페이스 분리 원칙

  • 객체지향 설계 원칙
  • 클래스에 특화된 인터페이스로 분리
    • 클래스는 사용하는 해당 인터페이스만 구현
    • 어떤 클래스가 다른 클래스에 의존할 경우 가능한 최소한의 인터페이스만 사용
public interface All {
	public void walk( );
 	public void bark( );
 	public void fly( );
}

public interface Walkable {
 	public void walk( );
 }
 
 public interface Barkable {
 	public void bark( );
}

public interface Flyable {
	public void fly( );
}

 

DIP(Dependency Inversion Priciple) 의존성 역전 원칙

  • 의존관계는 가변적인 것보다 불변적인 것으로 설정
    • 가변적: 구체적인 방식, 사물 등
    • 불변적: 정책, 전략, 추상적인 개념 등
  • 인터페이스, 추상 클래스에 의존관계 설정

저작자표시

'CS' 카테고리의 다른 글

[소프트웨어공학] 소프트웨어 테스트 - 1  (0) 2022.10.03
[소프트웨어 공학] 디자인 패턴 Design Pattern  (0) 2022.09.26
[소프트웨어 공학] 의존성 주입과 IoC  (0) 2022.09.26
[소프트웨어 공학] Maven  (1) 2022.09.26
[소프트웨어 공학] 객체지향 개발 프로세스  (0) 2022.09.19
    'CS' 카테고리의 다른 글
    • [소프트웨어공학] 소프트웨어 테스트 - 1
    • [소프트웨어 공학] 디자인 패턴 Design Pattern
    • [소프트웨어 공학] 의존성 주입과 IoC
    • [소프트웨어 공학] Maven
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바