푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 애플리케이션
C# 애플리케이션

다른 카테고리

Tim Corey의 레슨 18 전체 분석을 통한 C# WinForms 토너먼트 로직 튜토리얼

Tim Corey
1h 15m 39s

Tim Corey의 시작부터 끝까지 C# 응용 프로그램 시리즈 Lesson 18에서는 C# WinForms(Windows Forms) 앱 내부의 로직 중심 개발에 중점을 둡니다. 초기 수업들에서 사용자 인터페이스, WinForms 컨트롤, 디자이너를 사용한 시각적 레이아웃에 중점을 두었던 반면 이 수업은 뒤에서 올바르게 작동하는 시스템 구축에 관한 것입니다.

Tim은 반복적으로 실제 개발 노력이 이 단계에서 일어난다고 설명합니다. 버튼, 텍스트 박스, 일반 컨트롤은 가능한 모든 시나리오에서 작동해야 하는 로직 설계에 비하면 쉽습니다. 이 수업은 응용 프로그램이 단순한 데모가 아닌 진짜 Windows 데스크탑 응용 프로그램처럼 느껴지기 시작하는 전환점을 나타냅니다.

전체 수업은 Visual Studio를 사용하여 진행되며, .NET Framework, 클래스 라이브러리, 그리고 미래 확장을 지원하는 WinForms 프로젝트 유형을 활용합니다.

UI에서 벗어나 로직 설계하기

수업 초반에 Tim은 중요한 점을 강조합니다: 즉시 코딩을 시작하지 마십시오. 그는 복잡한 논리가 폼의 코드 뒤에 시작되지 않아야 한다고 설명합니다. 대신에 Windows Forms 앱을 일시 중지하고, 종이와 펜을 잡고, 토너먼트 구조를 시각적으로 설계하기 시작합니다.

이는 디자이너, 도구 상자 및 속성 그리드에서의 고의적인 전환입니다. Tim은 WinForms가 포괄적인 UI 도구 세트를 제공하지만, 로직은 드래그앤드롭할 수 없으며 설계되어야 한다고 강조합니다.

그는 이미 여러 번 이 로직을 다시 썼다는 점을 언급하며 버그 수정을 하고 접근 방식을 재고하는 것이 개발의 일상적인 부분임을 강화합니다.

디자인 개념적으로 토너먼트 구조 이해하기

Tim은 시스템 디자인 관점에서 실제로 토너먼트가 무엇인지를 설명하며 다음을 정의합니다:

  • 대진

  • 대진 항목

  • 라운드

  • 자동 승리

각 대진은 대진 항목을 포함하며 각 항목은 어느 팀을 대표하는지 아직 알지 못할 수 있습니다. 이 개념은 미래 라운드를 구현할 때 중요해집니다.

Tim은 3개의 팀이 포함된 간단한 예시를 사용하여 토너먼트가 왜 2의 거듭제곱이 필요한지를 설명합니다. 이에 따라 자동 승리는 특별한 기능이 아니라 수학적 필수 요소입니다.

이 섹션은 코드보다 개발자처럼 생각하는 것과 관련이 있으며, 이는 시리즈 전반에서 Tim이 반복적으로 강조하는 내용입니다.

어떤 팀은 null이어야 하는 이유

이 시점에서 Tim은 Visual Studio로 전환하여 솔루션 탐색기를 열고 데이터베이스 프로젝트로 이동합니다. 그는 테이블 디자인을 더블 클릭하여, 미묘하지만 중요한 요구사항을 설명합니다: 미래 라운드는 팀을 아직 알 수 없습니다.

그에 따라 TeamCompetingId 필드는 null 값을 허용해야 합니다.

Tim은 속성 창을 열어 SQL Server의 안전 경고를 설명하고 테이블 재생성이 필요한 변경 사항 저장을 방지하는 기능을 일시적으로 비활성화하는 방법을 보여줍니다. 그는 이 테이블이 비어 있기 때문에 이것이 안전하다는 점을 주의 깊게 언급합니다.

이는 개발 속도, 데이터 무결성 및 현실적인 제약 조건의 균형을 맞추는 전형적인 사례입니다.

폼을 깔끔하고 초점 있게 유지하기

WinForms 프로젝트로 돌아와서 Tim은 코스의 시작 이후로 따르고 있는 한 가지 규칙을 강화합니다: 폼은 비즈니스 로직을 포함해서는 안 됩니다.

WinForms는 버튼 클릭 이벤트 내부에 직접 로직을 작성하는 것을 쉽게 만들지만 그러한 행동은:

  • 유지 보수성

  • 재사용성

  • 테스트

  • 미래 플랫폼 호환성에 해를 입힙니다.

대신 폼의 책임은 다음으로 제한됩니다:

  • UI에서 입력 수집

  • 메서드 호출

  • 결과 표시

이러한 분리는 Windows 데스크탑 응용 프로그램을 깔끔하고 전문적으로 유지합니다.

토너먼트 로직 클래스 생성하기

Tim은 새 클래스 라이브러리를 생성하고 정적 TournamentLogic 클래스를 소개합니다. 이 클래스는 UI, 데이터 액세스, 모델이 아니며 순전히 구현 로직을 위한 것입니다.

