글과 사진, 그리고 이야기

IE & SWCON/Software Design

UML 다이어그램과 디자인패턴 (sckit-learn의 pca)

뱃놀이가자 2023. 11. 30. 20:28
728x90

소프트웨어 개발 과정에서 디자인 패턴을 사용하는 이유와 목적

 

  • 소프트웨어에서 디자인이 강조되고 있고 정해진 형식으로 소통하기에는 글보다 그림이 더 설명력이 우수하고 소통의 오류를 최소화할 수 있다. 
  • 알고리즘의 작동방식을 보다 명확하게 설명하기 위해서와 시스템 설계 및 문서화에 널리 사용되고 무엇보다 시각적으로 표현할 수 있다는 점이 강점이라고 할 수 있다.
  • 디자인 패턴을 사용하게 되면 재사용 가능한 컴포넌트로 분리할 수 있으며 유연성을 확보할 수 있다. 알고리즘의 적절성을 확인할 수 있고 시스템을 쉽게 확장 및 변경할 수 있다.
  • 특히 머신러닝과 같이 다양한 알고리즘들이 쏟아지는 영역에서는 한눈에 이해하기 위해 도식화된 그림이 필요하고 어떤 파라미터를 사용해야 개발된 알고리즘을 적절하게 활용할 수 있는지 알 수 있어서 디자인 패턴이 자주 사용된다.

예시로 PCA (차원축소) 알고리즘에 대한 UML이 있어서 참고한다.

 

 

 

이 구조에 대해서 설명하면 class 사이의 관계를 확인하는 것이 된다.

 

PcaHubert, PcaCov, PcaLocantore, PcaGrid, PcaProj classPcaControl classDependancy 된다.

PcaHubert, PcaCov, PcaLocantore, PcaGrid, PcaProj classPcaRobust class

Is relationship 으로 inheritance 된다.

PcaRobustPcaClassicPca class에 역시 is relationshiop으로 inheritance된다.

SummaryPcaPca classowns relationship으로 Composition & Association 관계이다.

 

이에 대한 내부 소스코드는 github에 있다.

 

https://github.com/scikit-learn/scikit-learn/blob/3f89022fa/sklearn/decomposition/_pca.py#L118

 

추가로 github를 보게 되면 앞에 다음과 같은 주석으로 오픈소스 라이선스를 공지하고 있다

 

""" Principal Component Analysis.

"""

 

# Author: Alexandre Gramfort <alexandre.gramfort@inria.fr>

#         Olivier Grisel <olivier.grisel@ensta.org>

#         Mathieu Blondel <mathieu@mblondel.org>

#         Denis A. Engemann <denis-alexander.engemann@inria.fr>

#         Michael Eickenberg <michael.eickenberg@inria.fr>

#         Giorgio Patrini <giorgio.patrini@anu.edu.au>

#

# License: BSD 3 clause

 

->BSD는 소스코드를 공대하지 않고도 이를 사용해 개발할 수 있으나 라이선스와 관련한 정보를 고지해야 한다는 점에서 대표적으로 수업시간에 배운 아파치소프트웨어재단이 만든 Apache License와 비슷하다고 볼 수 있다.

 

728x90