switch문, 생성자 연습+예제
2023. 7. 21.
using System;

namespace LearnDotnet
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Write("구매 하고자 하는 아이템 이름을 입력하세요.  :  ");
            string input = Console.ReadLine();

            //if
            if (input == "장검")
            {
            }
            else if (input == "단검")
            {
            }
            else if (input == "활")
            {
            }
            else
            {
                Console.WriteLine("구매할수 없는 아이템 입니다.");
            }

            //switch
            switch (input)
            {

                case "장검":
                    break;

                case "단검":
                    break;

                case "활":
                    break;

                default:
                    Console.WriteLine("구매할수 없는 아이템 입니다.");
                    break;
            }
        }
    }
}

위에거를 enum 써보고싶어서 쓰다 만 코드..

 

using System;

namespace LearnDotnet
{
    using System;

    namespace LearnDotnet
    {

        internal class Program
        {
            enum eWeaponType
            {
                LongSword = 200,
                장검 = 100,
                ShortSword,
                단검 = 80,
                Bow,
                활 = 120
               
            }
            static void Main(string[] args)
            {
                Console.Write("구매하고자 하는 아이템 이름을 입력하세요: ");
                string input = Console.ReadLine();
                int gold = 500;
                //선택문 switch
                switch (input)
                {
                    case "장검":
                        //실행
                        eWeaponType weaponType = eWeaponType.장검;
                        int intWeaponType = Convert.ToInt32(eWeaponType.장검);
                        Console.WriteLine("{0}을 구매 했습니다. (-{1}골드)", weaponType,intWeaponType);
                        gold -= intWeaponType;
                        Console.WriteLine("소지골드 : {0}골드",gold);
                        break;
                    case "단검":
                        //실행
                        weaponType = eWeaponType.단검;
                        intWeaponType = Convert.ToInt32(eWeaponType.단검);
                        Console.WriteLine("{0}을 구매 했습니다. (-{1}골드)", weaponType, intWeaponType);
                        gold -= intWeaponType;
                        Console.WriteLine("소지골드 : {0}골드", gold);
                        break;
                    case "활":
                        //실행
                        weaponType = eWeaponType.활;
                        intWeaponType = Convert.ToInt32(eWeaponType.활);
                        Console.WriteLine("{0}을 구매 했습니다. (-{1}골드)", weaponType, intWeaponType);
                        gold -= intWeaponType;
                        Console.WriteLine("소지골드 : {0}골드", gold);
                        break;

                }


            }
        }
    }
}

static -> 실행될 때 가장 먼저 메모리에 올라간다.프로그램이 종료될때까지

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/static

 

static 한정자 - C# 참조

