• Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ram_1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

 

  • App
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ram_1
{
    public class App
    {
        //생성자 
        public App()
        {
            Console.WriteLine("App 생성자 실행");

            SiegeTank tank = new SiegeTank(SiegeTank.Mode.Tank); //모드를 정의하려면 초기화해야 함

            tank.onChangeMode = (beforeMode, afterMode) => {
                Console.WriteLine($"{beforeMode} -> {afterMode}");
            };

            tank.ChangeMode(SiegeTank.Mode.Siege); // App에서 매서드가 매개 변수를 미리 받아 구동하는 형태가 익숙하지 않다. 어딘가에서 테이터를 받아오는 건데.. 실행은 유저의 입력부터 시작이라고 생각는데 익숙하기 때문임, 프로그램은 유저가 아니라 데이터랑 논다..
        }
    }
}

 

  • SiegeTank
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ram_1
{

    public class SiegeTank
    {
        // 모드 속성 정의
        public enum Mode
        {
            Tank,
            Siege
        }

        //맴버 변수
        public Action<Mode, Mode> onChangeMode;
        public Mode mode;

        //생성자
        public SiegeTank(Mode mode)
        {
            Console.WriteLine("SiegeTank 생성자 실행");
            this.mode = mode;
        }

        public void ChangeMode(Mode mode)
        {
            Mode beforeMode = this.mode; // 비포애프터 모드라는 매개 변수로 선언되었으니까 쓸 수 있음
            this.mode = mode; // 받은 시즈 모드를 지금 모드에 넣음

            Console.WriteLine("모드 변신 중...");
            Console.WriteLine("모드 변신 중...");
            Console.WriteLine("모드 변신 중...");
            
            onChangeMode(beforeMode,this.mode); // 전 모드와 지금 모드 출력
        }
    }
}

+ Recent posts