콘텐츠로 건너뛰기
Home » 무명 형식, 무명 메소드

무명 형식, 무명 메소드

  • by
무명 형식, 무명 메소드

무명 형식 (Anonymous Type)

변수 형식(타입)에는 잘 알다시피 int, float, double, string, class … 등등이 있으며, 우리는 이 형식 이름으로 변수를 선언해서 사용한다.

int A;
float B;
string C;
class D;

그런데 C#에는 독특하게 이름이 없는 형식(타입)이 존재합니다.

이를 무명형식 (Anonymous Type)이라고 합니다.

무명형식은 임시 변수가 필요할때 아주 유용합니다.

(임시 변수 : 임시로 생성해서 사용후, 재사용되지 않는 변수)

선언하는 방법은 다음과 같다.

var temp = new { Age = 40, Name = "TAEK" };
Console.WriteLine("{0},{1}", temp.Age, temp.Name);

무명형식은 반드시 선언과 함께 new 키워드로 인스턴스를 생성해주어야 하며, 생성된 인스턴스는 읽기 전용이기 때문에 값 변경이 불가능합니다.

그럼 간단한 예제를 작성해 봅시다.

class MainApp {
    static void Main(string[] args) {
        var temp = new {
            Age = 40,
            Name = "TAEK"
        };
        Console.WriteLine("{0},{1}", temp.Age, temp.Name);
        var tempArr = new {
            Int = new int[]{
                1,
                2,
                3,
                4,
                5
            },
            Float = new float[]{
                0.1 f,
                0.2 f,
                0.3 f,
                0.4 f,
                0.5 f
            }
        };
        foreach(var element in tempArr.Int) {
            console.Write("{0} ", element); // 1,2,3,4,5
        }
        console.WriteLine();
        foreach(var element in tempArr.Float) {
            console.Write("{0} ", element); // 0.1,0.2,0.3,0.4,0.5
        }
        console.WriteLine();
    }
}

무명 메소드 (Anonymous Method)

모든 메소드는 이름을 가진다.

메소드가 매개변수나 반환값은 없을수 잇지만 이름이 없을 수는 없다.

당연한 말이지만 이름이 잇어야 그 메소드를 호출할 수 있기 때문이다.

하지만 C#은 이름이 없는 무명 메소드를 제공한다.

(무명 메소드는 델리게이트와 함께 사용되기 때문에, 델리게이트를 공부하길 바랍니다.)

무명 메소드는 이름이 없기 때문에 메소드를 호출하기 위해서 델리게이트 변수가 필요합니다.

즉 델리게이트 변수를 선언하고, 그 변수로 무명 메소드를 참조하게 하는 것이다.

(델리게이트와 무명 메소드는 당연히 같은 형식이어야 한다.)

// 델리게이트 타입 선언
delegate int MyDelegate(int a, int b);
public static void main() { // 델리게이트 변수 선언
    MyDelegate add;
    // 무명 메소드 참조
    add = delegate(int a, int b) {
        return a + b;
    };
    Console.WriteLine(add(11, 22));
}

델리게이트로 무명메소드를 참조하면 이제 함수내에서 얼마든지 호출해서 쓸수 있다.

무명 메소드는 위와 같이 간단한 연산의 메소드를 임시적으로 써야 할때나 델리게이트를 다른 함수에 넘겨주어 콜백으로 사용할 때에도 유용합니다.

댓글 남기기