[미디엄] 간단한 C# .NET 9 패턴 매칭 하나 소개
글 : Clean Code in .NET 9: Writing Maintainable and Elegant Code
저자 : Adem KORKMAZ
이전 방법(바꾸기 전, 나쁜 방법)
public string GetUserFullName(User user)
{
if (user != null)
{
if (!string.IsNullOrEmpty(user.FirstName) &&
!string.IsNullOrEmpty(user.LastName))
{
return user.FirstName + " " + user.LastName;
}
}
return string.Empty;
}
새로운 방법(바꾸기 전, 좋은 방법)
public string GetUserFullName(User user) =>
user is { FirstName: not null, LastName: not null }
? $"{user.FirstName} {user.LastName}"
: string.Empty;
2개의 좋아요
개인적으로 나쁜 코드 사례가 마냥 나쁘다고 생각하지는 않습니다. 좀 더 눈으로 해석하기 쉽기 때문(제가 옛날 사람 이여서 일수도 있어요)입니다. 나쁜 코드 보다는 이전 방식
이 어떨까요? 그리고 좋은 코드
대신 현대 방식
이 좀 더 적절할 것 같습니다.
12개의 좋아요
레스티
4월 11, 2025, 12:47오전
3
not null 패턴에서 IsEmpty 체크도 되는건가요?
안된다면 로직자체가 다른 메서드 같은데…
3개의 좋아요
와 이거 패턴매칭은 생각도 못했네용ㅋㅅㅋ
근데 요건 그냥 string.IsNullOrEmpty()
가 더 눈에 잘 들어오는 듯 ㅋㅋㅋ
그리고 빈문자열 체크는 string.IsNullOrWhiteSpace()
로 강력 추천.
(간혹 공백이 섞이는 경우가 있어서 이제는 요걸로 그냥 쓰는게 맘편함ㅋ)
5개의 좋아요
루나시아
4월 11, 2025, 5:43오전
6
@레스티 님 말씀대로 첨부된 코드는 null 체크만 되고 IsEmpty 체크는 되지 않아서 완전히 동일한 동작을 하는 코드는 아니에요.
@Chris_Shim 님께서 첨부한 아티클처럼 FirstName : { Length: > 0 }
으로 검사하거나, 더 간략화해서 FirstName.Length: > 0
으로 검사해야 IsEmpty 체크가 가능합니다.
본문에 첨부된 코드를 바꿔보면 다음과 같은 형태가 되겠네요.
public string GetUserFullName(User user) =>
user is { FirstName.Length: > 0, LastName.Length: > 0 }
? $"{user.FirstName} {user.LastName}"
: string.Empty;
그런데 이 코드도 문자열이 공백으로만 구성된 경우는 검출하지 못합니다. 이때는 string.IsNullOrWhiteSpace()
를 사용해야 합니다.
4개의 좋아요
저는 이러면 제일 좋다고 할거 같아요
public static string FullName(this User user) => user switch
{
{ FirstName: {} first, LastName: {} last } => $"{first} {last}",
_ => throw new("what the nameless")
};
패턴매칭이 nullsafe하게 데이터를 추출해주는 역할까지는 훌륭하지만
유효한 이름
과 같이 어떤 문화적 의미를 만족하는 데이터조합인지까지 검증하는건
개인적으로 작정하고 별도의 조건을 달아야 한다고 생각해요.
사람이름이 null, “”, " " 만 아니면 다 괜찮은것도아닌데 저것들만 우선 걸러낸다고 특별히 시스템 효율이나 안전성에 기여하는거같진 않아보여서요
그런검증을 위한 정규표현식도 패턴매칭이랑 잘어울리는편이라 좋아합니다.
5개의 좋아요