공부/c#

C#의 확장 메서드

today is ? 2024. 11. 25. 01:17
c# 공부 중인데 확장 메서드라는 부분은 자바에서 보지 못한 부분이라 정리해봅니다.

확장 메서드란?

  • 클래스의 외부에서 클래스의 메서드처럼 사용할 수 있는 새로운 메서드를 만들 수 있는 기능
    • 즉 상속할 수 없는 클래스의 기능을 확장할 수 있음
  • 특징
    1. 기존 코드 수정 없이 기능 확장
    2. 정적 클래스에서 정의
    3. 내부적으로 정적 메서드
      • 내부적으로는 정적 메서드이지만, 사용하는 방식은 인스턴스 메서드처럼 사용할 수 있음

사용법

class Person
{
    public string name;
    public Person(string name)
    {
        this.name = name;
    }
}

class Print
{
    public static string printPerson(this Person p) {
        return "이름 : " + p.name;
    }
}

static void Main(string[] args) { 
    Person person = new Person("Suyeon");
    person.printPerson();
}

 

언제 사용하면 좋을까?

  • 이름 그대로 어느 한 클래스의 기능을 확장해주는 용도로 사용하는 것이 가장 알맞음
    • 다른 라이브러리/어셈블리에 있는 메서드에 기능을 추가하고 싶을 때
    • 인터페이스에 일관적인 기능을 제공하고 싶을 때
    • 메서드 체이닝을 사용하고 싶을 때
  • LINQ는 확장 메서드를 기반으로 되어 있음(위에 용도 세 가지를 만족).

왜 사용하는 것일까?

  • 코드의 재사용성과 간결성
    • 특정 기능을 여러 클래스에 적용할 수 있으며, 이 기능을 일관되게 사용할 수 있음
    • 이를 통해 코드를 간결하게 유지하고, 반복적인 코드를 줄일 수 있음
  • 외부 라이브러리나 기존 클래스를 수정하지 않고 기능 확장
    • 기능을 손쉽게 확장할 수 있음
    • 특히 외부 라이브러리를 사용할 때, 라이브러리 코드를 직접 수정하지 않고 추가적인 기능을 구현할 수 있음
  • LINQ와 같은 기능 구현
  • 가독성 향상
    • 클래스나 데이터 타입에 특화된 메서드를 인스턴스 메서드처럼 사용할 수 있기 때문에

사용 제약

  • 정적 클래스에서만 정의 가능
    • 클래스 내부에서 this 키워드를 사용하며 확장할 대상을 지정해야 함
  • 클래스의 인스턴스 메서드와 충돌 가능
    • 클래스의 인스턴스 메서드와 이름이 동일한 경우, 클래스의 인스턴스 메서드가 우선적으로 호출됨
    • 즉, 인스턴스 메서드가 동일한 시그니처를 가지면 확장 메서드는 호출되지 않음
  • 비공개 멤버에 접근 불가
    • 해당 클래스의 공개 멤버에만 접근할 수 있음
    • 클래스 내부에 비공개 멤버에는 접근할 수 없음

참고

https://tearsinrain.tistory.com/14

 

C#의 확장 메서드는 언제 사용하면 좋을까?

확장 메서드가 뭔가요? 확장 메서드는 C#의 기능으로, 어떤 클래스에 외부에서 메서드를 정의해서 추가하는 것이다. 확장 메서드는 다음과 같이 정의된다. SomeClass someClass = new SomeClass(); someClass.Ex

tearsinrain.tistory.com

https://blockdmask.tistory.com/604

 

[C#] 확장 메서드 (Extension Method) 설명과 예제

안녕하세요. BlockDMask입니다. 오늘은 C#의 신기한 기능 중에 하나인 확장 메서드 기능에 대해서 알아보려고 합니다. 1. 확장 메서드란? 2. C# 확장 메서드 예제 1. C# Extendion Method? 1-1) 확장 메서드 설

blockdmask.tistory.com

https://unity-programming-study.tistory.com/46

 

[C#] 확장 메서드(Extension Methods)

C#에서 확장 메서드(Extension Method)는 기존의 클래스나 구조체를 변경하지 않고, 새로운 메서드를 추가할 수 있는 기능입니다. 이 기능을 통해 기존 코드에 손을 대지 않고도 클래스의 동작을 확장

unity-programming-study.tistory.com

c# 헤드 퍼스트