-
안녕하세요. 그린입니다!
이번 포스팅에서는 UML에 대해 제가 학습하며 느낀것을 정리해보는 시간을 가져보겠습니다ㅎㅎ
아직 저도 미숙한 부분이 많으며 포스팅의 내용이 정확하지 않을 수 있습니다..! 발전해나가는 과정이라서요..^^
수정되야할것이나 의견이 있으시면 언제든 댓글 부탁드려요~~!!
UML
-. Unified Modeling Language의 약자로 표준화 모델링 언어
-. 시스템 구조를 다이어그램으로 연결하여 표현할 수 있습니다. (예를들어 이름/속성/연산 등등..!)
-. UML을 사용하는 가장 큰 이유는 코드에 대한 설명을 더욱 편하게 해줍니다. 코드를 설명할때는 3가지 정도의 방법이 있는데
1) 해당 코드만으로 설명이 필요없을 만큼 잘 짜거나!!
2) 글이나 주석으로 표현을 하거나~ (가장 많이 했던 방법입니다 제가 ㅎㅎ)
3) 도표나 다이어그램과 같이 도식화/시각화를 통해 표현을 하거나^^ (이번 UML을 배우면 이렇게 해보려구요!)
제가 느꼈을때는 UML은 마치 어릴때 기억도 안나지만 마인드맵과 유사하다고 생각했습니다. 도표로 표현하는것이 의사소통을 쉽게
해주는것처럼..!
다이어그램을 나타내는것에는 크게 2가지가 있습니다.
1. 클래스 다이어그램: 클래스의 의존관계를 파악할때 사용
2. 시퀀스 다이어그램: 시간 순서에 따른 객체간 협력을 나타낼때 사용
아직 이래도 잘 모르긴해요..ㅎㅎ 개념은 대충 알겠는데 어떻게 사용하며 그냥 아무렇게나 표현하면 되는지 헷갈립니다.
물론 정해지거나 딱 이렇게 안쓰면 안된다! 그런건 없어요~!! 어떻게 보면 표현을 쉽게 해주기 위한 방법이니까요?ㅎㅎ
그렇지만 UML도 어느정도의 약속이 정해져있습니다. 다 같이 사용해야되니까요. 그래서 이부분에 대해서 알아보겠습니다.
클래스 다이어그램에서 클래스간 관계를 잘 나타내주는것이 중요한데 크게 7가지의 관계 표현방법이 있습니다.
- 일반화(Generalization): 부모/자식 클래스간 상속의 관계일때 나타내며, 실선의 비어있는 화살표를 사용한다. 이때, 화살표의 방향은 부모클래스를 가리킨다.
- 실체화(Realization): 인터페이스의 정의만 있는 메서드를 오버라이딩 하여 구현할때 사용한다. 점선의 비어있는 화살표를 사용하며 인터페이스 쪽으로 화살표를 가리킨다.
- 의존(Dependency): 한 클래스가 다른 클래스에서 참조될때 사용한다. 점선의 화살표를 사용하며 가장 많이 사용되는 관계이다.
- 연관(Association): 다른 객체의 참조를 가지는 필드 관계를 나타낸다. 실선으로 나타낸다.
- 직접연관(Directed Association): 실선의 화살표로 나타내며 연관과 차이는 화살표의 유무로 참조하는쪽과 참조되는쪽으로 구분된다.
- 집합연관(Aggregation): 연관 관계를 더 세부적으로 나타내는것으로 해당 연관된 객체가 사라져도 연관된 객체가 메모리에서 사라지지 않는다. 실선의 비어있는 마름모로 나타낸다.
- 합성연관(Composition): 집합연관과 달리 참조 객체가 사라지면 연관된 객체가 메모리에서 같이 사라진다. 실선의 채워있는 마름모로 나타낸다.
이렇게 글로 읽으면 조금 이해가 안가실 수도 있어 그림으로 가져와봤습니다.
조금 이해가 가시나요?
제가 추가로 제가 구현해본 애플리케이션을 토대로 간략하게 클래스 다이어그램에 대해 작성해본 부분을 보여드리면
대충 아~~ 이런 느낌이구나! 하실수 있을거 같아 한번 보여드리겠습니다 ㅎㅎ
어떤 애플리케이션인지 어떤 클래스들이 어떤 기능을 하는지 정확하게 파악은 힘드시겠지만 관계와 어떻게 그리는건지만 보시면
될것 같습니다!
어떤 느낌인지는 오시죠~!??
해당 UML을 만드는 툴은 아래 링크로 남겨놓겠습니다..!
본인이 나중에 본인 코드를 보며 다시 학습할때나 다른 사람의 업무를 볼때 이런 UML이 있으면 참 유용해요!
오늘도 이렇게 포스팅을 마쳐보겠습니다.
감사합니다!
[UML 온라인 툴 링크]
'iOS' 카테고리의 다른 글
단위테스트와 TDD (0) 2020.12.15 AppDelegate & SceneDelegate (0) 2020.12.07 Gesture Recognizer (0) 2020.12.02 View LifeCycle (생명주기) (0) 2020.11.24 KVO와 Notification 간단 정리 (0) 2020.11.19