게임개발 캠프 12일차

IIRU·2026년 6월 1일

enum

 enum Job
 {
     Warrior,
     Mage,
     Rogue
 }

enum 사용법

Player player1 = new Player(100);
player1.job = Job.Warrior;
player1.job = (Job)2;
int i = (int)Job.Warrior;

객체 지향 프로그래밍

1. 단일책임

하나의 클래스는 하나의 역할만 해야한다.
이 클래스가 여러가지의 일을 하는가? 를 체크해야한다.

2. 개방 폐쇄 원칙

확장에는 개방되어있고, 수정에는 닫혀 있어야 한다.
기능 추가 할 일이 생겼을 때, 기본 코드는 최대한 수정하지 않아야한다.
왠만해서는 새로운 코드만 추가하는 것이 맞다.

Protected

protected int hp;
public int Hp { get { return hp; } set { hp = value; } }

protected는 본래 클래스 (private) + 상속받은 클래스만 사용가능하다.

internal

프로그램(한 프로젝트)안에서만 접근이 가능하다는 뜻이다.

상속

Animal 클래스

internal class Animal
{
	protected int i;
	public Animal(int _i)
	{
	    i = _i;
	}
}

Cat 클래스

internal class Cat : Animal
{
    
}

클래스 이름 뒤에 : Animal을 써주면 상속이 된다.

virtual

Animal클래스 안에 Bark()라는 함수가 있다.

 public virtual void Bark() //가상함수
 {
     Console.WriteLine("짖기");
 }
 

부모 클래스에 virtual을 붙여서 함수를 만들게되면 부모 클래스의 기능을 자식클래스에서 덮어쓰기 할 수 있다.

public override void Bark()
{
    Console.WriteLine("야옹");
}

Cat클래스 내에 override해서 함수를 만들게되면 다른 형식의 함수를 만들 수 있다.

  public virtual void Attack()
  {
      Console.WriteLine("공격");
  }

animal클래스에 이런 함수가 있을 때,

 public override void Attack()
 {
   	 base.Attack(); //base가 부모클래스인 animal을 뜻함
     Console.WriteLine("할퀴기");
 }

하게되면 animal클래스에 만들어둔 함수가 실행되고 다음 뒤에 할퀴기가 출력된다.

생성자로 cat을 만들게될 때 부모생성자에 있는 값이 필요하다.

public Cat() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
{

}

위처럼 사용할 수 있다.

상속을 받아야할 때는 is a

Dog is a Animal
Cat is a Animal
Sword is Weapon
기억하자.

상속을 받지 않아도될 때는 has a

player has a inventory
player has a weapon

Animal.cs

using System;

namespace _260601_1
{
    internal class Animal
    {

        protected int i;
        public Animal(int _i)
        {
            i = _i;
        }


        public virtual void Bark() //가상함수
        {
            Console.WriteLine("짖기");
        }
        //부모 클래스의 기능을 자식클래스에서 덮어쓰기 할 수 있다.

        public virtual void Attack()
        {
            Console.WriteLine("공격");
        }
    }
}

Cat.cs

using System;

namespace _260601_1
{
    internal class Cat : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("야옹");
        }

        public override void Attack()
        {
            Console.WriteLine("할퀴기");
        }
        public Cat() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
        {

        }
    }
}

Dog.cs

using System;

namespace _260601_1
{
    internal class Dog : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("멍멍");
        }

        public override void Attack()
        {
            base.Attack();
            Console.WriteLine("물기");
        }

        public Dog() : base(10) //부모클래스의 생성자에 값을 넘겨주겠다.
        {

        }

    }
}
profile
초보 개발자 블로그입니다!

0개의 댓글