본문 바로가기
코스웨어/15년 스마트컨트롤러

20150616 - 2번- 강동조 델리게이트,람다식/

by 알 수 없는 사용자 2015. 6. 16.
728x90
반응형
C#

람다식
익명 메소드를 만드는 또 하나의 방법

람다식 선언 형식
매개_변수_목록 -> 식

익명의 처리를 위해서는 유일한 방법은 델리게이트이다 델리게이트의 뜻은 대리자이다
델리게이트의 코드는 조금 길수가 있습니다 이걸 람다식으로 정의하게되면 코드가 간결해지게 되며
굳이 델리게이트를 선언하지 않아도 된다는 장점이 있습니다

델리게이트란?


예) 출장을 나온 나는 사장님께 급히보고를 해야해서 회사에 전화를 걸었는데 비서가 전화를 받았습니다 나는 비서에게 사장님이 돌아오시면 제게 전화부탁드린다고 전해달라고 합니다 비서는 메모를 남기고 사장님이 저에게 전화를 겁니다 이 이야기는 내가 비서에게 했던 부탁을 영어로 Callback이라고 부르는데 이콜백은 프로그래밍에서도 사용됩니다 비서처럼 어떤일을 해줄 코드를두고 이코드가 실행할 세부 코드는 컴파일 시점이 아닌 실행 시점에 부여합니다



델리게이트는 왜 그리고 언제 사용할까요?
프로그래밍을 하다보면 값이 아닌 코드 자체를 매개 변수로 넘기고 싶으때가 많이 생깁니다 예를 들어 배열을 정렬하는 메소드를 만든다고 생각해보면 오름차순인지 내림차순인지 특별한 계산식을 거쳐서 나오는지 모릅니다 바로 이럴떄 델리게이트를 사용합니다 델리게이트는 메소드에 대한 참조이므로 비교 메소드를 참조할 데릴게이트를매개 변수로 받도록 정렬 메소드를 작성해놓으면 됩니다


람다식 선언 예
delegate int Calate(int a, int b)     //익명 메소드를 만들려면 델리게이트가 필요합니다

static void main(string[] args)
{
     Calculate calc = (int a, int b) => a + b     
//두개의 int 매개 변수 a, b를 받아 이둘을 더해 반환하는 익명 메소드를 람다식으로 만들어져 있습니다 

형식 유추: 람다식의 매개변수를 컴파일러가 유추해주는 기능

문 형식의 람다식의 선언 형식
(매개_변수_목록) =>
{
     문장1;
     문장2;
     문장3;
     ...
}

문 형식의 람다식 예제 코드입니다
식형식의 람다식은 반환 형식이 없는 무명함수를 만들수는 없습니다
하지만 문 형식의 람다식을 이용하면 위 예제처럼 만들수 있습니다 






C++

다중상속의 문제점

#include <iostream>
using namespace std;

class A
{
    protected:
        int a;
    public:
        A(int aa)
        {
            a = aa;
        }
};

class B: public A
{
    protected:
        int b;
    public:
        B(int aa, int ab) : A(aa)
    {
        b= ab;
    }
};

class C: public A
{
    protected:
        int c;
    public:
        C(int aa, int ac) :A(aa)
    {
        c=ac;
    }
};

class D : public B, public C
{
    protected:
        int d;
    public:
        D(int aa, int ab, int ac, int ad) : B(aa, ab), C(aa, ac)
    {
        d = ad;
    }
        void fd()
        {
            b=1;
            c=2;
            B:: a=3;    //여기서 문제 발생
        }
};

int main()
{
    D d(1,2,3,4);



    return 0;

} 



#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

class Date
{
    protected:
        int year;
        int month;
        int day;
    public:
        Date(int y, int m, int d)
        {
            year=y;
            month = m;
            day = d;
        }
        void OutDate()
        {
            printf("%d%d%d",year,month,day);
        }
};

class Product
{
    private:
        char Name[64];
        char Company[32];
        Date ValidTo;
        int Price;
    public:
        Product(char *aN, char *aC, int y,int m, int d,int aP) : ValidTo(y,m,d)
    {
        strcpy(Name,aN);
        strcpy(Company,aC);
        Price = aP;
    }
        void OutProduct()
        {
            printf("이름:%s\n",Name);
            printf("제조사:%s\n",Company);
            printf("유효기간:");
            ValidTo.OutDate();
            puts("");
            printf("가격:%d\n",Price);
        }
};

int main()
{
    Product S("새우깡","농심",2009,8,15,900);
    S.OutProduct();

    return 0;

} 

























728x90