게임개발 캠프 11일차

IIRU·2026년 5월 29일

< 접근제한자 >

1. public

  • 공용이며, 다른 클래스에서 접근이 가능하다.

2. private

  • 다른 클래스에서 접근이 불가능하다.
  • 접근제한자가 없을 경우 기본 private이다.

접근제한자를 private로 사용하는 이유

  • 다른 클래스에서 값을 바꾸는 것은 프로그램에는 위험한 행동이다. 꼭 필요한 곳에서만 public을 사용하고 그 외에는 private를 사용하도록 하자.

< 프로퍼티 >

public class Player
{
	public string name = "";
 	public int level;
 	private int attack;
}

이렇게 선언되어 있다고 하자.

private로 선언되어있는 attack은 어떻게 접근해야할까?

public int Attack { get; private set; }

위 처럼 attack변수는 프로퍼티라는 것을 선언해서 접근할 수 있다.
get은 값을 가져오는 것.
set은 값을 설정하는 것.
이라고 생각하면 편하다.

public int Attack
{
    get
    {
        return attack;
    }
    private set
    {
        attack = value;
    }
}

필자는 이 방법을 추천한다.


코드 실습

몬스터 클래스, 플레이어 클래스 생성
플레이어 -> 몬스터 공격
1. 클래스 분리
2. 접근제한자 private로
3. 프로퍼티 사용

한번 만들어보자.

Player클래스

using System;
namespace _260529_2_TestProject
{
    public class Player
    {
        public string name = "";
        private int hp;
        public int Hp
        {
            get
            {
                return hp;
            }
            private set
            {
                hp = value;
            }
        }
        private int attack;
        public int Attack
        {
            get
            {
                return attack;
            }
            private set
            {
                attack = value;
            }
        }

        public Player(string _name, int _hp, int _att)
        {
            name = _name;
            Attack = _att;
            Hp = _hp;
        }




        public void HpSet(int _hp)
        {
            Hp = _hp;
        }
        public void AttackDamage(int damage)
        {
            Attack = damage;
        }
        public void TakeDamage(int damage)
        {
            Hp -= damage;
        }
        public void PrintStatus(Player player)
        {
            Console.WriteLine($"이름 : {player.name}");
            Console.WriteLine($"공격력 : {player.Attack}");
            Console.WriteLine($"체력 : {player.Hp}");
        }
    }
}

Monster클래스

using System;

namespace _260529_2_TestProject
{
    public class Monster
    {
        public string name = "";
        private int hp;
        public int Hp
        {
            get
            {
                return hp;
            }
            private set
            {
                hp = value;
            }
        }
        private int attack;
        public int Attack
        {
            get
            {
                return attack;
            }
            private set
            {
                attack = value;
            }
        }
        public void HpSet(int _hp)
        {
            Hp = _hp;
        }
        public void AttackDamage(int damage)
        {
            Attack = damage;
        }
        public void TakeDamage(int damage)
        {
            Hp -= damage;
        }
        public void PrintStatus(Monster monster)
        {
            Console.WriteLine($"이름 : {monster.name}");
            Console.WriteLine($"공격력 : {monster.Attack}");
            Console.WriteLine($"체력 : {monster.Hp}");
        }
    }
}

실행되는 메인 Program클래스

using _260529_2_TestProject;
class Program
{
    static void Main()
    {
        //플레이어
        Player player = new Player("전사", 100, 10);
        player.PrintStatus(player);
        Console.WriteLine("------------------------");

        //몬스터
        Monster monster = new Monster();
        monster.name = "오크";
        monster.AttackDamage(5);
        monster.HpSet(50);
        monster.PrintStatus(monster);
        Console.WriteLine("------------------------");


        //플레이어가 몬스터를 때렸을 때
        monster.TakeDamage(player.Attack);
        monster.PrintStatus(monster);
        Console.WriteLine("------------------------");
    }
    
}
profile
초보 개발자 블로그입니다!

0개의 댓글