소프트웨어 개발 과정에서 디자인 패턴을 사용하는 이유와 목적
- 소프트웨어에서 디자인이 강조되고 있고 정해진 형식으로 소통하기에는 글보다 그림이 더 설명력이 우수하고 소통의 오류를 최소화할 수 있다.
- 알고리즘의 작동방식을 보다 명확하게 설명하기 위해서와 시스템 설계 및 문서화에 널리 사용되고 무엇보다 시각적으로 표현할 수 있다는 점이 강점이라고 할 수 있다.
- 디자인 패턴을 사용하게 되면 재사용 가능한 컴포넌트로 분리할 수 있으며 유연성을 확보할 수 있다. 알고리즘의 적절성을 확인할 수 있고 시스템을 쉽게 확장 및 변경할 수 있다.
- 특히 머신러닝과 같이 다양한 알고리즘들이 쏟아지는 영역에서는 한눈에 이해하기 위해 도식화된 그림이 필요하고 어떤 파라미터를 사용해야 개발된 알고리즘을 적절하게 활용할 수 있는지 알 수 있어서 디자인 패턴이 자주 사용된다.
예시로 PCA (차원축소) 알고리즘에 대한 UML이 있어서 참고한다.
이 구조에 대해서 설명하면 class 사이의 관계를 확인하는 것이 된다.
PcaHubert, PcaCov, PcaLocantore, PcaGrid, PcaProj class가 PcaControl class에 Dependancy 된다.
또 PcaHubert, PcaCov, PcaLocantore, PcaGrid, PcaProj class는 PcaRobust class에
Is relationship 으로 inheritance 된다.
PcaRobust와 PcaClassic은 Pca class에 역시 is relationshiop으로 inheritance된다.
SummaryPca는 Pca class에 owns 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와 비슷하다고 볼 수 있다.