-
static method? static class?프로그래밍 2023. 11. 2. 23:27
처음으로 돌아가지 마세요. 손목은 소중합니다.
개발자는 필요에 따라 수 많은 유틸리티 함수를 작성하게 된다.
가장 간단하게 전화번호 또는 이름을 숨김 처리하기 위한 함수부터 각종 컬렉션을 체크하기 위한 함수까지, 또는 비즈니스에 필요한 도메인 함수를 작성하게 된다.
이러한 대부분의 코드는 static method로 작성되는 것이 대부분이다.
예로 아래와 같이 작성된다.public class StringUtils { public static string HiddenText(string str, char hiddenChar, int startIdx, int length = 0) { if (str.xIsEmpty()) return string.Empty; var arr = str.ToArray(); for (int i = startIdx; i <= startIdx + length; i++) { if(arr[i].xIsEmpty()) continue; arr[i] = hiddenChar; } return new String(arr); } } public class Sample { public void Run() { var name = "John Wick"; var hiddenName = StringUtils.HiddenText(name, '*', 0); Console.WriteLine(hiddenName); } }
별로 특별하지 않은 코드이고 보기에도 문제 없어 보인다.
여기서 설명하고자 하는 것은 Run함수에 표현된 StringUtils이다.
우리는 함수를 작성하기 위해 먼저 StringUtils 클래스를 기입하고 HiddenText함수를 호출하게 된다.
즉, 개발자가 코드를 표현함에 있어 연속성이 떨어지게 된다.개발자는 StringUtils라는 클래스를 인식하고 있어야 하고 HiddenText도 인식하고 있어야 한다.
또한 인텔리센스의 기능을 활용하지 못하고 있다.
그렇다면 어떻게 변경할 수 있을까?
아래의 코드를 살펴보자.public static class StringUtils { public static string xHiddenText(this string str, char hiddenChar, int startIdx, int length = 0) { if (str.xIsEmpty()) return string.Empty; var arr = str.ToArray(); for (int i = startIdx; i <= startIdx + length; i++) { if(arr[i].xIsEmpty()) continue; arr[i] = hiddenChar; } return new String(arr); } } public class Sample { public void Run() { var name = "John Wick"; var hiddenName = name.xHiddenText('*', 0); Console.WriteLine(hiddenName); } }
변경된 부분은 아래와 같다.
1. StringUtils가 static 클래스가 되었다.
2. HiddenText의 첫 파라메터가 this가 되었다.
3. HiddenText 함수명이 xHiddenText가 되었다.그렇다면 왜 이렇게 변경되었을까?
실행 코드는 아래와 같이 변경되었다.
1. StringUtils.HiddenText함수가 제거되었다.
2. HiddenText 함수는 xHiddenText로 대체되었다.
3. name 변수에 바로 함수를 사용하고 있다.변경된 사항은 매우 중요하다.
이제 HiddenText를 사용하기 위해 StringUtils라는 클래스를 인식할 필요도, HiddenText함수를 인식할 필요도 없어졌다.
개발자는 인텔리센스의 도움으로 xHiddenText라는 함수를 사용할 수 있음을 직관적으로 알 수 있다.함수명, 파라메터명으로 개발자가 무엇을 해야하는지도 명확하다.
StringUtils.HiddenText(name, ‘*’, 0);
name.xHiddenText(name, ‘*’, 0);위 두가지 사용예는 누가 더 직관적인지 보여주고 있다.
확장클래스의 작성법에는 룰이 필요하다.
필자가 추천하는 룰은 아래와 같다.
1. 개발자가 키보드 입력을 위해 가장 편한 첫 글자를 확장 클래스의 확장 메서드 첫 명칭으로 하라.
(예로 필자는 ‘x’를 선택했다.)2. 개발자가 비즈니스에 사용되거나 서로 다른 논리 구조가 있을 때 그에 해당하는 첫 글자를 선택하라.
(예로 필자는 ‘x’에 이어 비즈니스에 사용되는 함수는 ‘v’를 사용한다.)3. 가급적 확장 메서드에 첫 글자만을 고유 글자로 표현하고, 절대로 세 글자를 넘지 마라.
위와 같이 룰을 정할 수 있다.
룰은 필요에 따라 선택할 수 있고 필요하다면 권장사항을 지키지 않을 수도 있다.
하지만 대부분 네이밍이 기본 확장 함수와 중복 될 수 있으므로 가급적 룰을 만들고 지키는 것이 중요하다.
위와 같이 작성한다면 수 많은 클래스의 static 메서드를 인식하지 않아도 개발자는 편하게 사용할 수 있고, 동시에 타이핑하는 재미도 느낄 수 있을 것이다.
(필요하다면 여기의 예제를 살펴 보자.)'프로그래밍' 카테고리의 다른 글
Movin'In 모바일이 포함된 임대 부동산 관리 플랫폼 (0) 2023.11.06 .Net HTTP 라이브러리 비교 (0) 2023.11.06 두번 개발하지 않는 방법 (0) 2023.11.02 C# 병렬 실행 탐구 (1) 2023.11.02 if else if else if else, no more (0) 2023.11.02