내일배움캠프 6일차 TIL : C# 복기

woollim·2024년 9월 26일
0

내일배움캠프TIL

목록 보기
5/20
post-thumbnail

■ 학습 개요

○ 오늘 계획

  1. 지금까지 공부 했던 C# 복기하기
  2. 헛갈리는 부분 위주로 실습
  3. 캡슐화 해보기

○ 학습 회고

  1. 팀원분들과 오전에 Visual Studio 단축키에 대해 대화를 나누다가. 편리한 기능을 많이 알게 되었다. 단축키를 활용하여 코딩 시간을 단축 시킬 수 있을거 같다.

  2. C# 공부를 시작하며 벨로그에 학습 내용들을 정리해두어서 복기하기 쉬웠다.
    반복적으로 복기 하다보면 같은 내용이어도 복기 할때마다 새로운 지식을 얻는 것 같다. 이전에는 제대로 이해하지 못하고 넘어갔던 부분을 다시 공부하게 되서 그런듯 하다.

  3. 어려웠던 인터페이스, 상속, 클래스 객체화에 대한 개념은 어느정도 완료되었다.
    아직 4주차 강의에 있는 델리게이트, 람다, out, ref 등 고급 문법은 활용 할 수 있는 정도로 습득하진 못했지만, 대략적인 기능 이해는 완료 했다.

  4. 어제 실습해보고자 했던 캡슐화 해보기를 개인 과제였던 TextRPG의 유저 클래스를 수정해서 구현해보았다. 구현 중 의문사항이 생겼는데 이건 내일 튜터님께 여쭤볼 계획이다.

○ TIL 작성계획

  1. 본인이 중요하게👍 생각하거나 헛갈리는 부분😥을 집중 작성할 계획


■ 학습 내용 정리

○ 유용한 비주얼 스튜디오 단축키

  • Ctrl Shift A : 새 항목 추가
  • Ctrl K E : 코드 전체 정렬
  • Ctrl R R : 선택 단어 전체 동시 변경
  • Alt Shift 드래그 : 선택 구역 동시 작성 및 수정

