부트캠프/따로 공부

사이드 프로젝트 with React 26. 클래스 다이어그램 실습

하이고니 2023. 3. 17. 07:20

 

 

 

들은 강의: Part 3. 프로젝트 설계하기 07. [실전] 시스템 설계 (3) - Class diagram for 프론트 엔드

 

 

 

 

  • Plant UML 사용
  • 리액트 컴포넌트/클래스의 구조도 작성

 

1. 자바 설치

https://www.java.com/en/download 

 

Download Java for Linux

Linux RPM filesize: 76.84 MB Instructions After installing Java, you will need to enable Java in your browser.

www.java.com

 

2. GraphViz 설치

https://plantuml.com/ko/graphviz-dot 

 

Test your GraphViz installation

This page gives information about testing your GraphViz installation for PlantUML. It lists some basic checks and some actions to be taken in case of failure.

plantuml.com

 

3. VS Code marketplace에서 PlantUML 설치

4. 프로젝트 폴더 아래에 docs폴더 생성

5. react_component_diagram.plantuml 파일 생성

6. UI 디자인을 보면서 Component화 할 수 있는 것들을 추려내기

7. Component 간 구조 정의 (e.g. 상속, 조합)

 

 

https://plantuml.com/ko/class-diagram 

 

클래스 다이어그램 구문 및 기능

PlantUML 클래스 다이어그램 구문 : 당신은 정의 할 수 있습니다 인터페이스, 회원, 관계, 패키지, 제네릭, 음 ... 변경 글꼴과 색상도 가능하다.

plantuml.com

 

https://plantuml.com/ko/component-diagram 

 

구성 요소 다이어그램 구문 및 기능

PlantUML 구성 요소 다이어그램 구문 : 당신은 정의 할 수 있습니다 인터페이스, 구성 요소, 관계, 그룹, 메모 ... 변경 글꼴과 색상도 가능하다.

plantuml.com

 

 

리액트에서 클래스로 컴포넌트를 만들 수도 있지만, 함수형 컴포넌트를 만들 수도 있다. (실제로 요새는 함수형 컴포넌트를 더 많이 쓴다.)

그래서 강의에서는 객체 다이어그램을 이용할 것이다.

 

https://plantuml.com/ko/object-diagram 

 

Object Diagram syntax and features

PlantUML object diagram syntax: You can define objects, fields, relationships, packages, notes... Changing fonts and colors is also possible.

plantuml.com

 

 

실습

 

1. 객체 생성

 

@startuml

object CreateGroup
object AddMembers
object ExpenseMain

@enduml

 

 

아래 두 요소는 굉장히 비슷하다. -> 컴포넌트화할 수 있다.

 

 

 

CreateGroup *-- CenteredOverlayForm
AddMembers *-- CenteredOverlayForm

조합의 관계로 나타낼 수 있다.

 

 

저 하얀색 박스도 CreateGroup이나 AddMembers의 CenteredOverlayForm을 재사용해서 만들 수 있을 것 같다.

하지만 Form의 형태가 아니므로 분리가 필요하다.

 

@startuml

object CreateGroup
object AddMembers
object ExpenseMain

object CenteredOverlay
object CenteredOverlayForm

object AddExpenseForm
object ExpenseSummary
object ExpenseList

CreateGroup *-- CenteredOverlayForm
AddMembers *-- CenteredOverlayForm

CenteredOverlayForm *-- CenteredOverlay

ExpenseMain *-- AddExpenseForm
ExpenseMain *-- ExpenseSummary
ExpenseMain *-- ExpenseList
ExpenseList *-- CenteredOverlay 

@enduml

 

 

강의에서는 이렇게 만들었는데, 내가 보기엔 CenteredOverlay가 CenteredOverlayForm을 포함하는 관계가 더 적절한 것 같다.

CenteredOverlay 안에는 CenteredOverlayForm가 있을 수도 있고 ExpenseList가 있을 수도 있기 때문이다.

 

근데 또 뭐 정확한 위계로 배치했다기보다 CenteredOverlay는 디자인적인 역할만 하는 거라 따로 빼놓은 거면 저게 맞을 수도..

 

완성본

 

@startuml

object CreateGroup {
  state groupName: string
  ' 입력된 값이 조건을 만족하는지 체크 '
  state formValidated: boolean
}
object AddMembers {
  state members: string[]
  state formValidated: boolean
}
object ExpenseMain {
  ' 상태 관리 라이브러리를 사용해서 store에서 get할 수 있기 때문에 '
  ' props는 아닐 수도 '
  groupName: string
  members: string[]
}

object CenteredOverlay
object CenteredOverlayForm {
  ' state와 props는 구별해준다. '
  props title: string
  props inputType: string
  props handleFormSubmitted: function

  state currentValue: string
}

object AddExpenseForm {
  ' members는 계속해서 변하는 상태값이 아님 '
  members: string[]
  state payer: string
  ' 결제 내역 '
  state description: string
  state amount: number
  state paidAt: Date
  state formValidated: boolean
}
object ExpenseSummary {
  expenses: expense[]
  members: string[]
}
object ExpenseList {
  expenses: expense[]
}

CreateGroup *-- CenteredOverlayForm
AddMembers *-- CenteredOverlayForm

CenteredOverlayForm *-- CenteredOverlay

ExpenseMain *-- AddExpenseForm
ExpenseMain *-- ExpenseSummary
ExpenseMain *-- ExpenseList
ExpenseList *-- CenteredOverlay 

@enduml

 

 

다른 다이어그램은 익숙하지도 않고 잘 안 와닿았는데, 리액트를 써본 입장에서 객체 다이어그램은 프로그램을 만들기 전 필수 요소라고 느껴지기까지 한다. 다이어그램을 그려보면서 이미 코드가 어떤 식으로 작성돼야 할지 어느 정도 감을 잡을 수 있고, 큰 그림을 그릴 수 있게 됐다. 작은 프로젝트라도 PlantUML로 도식화해보는 훈련을 자꾸 하자. 화이팅

 

 

 

#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발

#패캠인강후기 #패스트캠퍼스후기 #오공완 #사이드프로젝트10개기술스택으로구현하는풀스택서버리스프로젝트withReact

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr