상세 컨텐츠

본문 제목

0924 TIL - Re: C#으로 Text RPG 만들기 3

스파르타 코딩캠프/'24 Today I Learned

by lucar 2024. 9. 24. 20:03

본문

시작 전에 간단하게 공부한 내용만 집고 넘어가자

 

delegate 델리게이트

다른 프로그래밍 언어에서는 함수 포인터라는 용어를 사용하기도 하는데

변수명으로 메소드를 등록하여 사용할 수 있게 지원해준다.

 

예를 들면

int Calc(int x, int y)
{
    return x + y;
}

delegate int Plus(int x, int y);


class Program()
{
    static void main()
    {
        Plus p = Calc;

        int result = p(3, 5);
    }
}

delegate int Plus의 선언을 통해 매개변수를 만들어주고

메인 내부에서 Plus p = Calc 를 입력해 p라는 변수가 Calc라는 메소드를 등록하여 대신 사용할 수 있게 되었다.

 

Lambda 람다

람다를 사용하면 메서드의 이름 없이 익명 메서드를 생성 가능하다.

람다는 델리게이트를 사용하여 변수에 할당하거나 메서드의 매개변수로 전달이 가능하다.

using System;

delegate void Dele(string message); //먼저 델리게이트를 선언해준다.

internal class Program
{
    static void Main(string[] args)
    {
        Dele D = (message) => //람다식을 통해 델리게이트에 할당해준다.
        {
            Console.WriteLine(message);
        };

        D("abc");
    }
}

보면 새로 정의된 Dele라는 델리게이트 함수는 직접적으로 다른 메소드를 등록한 것이 아닌

Dele D = (message) => {};의 형식으로 작성된 것을 볼 수 있다.

(델리게이트함수) = (변수) => {실행내용};

이것을 람다라고 부르며 이름이 없는 메소드의 형식이다.

message라는 매개변수를 람다식을 통해 델리게이트 메소드에 등록하고 이를 실행한 것이다.

 

아무튼 강의를 좀 더 들었더니 생각난 방법이 좀 있다

C#에서 쿼리문을 지원해서 잘만 하면 인벤토리와 장착품간의 관계를 만들어서

쿼리문으로 장착 여부에 접근할 수 있을 것 같다는 생각이 들었다.

 

우선 내 생각은 이렇다

 

Table이라는 클래스를 만들고

내부에 두 개의 아이템 리스트를 만든다.

하나는 인벤토리 하나는 장착아이템으로 테이블을 만든 뒤

두 리스트를 하나의 리스트로 묶어서 관리하면

인벤토리를 보여줄 때 장착 아이템 밑에 인벤토리 아이템이 표시되는 방식으로 표시할 수 있을것이고

장착 아이템은 모두 E 를 붙이고 인벤토리 아이템은 별도로 표시되게끔 되지 않을까?

 

구현해보자.

 

구현하다가 든 생각인데 그냥 이럴것 없이 두 번 출력하면 되는 것 아닌가...

그냥 두 번 출력하기로 결정

중요한건 똑같은 아이템이 두번 출력되면 안된다.

 

왜냐면 지금 두 번 출력 중이라서..

 

Inventory에서 Equipments 리스트로 완전히 넘겨주고 해제한다면 다시 Inventory로 넘겨주는 방식을 사용해야한다.

결과는?

 

대실패 마음이 꺾인다...

 

본가 거주 중이라 부모님이 외식하자고 해서 먼저 들어가겠습니다 TTE

관련글 더보기