728x90
반응형

객체지향 고급 개념 익히기

C#은 객체지향 언어이기 때문에 코드 재사용성유연한 설계가 중요합니다.
그 핵심이 되는 개념이 바로 상속(Inheritance)인터페이스(Interface) 입니다.

이번 글에서는 두 개념의 차이와 사용법을 쉽게 정리하고, 오버라이딩, 오버로딩 개념도 함께 설명합니다.


1. 상속 (Inheritance)

 개념

상속은 기존 클래스(부모)의 기능을 물려받아 새로운 클래스(자식)를 만드는 것입니다.
공통 코드를 재사용하고, 확장할 수 있어 유용합니다.

 예제

class Animal
{
    public void Eat()
    {
        Console.WriteLine("먹는다");
    }
}

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

Dog d = new Dog();
d.Eat();   // 부모 클래스 메서드
$d.Bark(); // 자식 클래스 메서드

 protected

  • protected 키워드를 사용하면, 자식 클래스에서 접근 가능한 변수/메서드를 만들 수 있습니다.
class Animal
{
    protected string species = "동물";
}

class Cat : Animal
{
    public void PrintSpecies()
    {
        Console.WriteLine(species);
    }
}

 2. 인터페이스 (Interface)

 개념

인터페이스는 **클래스가 반드시 구현해야 할 동작의 명세(계약)**를 정의하는 구조입니다.

  • 다중 상속이 가능한 형태 (C# 클래스는 다중 상속 불가)
  • 주로 기능 분리, 유연한 설계, 테스트 용이성을 위해 사용

 정의와 구현

interface IFlyable
{
    void Fly();
}

class Bird : IFlyable
{
    public void Fly()
    {
        Console.WriteLine("날개로 난다");
    }
}

 다중 인터페이스 구현

interface IFlyable { void Fly(); }
interface ISwimmable { void Swim(); }

class Duck : IFlyable, ISwimmable
{
    public void Fly() { Console.WriteLine("훨훨"); }
    public void Swim() { Console.WriteLine("첨벙첨벙"); }
}

3. 오버라이딩 vs 오버로딩

 오버라이딩 (Overriding)

  • 부모 클래스의 메서드를 재정의하는 것
  • virtual(부모) + override(자식) 키워드 사용
class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("...소리");
    }
}

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

 오버로딩 (Overloading)

  • 메서드 이름은 같지만, 매개변수가 다른 여러 버전 정의 가능
class Calculator
{
    public int Add(int a, int b) => a + b;
    public double Add(double a, double b) => a + b;
    public int Add(int a, int b, int c) => a + b + c;
}

 

이번 글에서는 C# 객체지향 개념 중 중요한 고급 주제인 상속, 인터페이스, 오버라이딩과 오버로딩을 정리했습니다.

  • 상속: 기존 클래스의 기능을 물려받아 확장
  • 인터페이스: 기능 명세만 정의하고 구현은 클래스가 담당
  • 오버라이딩: 부모 메서드 재정의, 오버로딩: 같은 이름 다른 매개변수

 

728x90
반응형

+ Recent posts