4. Rookiss 강의 - C# 기초 프로그래밍 입문 객체지향 여행(1)

이규성·2024년 7월 1일
0

TIL

목록 보기
102/106

07/01

알콜 이슈가 있긴 하지만 철마는 달리고 싶다.

📌객체지향의 시작

앞전에 만들었던 TextRPG는 절차(Procedure) 지향 즉 새로운 기능이 필요하면 함수를 생성하여 구현하는 방법의 대표적인 예제였다. 직관적이지만 유지 보수가 어렵고 함수 호출 순서가 굉장히 중요해지기 때문에 여러 문제를 야기한다. class를 설명하기 위한 강의로 보인다.

class Knight
{
    public int hp;
    public int atk;


    public void Move()
    {
        Console.WriteLine("Knight move");
    }

    public void Attack()
    {
        Console.WriteLine("Knight attack");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Knight knight = new Knight();

        knight.hp = 100;
        knight.atk = 10;

        knight.Move();
        knight.Attack();
    }
}

class 사용의 기본적인 예제

📌복사와 참조

// reference
class Knight
{
    public int hp;
    public int atk;

    // 깊은 복사
    public Knight Clone()
    {
        Knight knight2 = new Knight();
        knight2.hp = hp;
        knight2.atk = atk;
        return knight2;
    }

    public void Move()
    {
        Console.WriteLine("Knight move");
    }

    public void Attack()
    {
        Console.WriteLine("Knight attack");
    }
}

// copy
struct Mage
{
    public int hp;
    public int atk;
}

class Program
{
    static void KillMage(Mage mage)
    {
        mage.hp = 0;
    }

    static void KillKnight(Knight knight)
    {
        knight.hp = 0;
    }

    static void Main(string[] args)
    {
        Mage mage;

        mage.hp = 100;
        mage.atk = 10;

        Mage mage2 = mage;

        mage2.hp = 0;

        // KillMage(mage);
        // mage.hp는 여전히 100이다.

        Knight knight = new Knight();

        knight.hp = 100;
        knight.atk = 10;
        // KillKnight(knight);
        // knight.hp는 0이 되었다.

        //Knight knight2 = new Knight();

        //knight2.hp = 0;
        // 따로 초기화를 해주어야 원본과 다른 객체가 된다.

        Knight knight2 = knight.Clone();
        knight2.hp = 0;
        // 마찬가지로 깊은 복사를 통해 원본과 다른 객체가 된다.
    }
}

구조체와 class의 차이점을 알려주는 예제이다. 구조체는 데이터를 복사하여 사용하므로 원본은 바뀌지 않는다. 그러나 class는 ref문처럼 원본을 참조하여 사용하기 때문에 값이 바뀌게 된다. 충분히 이해한 상태에서 상황에 맞게 사용하면 강력한 기능이 될 것이다.

0개의 댓글