글
확장메소드에 대해 써볼께요.
MSDN에는 이렇게 나와있다고 하네요
Javascript에서도 이런 기능이 있죠.(Prototype)
C#에서는 IEnumerable<T> interface가 구현된 모든 타입에서 구현이 가능합니다.
간단한 소스를 봐보면요
라인1 부터 7 까지가 확장메서드 입니다.
간단하게 string값의 길이(length)를 반환하는 메서드를 작성했어요(출력값은 17 이에요)
MyExtentions 라는 정적 클래스를 선언하고 그 안에 wordCount라는 메서드를 선언했어요.
인수는 string 객체이며 this 키워드를 붙입니다.
여기서 this는 호출객체를 의미하는 참조자가 아니라 뒤의 클래스에 대한 확장메서드임을 의미하는
지정자에요. wordCount가 string의 확장메서드라는 의미죠.
코드에서는 인수를 한개만 받았지만 실제로 인수는 제한이 없습니다.
두번째 인수부터는 실제 연산에 필요한 값들을 받으면 되는거죠.
(아무 의미가 없지만. --)string의 length에 특정 숫자를 붙인 int를 받는 메서드를 작성하고 싶으면
MSDN에는 이렇게 나와있다고 하네요
확장 메서드는 형식으 ㅣ인스턴스 메서드인 것처럼 호출할수 있도록 형식과 연결된 수 있는
정적 메서드 입니다.
이 기능을 사용하면 실제로 기존 형식을 수정하지 않고도 기존 형ㅅ익에 새 메서드를 추가할수 있습니다.
정적 메서드 입니다.
이 기능을 사용하면 실제로 기존 형식을 수정하지 않고도 기존 형ㅅ익에 새 메서드를 추가할수 있습니다.
Javascript에서도 이런 기능이 있죠.(Prototype)
C#에서는 IEnumerable<T> interface가 구현된 모든 타입에서 구현이 가능합니다.
간단한 소스를 봐보면요
public static class MyExtensions { public static int wordCount(this string str) { return str.Length; } } class Program { static void Main(string[] args) { string s = "Extension Methods"; Console.WriteLine(s.wordCount().ToString()); } }
확장메서드의 가장 큰 장점(?) 은 원래 부터 정의되어 있는 메서드 처럼 사용할수 있다는거죠.
실제로 String에는 wordCount() 라는 메서드가 없잖아요.
근데 그냥 . 찍고 wordCount() 해주면 새로 정의한 메서드가 호출되는거죠.
(사용자가 사용하기가 참 편하겠죠)
차이가 있다면 인텔리센스에서 메서드표시 옆에 화살표가 표시되는것과
이름옆에 (확장)이라고 표시되는거죠.
라인1 부터 7 까지가 확장메서드 입니다.
간단하게 string값의 길이(length)를 반환하는 메서드를 작성했어요(출력값은 17 이에요)
MyExtentions 라는 정적 클래스를 선언하고 그 안에 wordCount라는 메서드를 선언했어요.
인수는 string 객체이며 this 키워드를 붙입니다.
여기서 this는 호출객체를 의미하는 참조자가 아니라 뒤의 클래스에 대한 확장메서드임을 의미하는
지정자에요. wordCount가 string의 확장메서드라는 의미죠.
코드에서는 인수를 한개만 받았지만 실제로 인수는 제한이 없습니다.
두번째 인수부터는 실제 연산에 필요한 값들을 받으면 되는거죠.
(아무 의미가 없지만. --)string의 length에 특정 숫자를 붙인 int를 받는 메서드를 작성하고 싶으면
public static class MyExtensions { public static int wordCount(this string str, int add) { return str.Length+add; } } class Program { static void Main(string[] args) { string s = "Extension Methods"; Console.WriteLine(s.wordCount(5).ToString()); } }
이렇게 해주면 되죠.(출력값은 17+5 해서 22가 나오겠죠?)
확장메서드는 인스턴스 메서드처럼 사용되지만 소속은 분명히 클래스 외부입니다.
그러므로(당연히) 확장하는 클래스의 숨겨진 멤버들에는 접근을 할수가 없어요.
그래서 확장 메서드로 클래스를 확장한다고 캡슐화를 위한바는것도 아니고.
보안상으로도 별 문제가 없다고 하네요.
RECENT COMMENT