○ 캡슐화 진행

  • 기존 public 프로퍼티만 있는 상태에서, private 필드를 따로 만든 후
    프로퍼티가 get은 public으로 외부에서 접근 가능하지만, 값지정 set은 private로 해서 내부에서만 접근 가능하게 변경
  • 추후 유저가 직접 값을 변경하는 이름, 직업, 방어구 수치, 무기 수치 등의 속성들은 input 메소드를 만들어 수정 할 수있도록 변경
    {
        // ------------------ 캐릭터 인터페이스 공통 ------------------
        string _name; // 이름
        string _tribe; // 종족
        int _health; // HP
        int _attackDamage; // 공격력
        bool _isDead; // 생존여부

        // 캐릭터 인터페이스 필드의 프로퍼티들
        public String Name { get { return _name; } private set { _name = value; } }
        public String Tribe { get { return _tribe; } private set { _tribe = value; } }

        public int Health { get { return _health; } private set { _health = value; } }
        public int AttackDamage { get { return _attackDamage; } private set { _attackDamage = value; } }
        public bool IsDead { get { return _isDead; } private set { _isDead = value; } }

        public void TakeDamage(int damage)
        {

        }

        // ------------------ 유저 인터페이스 공통 ------------------
        string _userClass; // 직업
        int _level; // 레벨
        int _defensPower; // 방어력
        int _gold; // 골드
        int _clearCount; // 던전 클리어 횟수
        int _equipArmorStatusNum; // 장착 갑옷 상태수치
        int _equipWeaponStatusNum; // 장착 갑옥 상태수치
        // 유저 인터페이스 필드의 프로퍼티들
        public string UserClass { get { return _userClass; } private set { _userClass = value; } } // 직업
        public int Level { get { return _level; } private set { _level = value; } } // 레벨
        public int DefensPower { get { return _defensPower; } private set { _defensPower = value; } } // 방어력
        public int Gold { get { return _gold; } private set { _gold = value; } } // 골드
        public int ClearCount { get { return _clearCount; } private set { _clearCount = value; } } // 던전 클리어 횟수
        public int EquipArmorStatusNum { get { return _equipArmorStatusNum; } private set { _equipArmorStatusNum = value; } } // 장착 갑옷 상태수치
        public int EquipWeaponStatusNum { get { return _equipWeaponStatusNum; } private set { _equipWeaponStatusNum = value; } } // 장착 갑옷 상태수치

        // ------------------ 유저 고유 ------------------
        //public event AttackHandle OnAttack; // 공격 델리게이트 트리거
        public void UserAttack(int Attack) // 유저가 공격할때
        {
            //OnAttack?.Invoke(Attack); // 공격 델리게이트 트리거 - 몬스터의 TakeDamage와 묶임
        }

        // 유저 이름 입력 메소드
        public void InputName(string inputName)
        {
            this.Name = inputName;
        }

        // 유저 클래스(직업) 입력 메소드
        public void InputUserClass(string inputUserClass)
        {
            this.UserClass = inputUserClass;
        }

        // 유저 방어구 방어력 입력 메소드
        public void InputEquipArmorStatusNum(int equipArmorStatusNum)
        {
            this.EquipArmorStatusNum = equipArmorStatusNum;
        }

        // 유저 무기 공격력 입력 메소드
        public void InputEquipWeaponStatusNum(int equipWeaponStatusNum)
        {
            this.EquipWeaponStatusNum = equipWeaponStatusNum;
        }


        // 상태창 메소드
        public void State(User user)
        {
            bool exit = false;
            while (!exit)
            {
                Console.Clear();

                Console.WriteLine("[상태보기]");
                Console.WriteLine("캐릭터의 정보가 표시됩니다.");
                Console.WriteLine();
                Console.WriteLine("레  벨 : {0} Lv", user.Level);
                Console.WriteLine("직  업 : {0}", user.UserClass);
                Console.WriteLine("방어력 : {0} (+ {1})", user.DefensPower, user.EquipArmorStatusNum);
                Console.WriteLine("공격력 : {0} (+ {1})", user.AttackDamage, user.EquipWeaponStatusNum);
                Console.WriteLine("체  력 : {0}", user.Health);
                Console.WriteLine("골  드 : {0} G", user.Gold);
                Console.WriteLine();
                Console.WriteLine("0. 나가기");
                Console.WriteLine();
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                Console.Write(">> ");

                int select = InputCheck.Check(0, 0);

                switch (select)
                {
                    case 0:
                        exit = true;
                        break;
                    default:
                        continue;
                }
            }
        }

        public User()
        {
            this.Name = "홍길동";
            this.Tribe = "인간";
            this.Health = 100;
            this.AttackDamage = 10;
            this.IsDead = false;

            this.UserClass = "없음";
            this.Level = 1;
            this.DefensPower = 10;
            this.Gold = 1500;
            this.ClearCount = 0;

            this.EquipArmorStatusNum = 0; // 장착 갑옷 상태수치
            this.EquipWeaponStatusNum = 0; // 장착 갑옷 상태수치
        }
    }
  • 인터페이스에서도 프로퍼티 내부에 get만 존재하도록 수정
interface ICharacter
{
    public String Name { get; } // 이름
    public String Tribe { get; } // 종족 
    public int Health { get; } // HP
    public int AttackDamage { get; } // 공격력
    public bool IsDead { get; } // 생존여부
    public void TakeDamage(int damage); // HP 차감 함수
}
internal interface IUser
{
    public string UserClass { get; } // 직업
    public int Level { get; } // 레벨
    public int DefensPower { get; } // 방어력
    public int Gold { get; } // 골드
    public int ClearCount { get; } // 던전 클리어 횟수
    public int EquipArmorStatusNum { get; } // 장착 갑옷 상태수치
    public int EquipWeaponStatusNum { get; } // 장착 갑옷 상태수치
}

0개의 댓글