안녕하세요 납땜능력자 입니다
오늘은 저의 C# 코딩시 코딩룰과 코딩에 시작하기 전 준비과정을 소개하겠습니다
대부분의 개발자분들은 자신만의 룰을 가지고 개발을 하실 거라 생각합니다. 만일 자신만의 룰이나 체계가 잡혀있지 않으신 분들이 도움이 되었으면 좋겠습니다.
1. 프로젝트 시작
프로젝트 를 시작하기전 어떤 프로그램을 짤지 그 프로그램의 사용자는 누구인지 어떤목표를 가지고 코드를짤지 정해야합니다
어떤 프로그램?

어떤 프로그램을 짜는 것은 프로그램 목표와는 다른 의미입니다. 어떤 프로그램을 짠다는 것은 이 프로그램에 얼마나 많은 리소스를 사용하는지를 정하는 부분입니다. 코드뿐 아니라 시간과도 싸우는 수많은 개발자들이라면 이 부분이 얼마나 중요한지 느끼실 수 있을 겁니다.
저는 이 부분을 가장 오래 고민하고 가장 중요한 부분이라고 생각합니다. 쏟아부을 리소스를 정하면 얼마만큼의 시간을 사용할지 정해지고 프로그래밍의 계획을 세울 수 있습니다.
예를 들어 2명의 개발자가 2개의 아두이노 간 통신 시험을 위한 프로젝트를 한다고 합시다. 각각의 아두이노가 서로 간 통신을 점검하기 전 통신할 아두이노를 모방한 GUI를 제작해 서로 합을 맞추기 전 각각의 아두이노를 확실하게 확인할 용도로 프로그램 을 만들 수도 있고,
통신 중인 아두이노 2대를 제어할 용도의 프로그램을 제작할 수 있습니다.
위 경우를 보면 전자(아두이노 모방)의 경우 최대한 가볍고 적은 리소스를 사용해 빠르게 제작해야 하고, 후자(아두이노 제어)의 경우 최대한 데이터를 사용자가 보기 좋게, 인터페이스가 사용자가 사용하기 좋게 만드는 등 개발자의 많은 리소스를 사용해야 합니다.
즉, 개발 전 현재 개발할 GUI에 사용할 개발자의 리소스를 정해 개발을 시작해야 합니다.
저의 경우 간단한 시험용 프로그램의 경우 특별한 코딩의 계획을 세우지 않고 최대한 이전에 사용한 코드들을 복사 붙여넣기 하여 재활용하고 최대한 간단하게 프로그램을 제작하고,
리소스가 많이 필요한 경우 다양한 데이터 표현이나 버튼 위치부터 시작해 프로젝트 파일 관리까지 계획을 세운 후 개발을 시작합니다.
사용자는 누구?

위 고민은 프로젝트 계획 중 눈에 보이는 화면 구성 시 가장 많은 고민을 합니다. 크게 개발자, 관리자, 직원, 일반인 이렇게 4가지 사용자로 나누어 사용합니다.
이번에도 2개의 아두이노 통신 프로젝트를 예시로 설명드리겠습니다.
개발자는 통신이 잘 되고 잘 안 되고 뿐 아니라 통신의 속도, 정확성, 통신 프로토콜, 각 보드의 온도 등 최대한 많고 자세한 정보가 필요합니다. 그만큼 통신 데이터 및 보드의 상태를 중심으로 화면에 최대한 많고 자세한 데이터를 표현하기 위해 집중합니다.
관리자는 개발자보다 약간 덜 자세하지만 언제든 개발자와 소통할 수 있도록 '어떤 보드에 어떤 문제가 있다, 통신 상태가 좋다 안 좋다, 데이터 그래프가 이렇다'와 같이 문제가 발생했을 때 개발자에게 문제를 신속하게 알려줄 수 있고, 간단한 문제에 대해 조치하고 현장에서 판단을 내릴 수 있도록 도움을 주는 프로그램을 제작합니다.
직원의 경우는 관리자와 비슷하지만 다른 점은 판단을 내릴 수 있는지 할 수 없는지 차이가 있습니다. 직원의 경우 문제점이나 데이터 상태 등 모니터링은 할 수 있으나, 프로젝트의 설정이나 조치 데이터 관리 등 판단을 내릴 수 있는 요소는 제외하고 제작합니다.
일반인을 위한 프로그램은 직원과 같은 요소를 가지고 제작합니다. 그러나 최대한 쉽고 간단하게 데이터를 알아볼 수 있도록 데이터를 보여주기보다는 프로그램이 데이터를 어느 정도 판단해서 알려주고, 가장 간단하게 문제를 확인할 수 있는 등 최대한 모든 요소를 정리하고 분류하여 보기 쉬운 인터페이스 조작을 위해 제작합니다.
어떤 목표?
목표설정은 정말 간단하면서도 정말 중요합니다. 이 데이터를 어디에 어떤 용도로 사용하는지 파악하여 표현할 데이터는 표현하고 없어도 되는 데이터는 숨기는 등 사용자에 따라 사용될 리소스에 따라 개발할 프로그램에 필요한 요소들을 빼고 넣는 계획 단계에서 중요한 단계입니다.
2. 소스코드 관리
프로젝트 목표를 정하고 준비하였다면 코드를 짜기 전 제일 먼저 화면 표현 방법을 고민합니다. 화면에 표시될 데이터, 버튼 텍스트 등 대략적인 위치를 정해줍니다.
이제 본격적으로 프로젝트 소스코드를 관리해보겠습니다. 여기부터는 100퍼센트 저 개인의 생각이므로 정답은 없습니다.
메인 코드 아래로 각 소스들을 파일로 분활해줍니다.
아래는 위에서 사용한 2개의 아두이노에 사용될 관리용 프로그램에 사용할 수 있는 각 소스코드의 Layer 입니다.

