c# 공부 중인데 확장 메서드라는 부분은 자바에서 보지 못한 부분이라 정리해봅니다.
확장 메서드란?
- 클래스의 외부에서 클래스의 메서드처럼 사용할 수 있는 새로운 메서드를 만들 수 있는 기능
- 즉 상속할 수 없는 클래스의 기능을 확장할 수 있음
- 특징
- 기존 코드 수정 없이 기능 확장
- 정적 클래스에서 정의
- 내부적으로 정적 메서드
- 내부적으로는 정적 메서드이지만, 사용하는 방식은 인스턴스 메서드처럼 사용할 수 있음
사용법
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# 헤드 퍼스트