windows Form 메인 소스 코드 정리 필요
c# windows forms 응용프로그램 개발 중 메인 폼 소스 코드 사이즈가 커지면서 관리가 힘들어졌다.
아무래도 메인폼에 form control 내에서 오는 이벤트와 method 등 모든 소스 코드를 다 적다 보니
그 안에서 얽히고설켜서 더 커지기 전에 정리해야겠다는 생각이 들었다.
이전엔 사이즈가 크지 않은 프로젝트다 보니 주석을 통해 분리 관리하는 정말 단순한 방법을 사용했었다.
그렇게 해도 큰 문제도 없었다.
하지만 이번 프로젝트를 진행하면서 동일 방법으로 진행하다 보니 정리 안된 코드 때문에 힘들었다.
지금 정리하지 않으면 안 될 것 같았고, 차후 개발 완료 후 운영 시 유지관리에도 꼭 필요한 과정이라고 생각됐다.
그래서 여러 방법들을 찾던 중 많은 사람들이 Partial class(부분 클래스)를 이용하여 기능별, 역할별 소스 코드를
분리 관리한다는 사실을 알게 됐다. 그중 아래 링크 블로그의 글을 중점으로 참고하여 일을 진행해보았다.
Partial 클래스 및 메서드 - C# 프로그래밍 가이드
Partial 클래스 및 메서드(C# 프로그래밍 가이드)Partial Classes and Methods (C# Programming Guide) 이 문서의 내용 --> 클래스, 구조체, 인터페이스 또는 메서드의 정의를 둘 이상의 소스 파일에 분할할 수 있습니다.It is possible to split the definition of a class, a struct, an interface or a method over two or more source
docs.microsoft.com
https://uniworks.tistory.com/26
18. WinForm 소스 파일을 부분클래스(Partial Class)로 분할하기
지금까지 작성한 코드의 라인이 벌써 1,000라인이 넘어 가고 있다. 앞으로도 많은 기능들을 하나씩 하나씩 붙여 나갈 것인데, WinForm파일 인 WANIGrid.cs파일의 라인 수는 시간이 지날 수록 점점 더 커지게 될 것..
uniworks.tistory.com
해결 과정
1. 어떤 기준으로 소스 코드를 분리 정돈할 것인가.
프로그램에서 실행되는 기능 크게 3가지로 정하여 분리
- 디바이스 설정 변경 : MainForm.BtnSetting.cs
- 시뮬레이션 : MainForm.BtnSimulation.cs
- 모니터링 : MainForm.BtnMonitoring.cs
2. partial class 적용
1) 클래스 추가
[프로젝트 파일] - 우클릭 - 추가 - 클래스 - 하단 이름 작성 (메인 폼 Name. 원하는 Name.cs)
2) 추가한 클래스에 메인 폼 클래스명으로 선언 - Visual Studio 종료
3) 편집기 사용하여 프로젝트.csproj 열어 추가한 클래스 설정값 수정
<Compile Include="MainForm.BtnMonitoring.cs">
<SubType>Form</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.BtnSetting.cs">
<SubType>Form</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.BtnSimulation.cs">
<SubType>Form</SubType>
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
3. 적용 확인
다시 Visual Studio 프로젝트 실행시키면 솔루션 탐색기에 추가된 클래스 확인
메인 폼에서 모두 처리하는 것이 아닌 역할별로 구분한 클래스에 정리하니 한결 메인 폼이 깔끔해진 느낌이다.
개발 초기에 이러한 정리가 꼭 이루어져야겠다는 생각을 하였고 개발 중에나 개발 완료 후 유지보수 시에나
문제 발생 시 관련 클래스에 접근하여 관리가 가능하여 앞으로 관리가 쉬워질 것 같다.
c# Windows Forms, Partial Class(부분 클래스) 사용하여 메인 소스코드 분할하기 완료