이 디자인 선택은 이후에 동일한 로직을 재사용할 수 있게 해 줍니다:

  • WPF

  • ASP.NET

  • 다른 .NET 데스크톱 또는 웹 플랫폼

이 순간은 WinForms가 여전히 관련 있는 이유를 조용히 보여 줍니다: 정확하게 사용되었을 때 현대적인 아키텍처와 깔끔하게 통합됩니다.

팀 무작위 배치를 공정하게 수행하기

Tim은 다음을 사용하여 팀 순서를 무작위로 결정하는 메서드를 구현합니다:

OrderBy(x => Guid.NewGuid())

그는 이것이 암호학적으로 완벽하지는 않다고 인정하지만, 그것이:

  • 간단하고

  • 읽기 쉽고

  • 지원 가능하며

  • 나중에 교체하기 쉽다고 설명합니다.

이것은 수업에서 반복되는 주제와 일치합니다: 먼저 정확성을 달성하고 나중에 최적화하십시오.

그는 또한 원래의 리스트가 수정되지 않아 의도치 않은 부작용을 피하는 이유를 설명합니다 — 이는 미묘하지만 중요한 프로그래밍 습관입니다.

총 라운드 수 계산하기

이 섹션은 예상보다 오래 걸리고 Tim은 공개적으로 그 이유를 설명합니다: 로직은 쉽게 오해될 수 있습니다.

그는 의도를 모호하게 하는 공식에 의존하는 대신 루프를 사용하여 라운드를 계산하는 방법을 보여줍니다. 목표는 명확성을 유지하면서 착잡함을 피하는 것입니다.

Tim은 각 경우를 검증합니다:

  • 2 팀 → 1 라운드

  • 3 팀 → 2 라운드

  • 4 팀 → 2 라운드

  • 8 팀 → 3 라운드

그는 논리를 신뢰하기 전에 일시 정지하고 테스트하며 고립된 상태에서 검증할 것을 시청자에게 여러 번 권장합니다.

자동 승리 수 결정하기

Math.Pow를 사용하는 대신, Tim은 수작업으로 다음 2의 거듭제곱을 계산하는 논리를 고의적으로 작성합니다. 그는 소수점 연산을 피하면 오류가 줄어들고 가독성이 개선된다고 설명합니다.

이 섹션은 경험 많은 개발자들이 디버깅 및 유지보수가 용이하기 때문에 지루하고 명시적인 코드를 자주 선택하는 이유를 보여줍니다.

첫 번째 라운드 생성하기

첫 번째 라운드는 다음 이유로 특별합니다:

  • 팀이 알려져 있고

  • 자동 승리가 적용되며

  • 부모 대진이 존재하지 않습니다

Tim은 대진은 어떻게 생성되며, 대진이 완료되는 시점과 자동 승리가 팀을 자동으로 승진시키는 방법을 신중하게 설명합니다.

이 로직은 단계별로 구현되며 각 결정이 이루어진 이유를 자주 설명합니다.

후속 라운드 빌드하기

이후 라운드는 매우 다르게 만들어집니다. 팀은 알려지지 않았으므로 대신 부모 대진이 사용됩니다.

Tim은 이전 라운드의 대진이 다음 라운드로 어떻게 공급되어 한 경기도 진행되기 전에 전체 토너먼트 트리를 만드는지 설명합니다.

이것은 응용 프로그램 전체에서 가장 중요한 아키텍처적 결정 중 하나이며, 다음을 가능하게 합니다:

  • 점수 추적

  • 승자 승진

  • 미래의 자동화

최종 검토 및 검증

수업의 마지막 몇 분 동안 Tim은 전체 흐름을 검토합니다:

  • 팀은 무작위화됩니다

  • 라운드는 계산됩니다

  • 자동 승리가 할당됩니다

  • 대진은 생성됩니다

  • 토너먼트 구조는 완료되었습니다

그는 오류는 예상되며 로직은 시간이 지남에 따라 개선되고 전문 개발자는 더 큰 개선을 위해 초기 코드를 끊임없이 재검토한다고 강조합니다.

마무리 생각

Lesson 18은 WinForms 컨트롤, 드래그 앤 드롭 UI, 혹은 화려한 기능들에 관한 것이 아닙니다. 그것은 사용을 버틸 수 있는 코드 설계와 작성에 관한 것입니다.

비디오의 끝에 이르면, 응용 프로그램은 간단한 Windows Forms 앱에서 구조화되고 확장 가능한 .NET 데스크톱 프로그램으로 발전합니다 — 필요 시 WinForms를 넘어 성장할 수 있는 잠재력을 갖춘 하나의 프로그램입니다.

이것이 학습이 학문적으로 그치는 것이 아닌 전문적으로 시작되는 지점입니다.

Hero Worlddot related to Tim Corey의 레슨 18 전체 분석을 통한 C# WinForms 토너먼트 로직 튜토리얼
Hero Affiliate related to Tim Corey의 레슨 18 전체 분석을 통한 C# WinForms 토너먼트 로직 튜토리얼

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해