clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • Q
  • Swift
  • uikit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

[Clean Architecture] SOLID원칙 01. 클래스 다이어그램 표현
Clean Architecture

[Clean Architecture] SOLID원칙 01. 클래스 다이어그램 표현

2023. 5. 5. 16:05

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0/chapters/2-how-to-read-a-class-diagram

 

Class Disagram

클래스 다이어그램은 엔지니어링의 청사진이다. 그림, 기호 및 주석을 통해 시스템에 대한 정보를 제공한다.

클래스 다이어그램, 아키텍쳐 도면 및 시스템 일러스트레이션을 만들기 위한 UML(Unified Modeling Language)에 대해 간단히 정리한다.

 

클래스 다이어그램에는 무엇이 있는가?

클래스 다이어그램에는 클래스, 프로토콜, 속성, 메서드 및 관계가 포함된다.

 

클래스

네모는 클래스를 나타낸다. 아래는 매우 간단한 클래스(Dog) 다이어그램이다.

 

상속 관계

한 클래스가 다른 클래스에 상속(구현)됨을 나타내려면 열린 화살촉을 이용한다.

 

그러나 "~에서(으로부터) 상속됨(inherits from)" 대신 "이다(is a)" 라고 읽는다.

예를 들어 아래 그림은 "sheepDog은 dog으로부터 상속됨" 대신에 "sheepDog is a Dog"이라고 읽자.

 

사용관계(연결관계)

일반 화살촉을 사용하여 UML용어로 "연결"이라는 속성을 나타낸다.

클래스 다이어그램은 아래에서 위로, 왼쪽에서 오른쪽으로 또는 원하는 방향으로 작성할 수 있다. 방향에 관계없이 화살표 방향은 의미를 정의한다. 상속 화살표는 항상 슈퍼클래스를 가리키고 속성 화살표는 항상 속성 클래스를 가리킨다.

속성 화살표는 has로 읽어야 하며 위의 예시는 Farmer has a Dog이라고 할 수 있다.

Farmer class가 Dog클래스를 갖고있는 형태.

 

 

 

⭐️⭐️⭐️사용관계(의존관계)의 개념: Farmer클래스에서 Dog의 흔적이 하나라도 있으면 사용관계이다.

  • Farmer에서 Dog의 객체를 property로 가지고 있는 것.
  • Farmer에서 Dog의 객체를 생성하는 부분이 존재하는것.
  • Farmer에서 메서드나 초기화에서 Dog를 매개변수로 받는것
  • Farmer에서 Dog의 property에 접근하는 것.
  • Farmer에서 Dog의 메서드에 접근하는 것..
class Farmer {
    
    // 사용 1. Dog의 객체를 property로 가지고 있는 것.
    let dog: Dog
    
    // 사용 2. Dog객체 생성
    func makeDog() -> Dog{
        return Dog()
    }
    
    // 사용 3. Farmer클래스인데 매개변수로 Dog을 받는 것
    init(dog: Dog) {
        self.dog = dog
    }
    
    // 사용 4. Dog의 property에 접근
    func printDog(){
        print(dog.name)
    }
    
    // 사용 5. Dog의 메서드에 접근
    func printDogMethod(){
        print(dog.printName())
    }
}

class Dog {
    var name = "꼬물"
    
    func printName(){
        print(name)
    }
}

 

프로토콜

또한 상자를 사용하여 프로토콜을 나타낸다. <<protocol>> 단, 클래스와 구분하기 위해 이름 앞에 적어주어야 한다.

아래는 petOwning프로토콜을 표현한 방법이다.

프로토콜 채택(구현, 준수)

점선이 있는 화살촉을 사용해 클래스가 포로토콜을 구현함을 나타낸다.

아래는 farmer클래스가 PetOwning프로토콜을 구현, 채택했다고 읽을 수 있다.

 

종속성(Dependency)

Dependency(종속성)을 나타내기 위해 점선이 있는 일반 화살촉을 사용한다.

UML은 종속성이 무엇인지에 대해 의도적으로 모호하다 종속성 화살표를 사용할 때 마다 목적에 주석을 달아주어야한다. 예를 들어 화살표를 사용하여 다음 사항을 나타낼 수 있다.

- weak property or delegate

- 메소드에 파라미터를 통해 전달되나 속성으로 유지되지 않는 프로퍼티들

- loose한 coupling or callback, 에를 들면 view와 controller 사이의 IBAction

 

예를 들어 아래는 dog을 PetOwning에 위임한다라는 것을 표현한다.

저작자표시 비영리 동일조건 (새창열림)
    'Clean Architecture' 카테고리의 다른 글
    • [Clean Architecture] SOLID원칙 04. LSP(Liscov Substitution Principle) 리스코프 치환 원칙
    • [Clean Architecture] SOLID원칙 03. OCP(Open-Closed Principle) - 개방 폐쇄 원칙
    • [Clean Architecture] SOLID원칙 02. SRP(Single Responsibility Principle) 단일 책임 원칙
    • [iOS] Clean Architecture
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바