코드를 Layer로 나눈 기준은 사용자 기준으로 층을 만든 것이 아닌 개발자의 입장에서 Layer가 높아지는 방향으로 코드가 진행되는 것으로 이해하시면 편하실 것입니다. 또한 Layer가 높아질수록 데이터가 더욱 많은 처리를 거치고 가장 낮은 Layer는 아무 과정도 거치지 않은 데이터(Raw 데이터)를 관리한다고 이해하시면 됩니다.
위 그림에서 초록색 Layer는 사용자가 보고 프로그램과 소통이 가능한 Layer를 표시해 두었고, 나머지 회색 Layer는 개발자가 다루는 영역을 표현해 두었습니다.
layer 0
메인 소스의 전 단계로 화면이 그려지기 전 각 컴포넌트들의 기본값 설정, 연결될 보드의 설정값 등 프로그램 시작 전 단계입니다. 파일 네이밍은 추후 설명할 예정입니다만 위 예제를 바탕으로 아래와 같이 소스코드 네이밍을 해줍니다. 소스코드 파일의 이름은
<프로젝트명>_<대분류>.cs 입니다.
1. DuoArdu_BoardSetting.cs
각 아두이노 보드 기본 설정
2. DuoArdu_Utill.cs
프로그램에 사용될 다양한 유틸
3. DuoArdu_Index.cs
각 컴포넌트들 관리용 번호
4. DuoArdu_Queue.cs
데이터를 수집할 버퍼 관리
Layer 1
이제 Main문이 포함되어있고, 각 컴포넌트들의 이벤트들을 관리하고, 새로운 창을 열고 닫는 등 사용자가 컨트롤하는 부분이고, 프로젝트 생성시 생성되는 부분입니다.
1. DuoArdu_MainForm.cs
코드 메인 창
2. DuoArdu_GraphForm.cs
그래프를 보여주는 서브 창
Layer 2
프로젝트에 사용될 각종 데이터를 관리하고 표현하기 위한 함수들의 모음입니다. 이곳에서 대부분의 코드가 작성되며 프로그램의 뼈대를 담당하는 부분입니다.
1. DuoArdu_TCPFunction.cs
보드와 통신할 TCP통신을 해줌
2. DuoArdu_DataParsing.cs
통신받은 데이터를 분류
3. DuoArdu_Graph.cs
데이터를 받아 그래프 데이터를 정리
Layer 3
가장 마지막으로 모든 데이터를 취합해 사용자에게 정리된 데이터를 보여주는 층 입니다.
1. DuoArdu_GraphPlot.cs
정리된 데이터를 받아 그래프를 그려줌
2. DuoArdu_BoardStatus.cs
보드 상태 데이터를 받아 표시해주고 보드로 설정값을 보내줌
위처럼 Layer로 나누어서 정리하는 가장 큰 이유는 개발자가 다음에 다시 코드를 확인할 때 조금이라도 더 가독성이 좋고, 코드를 좀 더 빠르게 이해할 수 있도록 오로지 개발자의 입장에서 이해하기 편하기 위해 위 방법을 기준으로 대부분의 프로젝트를 진행합니다. 위 방법은 추후 포스팅할 C, Python 등 다양한 언어들도 유사한 방법으로 Layer를 나눕니다.
위 방법은 이글을 읽는분들이 프로젝트 시작 전 계획을 세우는데 도움을 주었으면 좋겠고, 참고하여 좀더 탄탄한 프로젝트를 구성할때 도움이 되었으면 합니다.
다음 글은 코딩시 사용되는 룰을 설명드리겠습니다. 변수및 함수 작명방법이나 가능하다면 소스코드 간 변수 및 버퍼 공유 방법 등 실제 코드를 짜며 사용되는 룰 을 설명드리겠습니다.
혹시 프로젝트를 구성중인데 도움이 필요하시거나 질문이 있으시면 댓글 남겨주시면 도움을 드릴수있는 만큼 도와드리겠습니다.
감사합니다.
'WinForm' 카테고리의 다른 글
| [공통] C# Winform 시작 (0) | 2024.02.08 |
|---|---|
| [소개] winform 개발 방향 (0) | 2024.02.08 |