String 클래스의 경우 sealed 선언이 되어 있어 상속이 불가능하다.


selaed 키워드에 대해선 아래 링크 참고하자.


- C# 상속금지 키워드 sealed 키워드 : http://hijuworld.tistory.com/44


그래서 String 클래스를 상속받아 새로운 메서드를 추가하여 사용하고 싶어도 불가능하다.

아래 처럼 에러가 발생한다.




하지만 C# 3.0에서 확장 메서드 기능을 사용하면 String에 메서드를 추가한 것 같이 사용이 가능하다.


아래 코드를 보자.


1
2
3
4
5
6
7
8
9
10
using System.Text.RegularExpressions;
 
static class PlusString
{
    public static bool IsValidPhone(this string input)
    {
        Regex regex = new Regex(@"^01[01678]-[0-9]{4}-[0-9]{4}$");
        return regex.IsMatch(input);
    }
}
cs




static으로 선언한 class에 static 변수를 선언하였다. 매개변수를 this string 을 받도록 하였다.

this는 컴파일러에게 이 메서드가 string타입을 확장한 메서드라는 것을 알려주는 역활을 한다. 


그리고 메서드의 내용은 정규표현식을 사용하여 input이 전화번호인지 검사하는 코드이다.
정규표현식을 검사하는 Regex class 에 대해서는 아래 링크를 참고하자.

- C# 정규식을 사용하여 패턴 매칭(Regex, IsMatch) : http://hijuworld.tistory.com/22



이제 해당 확장메서드를 사용해보자.


아래코드는 그 예시이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Program
{        
    static void Main(string[] args)
    {
        String test = "010-9559-4444";
        if (test.IsValidPhone())
            Console.WriteLine("일치");
        else
            Console.WriteLine("불일치");
 
        test = "012-9559-4444";
        if (test.IsValidPhone())
            Console.WriteLine("일치");
        else
            Console.WriteLine("불일치");
    }
}
cs


실제로 String 클래스의 메서드처럼 사용하면 된다.



참고자료 : 크로스 플랫폼 개발을 위한 C# 7과 닷넷 코어 2.0 ( 에어콘 출판사) 7장



Posted by 꿈만은공돌
,