C#의 기초 - 13 (상속, 추상 클래스, override, overload)

krokrai·2025년 12월 26일

상속, 추상 클래스

개요

  • 상속
  • 추상 클래스
  • override, overload

상속

  • 상위 class의 속성을 물려받아 하위 class가 사용하는 것을 의미합니다.
  • 상위 class의 접근 제한자에 따라 하위 class가 접근할 수 있는 범위를 지정할 수 있습니다.
  • 상위 class에서 정의 되지 않은 것을 하위에서 세부적으로 정의할 수 있습니다.
  • 상속은 한번만 받을 수 있습니다.단, 상속 받은 객체를 다시 상속할 수 있습니다.(aaa를 상속받은 aa를 상속받은 a)
  • 상속 받는 법은 class명 : 상우class명

void Main()
{
    aaa bbb = new aaa();
    aa bb = new aa();
    a b = new a();

    bbb.PrintAll();
    Console.WriteLine();
    bb.PrintAll();
    Console.WriteLine();
    b.test();
}

class aaa
{
    private int health { get; set; } = 100;
    protected int gold { get; set; } = 50;
    public int lvl { get; protected set; } = 1;

    public void PrintAll()
    {
        Console.WriteLine(health);
        Console.WriteLine(gold);
        Console.WriteLine(lvl);
    }
}

class aa : aaa
{
    
}

class a : aa
{
    public void test()
    {
        Console.WriteLine("aaa를 상속 받은 aa를 상속 받은 a");
    }
}

100
50
1

100
50
1

aaa를 상속 받은 aa를 상속 받은 a
  • 하지만, 이런 과정은 협업과정에서 문제를 일으킬 수도 있으며, 필요한 경우 일부 바꿔서 쓰는 등을 해야할 때가 있습니다.

추상 클래스

  • 추상 클래스란 상위 객체가 대략적인 틀을 제공한다면, 하위 객체에서 이 틀을 기반으로 세부구현을 할것을 강제하는 것을 말합니다.
  • 추상 클래스로 만들게 되면, 프로그래머의 실수를 줄이면서, 상위 객체에 책임을 줄이고, 서로 다른 하위 객체에서 세부구현을 강제할 수 있기 때문에, 코드의 완성도가 올라갑니다.

  • 추상 클래스로 선언된 클래스는 인스턴스를 생성할 수 없기 때문에 선언 자체를 막을 수 있습니다.

  • 위 사진 처럼 만약 추상 클래스를 선언하였지만, 구현을 하지 않을 경우 컴파일러가 오류를 알려줍니다.

void Main()
{
    a b = new a(100, 50, 3);
    b.PrintAll();
}

abstract class aaa
{
    private int health { get; set; }
    protected int gold { get; set; }
    public int lvl { get; protected set; }

    protected aaa(int hp, int moeny, int level)
    {
        health = hp;
        gold = moeny;
        lvl = level;
    }

    public abstract void PrintAll();
}

class a : aaa
{
    // 상위 객체에서 생성자를 접근하기 위해서는 base(요소)를 넣으면 됩니다.
    public a(int hp, int money, int levle) : base(hp, money, levle)
    {

    }

    // abstract로 선언된 객체는 후술할 override를 선언해야합니다.
    public override void PrintAll()
    {
        // health는 private 접근 제한자로 인해 하위 객체에서 접근할 수 없습니다.
        Console.WriteLine(gold);
        Console.WriteLine(lvl);
    }
}
50
3

override, overload

  • override는 추상 클래스(또는 virtual)로 상위 객체에 함수를 덮어씌우기를 진행하겠다는 의미로, 상위에서 구현하지 않은 세부 함수를 구현하기 위해 사용합니다.
  • overload는 여러 함수가 존재할때 요소에 따라 접근할 함수를 다르게 선택할 수 있는 방식을 말합니다

void Main()
{
	// 같은 이름이지만, 들어가는 요소가 다르기 때문에 접근이 달라지며, 이것을 overload라고 합니다.
    Sum(1, 2);
    Sum(3, 4, 5);
}

void Sum(int a, int b)
{
    Console.WriteLine(a + b);
}

void Sum(int a, int b, int c)
{
    Console.WriteLine(a+b+c);
}

profile
게임을 좋아하고 만들고 싶은 개발자 지망생입니다.

0개의 댓글