230816_ 프로퍼티

Minsang Kim·2023년 8월 16일
0

TIL

목록 보기
7/41

오늘도 열심히 공부해보자. 거두절미하고 바로 ㄱㄱ

프로퍼티

사실 어제 클래스에 대해 공부할 때 프로퍼티에 대해 그냥 대충 넘어갔던 감이 없잖아 있는 느낌적인 느낌. 그래서 오늘 강의를 이어서 보다보니 프로퍼티에 대해 확실히 하고 넘어갈 것 같아야 했다.

프로퍼티 : 클래스 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자(Accessor) 메서드의 조합입니다.

프로퍼티의 가장 중요한 특징 중 하나는 필드에 직접적인 접근을 막는다는 것이다.
그럼 public 으로 선언하면 되는거 아닌가 하는 생각이 들었지만 객체 지향 프로그래밍의 특징을 살리기 위한 것으로 private으로 선언한 후 필드에 대해 접근하기 위해서는 프로퍼티로 접근해야 한다는 점을 알게되었다. 예시를 보면서 설명하는게 빠르겠다.

class Person
{
    private string name;
    private int age;
    public string School { get; set; } = "Hanyang";

    public string Name
    {
        get { return name; }
        private set { name = value; }
    }

    public int Age
    {
        get { return age; }
        set
        {
            if (value >= 0)
                age = value;
        }
    }
}

이 예시를 보고 public 하면 되는거 아닌가 하는 생각이 사라지게 되었다. 일단 먼저 get 접근자는 필드를 리턴하는 역할, set 접근자는 필드 값을 세팅하는 역할이다. 그리고 프로퍼티의 이름은 필드의 첫 글자만 대문자로 하는게 국룰인가보다. (다른 이름으로 해도 되긴 하더라)

Name 부분을 보자. set접근자를 private 으로 제한하면서 클래스의 외부에서는 다른 값으로 변경 자체가 불가능하다. 즉, 값을 참조할 순 있지만 수정할 수 없다는 점.

이번엔 Age 부분을 자세히 보자. 하지만 set 부분에서 이상한 값으로 세팅하는 것을 if 구문을 통해 막아주는 모습이다. 즉, 필드 값을 수정할 때 if 문 걸고 그럴 필요없이 set 접근자에서 설정하면 코드가 편-안 해지는 것이다.

마지막으로 School 부분을 보자. 이건 뭐냐하면 자동 프로퍼티라는 놈이다. 한번에 간단하게 get, set 접근자를 설정 가능하다. 물론 그 앞에 private 으로 제한 가능하고, 또 맨 뒤에서 초기값을 설정 가능하다.
그런데 이러면 캡슐화를 위해 억지로 프로퍼티 쓰는 느낌인데, public 쓰는 게 낫지 않나 ? 굳이 왜 프로퍼티를 쓰지...?
일단 그렇다고 하자.

??? : "이제야 알겠나 ? 프로퍼티가 무엇인지."
나 : " 또 한 번 배웠습니다.."

콘솔게임만들기

어쩌다 보니 오늘 3개의 게임을 만들었다.

먼저 어제 만들다 만 뱀 게임을 완성시켰다. 어제 거의 다 했으니 자세한 설명은 생략한다.

다음으로는 블랙잭.
역시 콘솔로 만들었다. 카드를 enum 타입으로 만들어 편하게 만들 수 있었다. 블랙잭 게임 로직이 어렵지 않아 나름 빠르게 완성할 수 있었다.

3번째 과제는 지금까지 배운 내용가지고 간단한 턴제 RPG 게임 만들기.
간단한 게임 내용은 용사가 던전에 들어가서 몬스터 때려잡는 흔한 게임이다. 선택지는 단 3개, 공격, 방어, 집중. 집중은 집중 카운트를 쌓는 방식으로 기 모아서 공격할 때 공격하는 것이다. 한 번 만들어보자.

interface 를 이용해 캐릭터 클래스의 틀을 만들고 이를 상속해 Warrior와 Monster 클래스를 만들었다. 또, Item 클래스, 게임을 관리하는 Stage 클래스를 구현했다.
Stage 클래스에서는 Start 메소드로 게임을 진행시키도록 구현했다. Console.ReadLine() 메소드로 입력을 받아 플레이어가 선택을 할 수 있도록 했다.

어찌저찌 게임은 완성했는데, 콘솔로 만들다보니 한계점이 느껴졌고, 오히려 UNITY에서 이걸 만들어보고 싶다는 생각이 들어 오히려 좋았다.


세줄 요약

  • 프로퍼티는 코드의 안정성과 가독성을 위하여
  • 오늘 게임 3개나 만듦
  • 게임 아이디어 GET
profile
게임만 하다가 개발자로

0개의 댓글