static(C# 참조) 아티클 04/07/2023 기여자 13명 피드백 이 문서의 내용 --> 이 페이지에서는 static 한정자 키워드를 다룹니다. static 키워드는 using static 지시문의 일부이기도 합니다. static 한정자를 사용

learn.microsoft.com

메서드 예제

using System;

namespace LearnDotnet
{
    using System;

    namespace LearnDotnet
    {

        internal class Program
        {
            
            static void Main(string[] args)
            {
                for (int i = 0; i < 3; i++)
                {
                    PrintSayHello();
                }
                //메서드: 메서드는 일련의 문을 포함하는 코드 블록입니다(기능)
                //0. 기능정의
                //1. 메서드 정의(class 내부에), 메서드 명은 반드시 첫글자 대문자
                //2. 메서드 사용 (호출)

                //기본형
                //"안녕하세요"를 출력하는 기능
                void PrintSayHello()
                {
                    Console.WriteLine("안녕하세요!");  //기능구현
                }


            }
        }
    }
}

메서드 작성법

  메서드: 메서드는 일련의 문을 포함하는 코드 블록
                0. 기능정의
                1. 메서드 정의(class 내부에), 메서드 명은 반드시 첫글자 대문자
                2. 메서드 사용 (호출)

 

 

클래스는 참조 형식이다.

https://www.youtube.com/watch?v=PBVEWcqggiQ&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=30 

new 연산자는 새 유형의 인스턴스를 만든다. 인스턴스:객체 -> 실체화

https://www.youtube.com/watch?v=S8oQU_FENLw&list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z&index=31 

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

namespace LearnDotnet
{
   public class Champion
    {
        //데이터 
        string name;

        //생성자 메서드 
        public Champion()
        {
            Console.WriteLine("챔피언이 생성되었습니다.");
        }

        //기능 : 춤을 춘다 
        public void Dance()
        {
            Console.WriteLine("댄스");
        }
    }
}

Champion.cs 챔피언 클래스

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

namespace LearnDotnet
{
    internal class App
    {
        //생성자 
        public App()
        {
            Console.WriteLine("App 생성자 호출됨");

            //챔피언을 생성
            Champion champion = new Champion();
            champion.Dance();
            Console.WriteLine(champion);
        }
    }
}

App.cs

  using System;

    namespace LearnDotnet
    {
     
        
        internal class Program
        {
            
            static void Main(string[] args)
            {

                new App();

            }
        }
    }

Program.cs

 

예제의 Program.cs는 모두 같다.

 

예2

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

namespace LearnDotnet
{
    internal class TerranCommandCenter
    {
        //열거형식 정의
        enum eState
        {
            Land,
            Liftoff
        }

        //멤버 변수(데이터)
        //지역변수로 선언하면 메서드가 끝났을 때 사라져 버리므로 멤버변수에 선언
        int hp;
        int maxHp = 1500;
        eState state;//상태


        //생성자 메서드
        public TerranCommandCenter() 
        {
            state = eState.Land;//생성되면 land상태
            hp = maxHp; //생성시 hp는 maxHp
            Console.WriteLine("커맨드 센터가 생성되었습니다.({0}/{1})",hp,maxHp);
            Console.WriteLine("state: {0}\n",state);

        }
        //메서드(기능)
        public void LiftOff()
        {
            if (state == eState.Land)
            {
                Console.WriteLine("올라갑니다.");
                state = eState.Liftoff;//상태가 liftoff됨.
            }
         }


        public void Land()
        {
            if (state == eState.Liftoff)
            {
                Console.WriteLine("내려갑니다.");
                state = eState.Land;//상태가 land됨.
            }
        }

    }
}

TerranCommandCenter.cs

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

namespace LearnDotnet
{
    internal class App
    {
        //생성자 
        public App()
        {
            TerranCommandCenter terranCommandCenter = new TerranCommandCenter();
            //커맨드센터 생성
            terranCommandCenter.LiftOff();
            //.으로 해당 인스턴스의 멤버에 접근한다.
            terranCommandCenter.LiftOff();
            terranCommandCenter.Land();
            terranCommandCenter.Land();
            terranCommandCenter.Land();
        }
    }
}

App.cs

 

 

예3

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

namespace LearnDotnet
{
    internal class SCV
    {
        //멤버 변수(데이터)
        int hp;
        int maxHp = 60;
        int damage;
        int armor;

        //생성자 메서드
        public SCV()
        {
            hp = maxHp;
            damage = 6;
            armor = 0;
            Console.WriteLine("SCV가 생성되었습니다.");
            Console.WriteLine("체력: {0}/{1}", hp, maxHp);
            Console.WriteLine("공격력: {0}", damage);
            Console.WriteLine("방어력: {0}\n", armor);
        }

        public void move()
        {
            Console.WriteLine("SCV가 이동합니다.");
        }

    }
}

SCV.cs

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

namespace LearnDotnet
{
    internal class App
    {
        //생성자 
        public App()
        {
            SCV SCV = new SCV();
            SCV.move();
        }
    }
}

App.cs

 

예4.

 

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

namespace LearnDotnet
{
    internal class SiegeTank
    {
        //멤버 변수(데이터)
        int hp = 150;
        int defaultDamage = 0;
        int damage1 = 30;
        int damage2 = 70;
        bool moveable = true;

        //생성자 메서드
        public SiegeTank()
        {

            Console.WriteLine("시즈탱크가 생성되었습니다.");
            Console.WriteLine("현재 탱크 모드 입니다.\n");

        }

        //기능
        public void SiegeMode()
        {
            defaultDamage = damage2;
            moveable = false;
            Console.WriteLine("모드를 변경했습니다. TankMode > SiegeMode");
            Console.WriteLine("공격력이 {0} > {1} 변경되었습니다.",damage1,defaultDamage);
            Console.WriteLine("현재 SiegeMode 입니다.\n");
           
         
        }
        public void TankMode()
        {
            defaultDamage = damage1;
            moveable = true;
            Console.WriteLine("모드를 변경했습니다. SiegeMode > TankMode");
            Console.WriteLine("공격력이 {0} > {1} 변경되었습니다.", damage2, defaultDamage);
            Console.WriteLine("현재 TankMode 입니다.\n");

        }

        public void move()
        {
            if(moveable == true)
            {
                Console.WriteLine("이동했습니다.\n");
            }
            else
            {
                Console.WriteLine("SiegeMode에서는 이동할 수 없습니다.\n");
            }
        }
    }
}

SiegeTank.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    internal class App
    {
        //생성자 
        public App()
        {
            SiegeTank siegeTank = new SiegeTank();
            siegeTank.SiegeMode();
            siegeTank.move();
            siegeTank.TankMode();
            siegeTank.move();
        }
    }
}

App.cs

myoskin