티스토리 뷰

오늘은 아래의 내용들과 여러 클래스를 활용해 TextRPG 구현을 했다

과제는 수업시간에 구현한 TextRPG를 상속을 이용해 코드를 리팩토링 하는 거였는데 생각보다 시간이 걸렸다


💻 C#

Namespace

using MyNamespace;

namespace MyNamespace
{
    class MyClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello from MyNamespace!");
        }
    }
}

namespace study32
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new MyClass();
            obj.SayHello();
        }
    }
}

추상 클래스 Abstract Class

abstract class Animal
{
    public abstract void MakeSound(); // 추상 메서드 (강제 구현)

    public void Sleep() // 일반 메서드
    {
        Console.WriteLine("동물이 잠을 잡니다.");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("멍멍!");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("야옹!");
    }
}

var dog = new Dog();
dog.MakeSound();
dog.Sleep();

var cat = new Cat();
cat.MakeSound();
cat.Sleep();
  1. 공통된 기본 동작을 제공하고, 특정 기능은 하위 클래스에서 구현하도록 강제하고 싶을 때
  2. 일반적인 속성(필드)과 메서드를 가지면서도, 일부 메서드는 반드시 구현되도록 강제하고 싶을 때
  3. 인터페이스보다 더 강한 관계를 표현하고 싶을 때 (추상 클래스는 상속 관계, 인터페이스는 구현 관계)

Interface 인터페이스

interface IAnimal
{
    void MakeSound();
}

class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("멍멍!");
    }
}

public class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("야옹!");
    }
}

var dog = new Dog();
var cat = new Cat();

dog.MakeSound(); // 멍멍!
cat.MakeSound(); // 야옹!
  • 클래스나 구조체가 구현해야하는 메서드, 속성을 정의하는 추상적인 형식
  • 구현이 없는 추상 메서드들의 집합으로 클래스나 구조체에서 구현해야 한다
  • 다중 상속처럼 다중 구현이 가능하

추상 클래스 v 인터페이스

사용 경우 추상 클래스 (abstract class) 인터페이스 (interface)
"is-a" 관계 (상속) ✅ 적합 (예: Dog is an Animal) ❌ 부적합
"can-do" 관계 (행동) ❌ 부적합 ✅ 적합 (예: Bird can Fly)
기본 구현 제공 필요 ✅ 일반 메서드 포함 가능 ❌ (C# 8.0 이상에서 default 메서드 지원)
필드(변수) 포함 필요 ✅ 가능 (protected, private 필드 가능) ❌ 불가능
다중 상속 필요 ❌ 불가능 ✅ 다중 인터페이스 구현 가능

📝 과제

TextRPG 리팩토링

https://github.com/yh97yhyh/likelion-csharp-study/tree/main/TextRPGRefact

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함