20-0330 확장 메서드(Extension Method)

최용국·2020년 3월 30일
0

관용구

목록 보기
4/9

20-0330 확장 메서드

가끔은 우리가 .Net에 이미 정의된 클래스에 함수를 추가하고 싶을 때가 있다. 예를 들어 IEnumerable을 상속 받은 List나 혹은 Queue에 내가 정의한 함수를 멤버 엑세스 연산자로 접근해 쓰고싶을 때를 얘기하는 것 이다.

다음 예제는 의미가 크게 없고 확장 메서드를 사용하는 방법에만 집중하면 된다.

  • 정적 클래스여야 한다. (static class)
  • 정적 클래스내에 정적 함수여야 한다.
  • 멤버 엑세스 연산자로 호출할 멤버를 this 키워드와 함께 첫번째 매개변수로 지정한다.
  • 사용자로부터 받는 매개변수는 두번째 부터 지정한다.

string 클래스에서 제공하는 Compare의 세번째 매개변수를 true로 주면 대소문자를 구분하지 않고 비교하고 같으면 1을 반환한다. 이를 확장메서드를 이용해 반환 값을 boolean으로 만들어본다.

class Person

public class Person
{
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public string Name { get; private set; }
    public int Age { get; private set; }

    public override string ToString()
    {
        return $"이름: {Name} 나이: {Age}";
    }
}

class GlobalExtension

public static class GlobalExtension
{
    public static Person GetPerson(this IEnumerable<Person> people, string name)
    {
        foreach(var person in people)
        {
            if (person.Name == name)
                return person;
        }

        return null;
    }

    public static bool IgnoreCaseCompare(this string comA, string comB) => string.Compare(comA, comB, true) == 0;
}

Program

class Program
{
    static void Main(string[] args)
    {
        List<Person> people = new List<Person>()
        {
            new Person("최용국", 28),
            new Person("이은혜", 31),
            new Person("안광필", 35),
            new Person("이정선", 29)
        };

        Console.WriteLine(people.GetPerson("최용국"));
        
        Console.WriteLine("ABCD".IgnoreCaseCompare("abcd"));

        Console.ReadLine();
    }
}

결과

profile
코딩합시다.

0개의 댓글