[Project design] 상세 설계(인터페이스 설계와 추상화 작업)


Study/Project design  2020. 12. 11. 18:11

안녕하세요. 명월입니다.


이 글은 상세 설계(인터페이스 설계와 추상화 작업)에 대한 글입니다.


이전에 제가 기본 설계에 대해서 설명했었습니다.

링크 - [Project design] 기본 설계(화면 설계와 DB설계)


기본 설계라는 것은 간단하게 이야기하면 프로그램의 전체적인 구도를 설정하는 것이 되겠습니다. 그럼 상세 설계는 좀 더 자세하게 프로그램을 어떻게 만들까 설정하는 것입니다.

기본 설계에서는 유즈 케이스나 엑티브 다이어그램 등을 통해서 조금 프로그램적인 요소보다 유저가 프로그램을 어떻게 사용할 것인지, 프로그램의 객체는 어떻게 흘러갈 것인지 설명한다면 상세 설계는 좀 더 구체적인 프로그램적인 설계를 하게 됩니다.

즉, UML(Unified Modeling Language: 통합 모델링 언어)에서는 시퀀스 다이어 그램을 사용하거나 클래스 다이어그램을 이용해서 프로그램적인 설계를 하는 것입니다.

시퀀스 다이어그램 출처 - https://en.wikipedia.org/

클래스 다이어그램 출처 - https://stackoverflow.com/


이 상세 설계를 하는 이유는 여러 공정의 인터페이스를 확정하기 위함입니다.

이번에는 웹 프로그램이 아닌 C/S(Client-Server) 프로그램을 예로 설명해 보겠습니다.

우리가 업무 C/S 프로그램을 작성한다고 생각할 때, Server에서는 크게 Network 파트와 업무 파트, Core(공통 부품), 기타 유틸리티 등으로 분리가 됩니다. 뭐 혼자 개발한다고 하면 파트를 나눌 필요는 없지만 실무에서는 혼자 개발하는 경우는 드물기 때문에 크게 4파트로 나누어서 개발한다고 생각합니다. 상세 설계가 없이 바로 개발이 시작된다고 할 때, 각 파트에서는 공수(step count)가 설정이 될 것입니다.

그러면 내가 업무 파트를 만든다고 할 때, 작성 중에 Core에서 특정 데이터를 취득 해야 할 때가 있습니다. 그런데 Core 파트에서는 그 부분을 아직 만들지 않았네요.. 중요도가 낮다고 우선 순위가 밀려버렸습니다. 그럼 우리는 그 Core가 만들어 질때까지 기다려야 합니다.

Network로 Client로 데이터를 보내려고 하는데 Network파트가 완성이 되지 않았습니다. 더 크게 보면 Client 프로그램은 Server 프로그램이 완성될 때까지 기다려야 합니다.

보통 프로젝트는 병렬로 흘러가기 때문에 이렇게 개발을 다른 파트가 완성될 때까지 기다릴 수가 없습니다.

그래서 이런 상세 설계를 하는 이유입니다.


이 이야기는 워터폴 공정에서의 이야기입니다. 물론 프로젝트 시간이 많아서 위 방법대로 하면 매우 좋겠지만, 현실은 설계도 하나하나 작성하고 나갈 시간이 없습니다.

그래서 저는 이 부분을 생각했습니다만, 문제는 위 작업이 없으면 팀 안에서 협업 작업이 안된다는 문제가 발생합니다.


그래서 저는 항상 프로그램 코딩이 곧 설계다라는 생각으로 대신 Interface와 Abstract 클래스를 이용해서 아직 개발은 하지 않았지만 인터페이스와 추상화 설계를 먼저합니다.

Interface는 실제 개발 코드가 들어갈 필요가 없이 먼저 내가 무엇을 만들지 함수를 쭉 작성합니다.

그리고 변수가 필요한 부분은 추상 클래스로 미리 설정해 놓습니다.


이렇게 하면 무엇이 좋은가 하면 실제 코딩을 하지 않아도 프로젝트 내에서 디버깅 에러가 발생하지 않습니다. 물론 인터페이스가지고 실제 인스턴스가 생성이 되는 것은 아니기 때문에 정상적인 실행은 되지 않습니다.

그러나 설계 + 코딩이 동시에 일어나기 때문에 시간을 많이 아낄 수 있습니다. 그리고 UML의 표보다 직접 소스를 보고 판단을 하게 되니 개인적으로는 설계 가독성이 더 좋은 느낌도 있습니다.


그리고 저는 최근부터 사용하였는데 한줄 코딩 작성하면 그에 대한 한줄 주석을 다는 방법입니다. (이건 상황에 따라서 오히려 소스가 더 지저분해 보일 수 있습니다.)

한줄 코딩 한줄 주석을 하면 코드 페이지 자체가 설계도가 되어 버립니다. 이렇게 작성하면 한 함수에 소스를 때려박는 코딩도 많이 줄고 Facade 패턴으로 오히려 하나하나 깔끔한 코딩이 되는 것 같더군요.

이 방법은 근데 견해 차가 워낙 있어서 추천하지는 않습니다.


이 방법에 문제는 역시 개발자가 아니면 못합니다.

그런데 팀에 개발자로 구성되어 있다면 개인적으로 너무 편리했습니다. 부차적인 설명도 필요없고 코드로 모든게 설명이 되니 전체적으로 불필요한 시간을 많이 절약할 수 있던 거 같네요.


여기까지 상세 설계(인터페이스 설계와 추상화 작업)에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.