스파르타 Unity 1기

내일배움캠프 9일차 TIL - TextRPG 만들기 1

정주찬 2023. 8. 18. 20:54

오늘의 학습 키워드

ToString("D2"), string.PadLeft(int num, char character), 인터페이스

 

공부한 내용

문자열 공백 0출력

저번에 배웠던 ToString("N2")는 소숫점을 나타낸다면 ToString("D2")를 하면 공백이 0으로 채워진다는 것을 배웠다.

void ShowState()
{
    string input = null;
    while (input != "0")
    {
        Console.Write
        (
            "상태 보기\n" +
            "캐릭터의 정보가 표시됩니다\n\n" +
            $"Lv. {character.Level.ToString("D2")}\n" +
            $"Chad ( {character.Name} )\n" +
            $"공격력 : {character.Attack}\n" +
            $"방어력 : {character.Defense}\n" +
            $"체력 : {character.Health}\n" +
            $"Gold : {character.Gold} G\n\n" +
            "0. 나가기\n\n" +
            "원하시는 행동을 입력해주세요.\n" +
            ">> "
        );

        input = Console.ReadLine();
    }

    Console.WriteLine();
}

아이템 인터페이스

인터페이스에 관해 궁금한 점이 있었는데 어떨 때 인터페이스를 사용하는지 궁금했다.

검색도 해보고 고민을 해봤지만 이건 내 영역을 넘어선 것 같아서 튜터님께 언제 사용하면 좋을지에 대해 질문을 드렸다.

인터페이스 사용과 관련하여 다음 내용을 참고하면 좋다.

1. 인터페이스는 공통적인 행위를 묶을 때 사용하면 좋다.

2. 로직이 조금이라도 들어간다면 클래스로 빼는 것이 덜 복잡할 수 있다.(인터페이스 안에서는 구현이 불가능하므로)

3. 최소한의 단위로 만들어야지 코드가 보기 좋다.

interface IItem
{
    void Equip(bool isEquip);
}

보기 안 좋은 코드일 수 있지만 일단 구현해보는 것으로 하고 나중에 리팩토링을 해봐야겠다고 생각했다.

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

namespace TextRPG_Single
{
    class Item : IItem
    {
        public enum ItemType
        {
            Weapon,
            Armor,
        }

        public struct ItemInfo
        {
            public ItemType Type { get; set; }
            public string Name { get; set; }
            public int AttackModifier { get; set; }
            public int DefenseModifier { get; set; }
            public bool IsEquiped { get; set; }
        }

        public ItemInfo Info = new ItemInfo();
        

        protected Item(ItemType type, string name, int attack, int defense, bool isEquiped)
        {
            Info.Type = type;
            Info.Name = name;
            Info.AttackModifier = attack;
            Info.DefenseModifier = defense;
            Info.IsEquiped = isEquiped;
        }

        public void Equip(bool isEquip)
        {
            Info.IsEquiped = isEquip;
        }
    }
}

 

오늘의 회고

 튜터님께 질문드리기 전에 내가 고민했던 것들을 정리 했었는데 막상 앞에서 질문하려니 부끄럽고 말도 잘 못드렸던 것 같다. 하지만 친절하게 잘 설명해주려고 하시고 동기부여도 해주시니 공부할 맛이 났다. 사실 엄청나게 깨달음을 주신 건 아니지만 코드엔 정답은 없고 상황마다 다르며 직접 구현해보고 내가 경험으로 쌓아가는 것이라 먼저 해보라는 말씀이 제일 기억에 남았던 것 같다. 무작정 짜보고 왜 이게 안 좋은지 판단하고 고치는 작업을 통해 내가 더 성장할 수 있는 기회를 주신 것 같아서 더 감사하다는 생각이 들었다.

 오늘 질문을 하면서 느낀 점은 튜터님이 있고 질문을 편하게 드릴 수 있다는 점이 얼마나 좋은 환경인지 조금이라도 깨닫게 되는 계기가 된 것 같다. 항상 열심히 해주시는 튜터님들, 매니저님들, 동료들을 생각하며 나도 또한 열심히 해야겠다. 내일도 파이팅!

 

 

참고 : 

https://acpi.tistory.com/122

 

[C#] 숫자앞에 0붙이기

1. PadLeft 함수 사용 int value = 100; string result = Convert.ToString(value).PadLeft(5, '0'); MessageBox.Show(result); 2. string.Format 함수 사용 int value = 100; string result = string.Format("{0:D5}", value); MessageBox.Show(result); 3. ToString

acpi.tistory.com