Skip to main content

Command Palette

Search for a command to run...

부분 메서드(partial method) 사용해보기

Published
1 min read
부분 메서드(partial method) 사용해보기

C#은 부분 메서드(partial method)를 지원합니다. partial class의 경우 UI의 코드를 자동 생성해주는 WinForms나 WPF에서 이미 사용하는 방법인데요, 부분 메서드(partial method)는 좀 낯섭니다.

부분 메서드는 다음의 경우 유용할 수 있습니다.

  • 서브 클래스로 모듈화 하기에는 복수개의 서브 인스턴스가 생길 일이 없어 단일 클래스로 표현하고 싶을 때
  • 소스 생성기를 이용하고자 할 때

먼저 소스 생성기를 사용하고자 하는 경우를 살펴볼께요.

특성으로 소스 생성기에 해당 메소드가 자동 생성되는 것을 알리고 다음처럼 표현할 수 있습니다.

[RegexGenerated("(dog|cat|fish)")]
partial bool IsPetMatch(string input);

해당 메소드는 구현되지 않았지만 소스 생성기에 의해 다음 형태로 코드가 생성될 것입니다.

| 자동 생성됨

patial class UserClass
{
   ...
   partial bool IsPetMatch(string input)
   {
      ...
   }
   ...
}

마치 내가 코드를 작성한 것 처럼 다음처럼 사용할 수 있게 됩니다.

var inst = new UserClass();
var result = inst.IsPetMatch("dog");

첫 번째의 경우는,

필요에 따라 동일한 partial class DatabaseSynchronizer 선언으로 파일단위로 모듈을 나누고

  • DatabaseSynchronizer.cs
  • DatabaseSynchronizer.Forward.cs
  • DatabaseSynchronizer.Reverse.cs

Forward와 Reverse의 기능을 구현한 뒤 DatabaseSynchronizer.cs에 구현한 메소드를 partial method 선언으로 표현할 수 있습니다.

| DatabaseSynchronizer.Forward.cs

...
public partial DDLSyntaxTree Forward(Model model)
{
   ...
}

그리고 DatabaseSynchronizer.cs는 선언만 해주는 것으로,

...
public partial DDLSyntaxTree Forward(Model model);
...

어떤 메서드를 제공 하는지 알 수 있도록 해줍니다.

이렇게 하면 좀 더 소스 코드 관리가 쉬워지고 각각의 기능은 결국에는 합쳐지겠지만 구분된 파일에 의해 좀 더 구조적으로 코딩이 가능해 집니다.

43 views

More from this blog

개발, 테스트, 운영에서의 도커 활용

핵심 원칙: "한 번 빌드하고, 어디서든 실행한다 (Build once, run anywhere)" 도커의 가장 큰 장점은 환경 일관성입니다. 동일한 도커 이미지를 사용하여 개발, 테스트, 운영 환경을 구성함으로써 "제 PC에서는 됐는데..." 하는 문제를 최소화할 수 있습니다. 1. 개발 단계 (Development) 목표: 빠른 코드 변경 반영, 쉬운 디버깅, 실제 운영 환경과 유사한 환경 구성. Docker 사용 방안: Dockerf...

May 9, 20256 min read15

[EF Core] 데이터 삭제 시 소프트 삭제 적용

DB에서 데이터를 삭제하면 일반적으로 복구할 수 없습니다. 또한 관계에 따라 영구 삭제 자체가 어려울 수도 있습니다. 그래서 데이터를 영구 삭제하는 대신 IsDeleted 속성을 true로 주고 IsDeleted 속성을 필터링해서 조회하는 방법을 사용하기도 합니다. 이를 소프트 삭제라고 합니다. 그런데 EF에서 알아서 데이터 삭제 시 소프트 삭제를 하고 쿼리시 IsDeleted 속성을 체크해서 삭제한 데이터를 제외한 데이터만 쿼리하게 하는 ...

Mar 18, 20243 min read19

[EF Core] ValueConverter를 이용해서 엔터티 속성의 도메인 관리

EF Core를 사용하면서 문자열 길이 등의 특성을 일일이 지정하는 것은 번거롭습니다. ... [MaxLength(32)] public string? 제목 { get; set; } 엔터티가 한 개일 때는 상관이 없으나 제목 유형이 여러 엔터티에 사용될 경우 유형을 지정하기 번거롭습니다. 속성 유형을 도메인으로 관리하면 참 편할텐데요, ValueConverter를 이용할 수 있습니다. 그런데 이것을 인터페이스 정적 추상를 사용해서 다음처럼 ...

Mar 16, 20242 min read8

디모이 블로그

154 posts

.NET 관련 기술을 선호하고 새로운 언어를 배우는데 관심이 있습니다.