C# 문법 3주차 - 상속

Amberjack·2024년 1월 3일
0

C# 문법

목록 보기
36/44

👩‍👦 상속

상속은 객체지향 언어에서 가장 중요한 개념!

🤔 상속?

▪️ 상속의 개념

  • 상속은 기존의 클래스(부모)를 확장, 재사용하여 새로운 클래스(자식)를 생성하는 것.
  • 자식 클래스는 부모 클래스의 멤버(필드, 메서드, 프로퍼티 등)을 상속받아 사용할 수 있다.
  • 상속을 통해 부모 클래스의 기능을 확장하거나 수정하여 새로운 클래스를 정의할 수 있다.

▪️ 상속의 장점

  • 코드의 재사용성 : 상속을 통해 기존 클래스의 코드를 재사용, 반복적인 코드 작성을 방지.
  • 계층 구조의 표현 : 클래스 간의 계층 구조를 표현하여 코드의 구조를 명확하게 표현 가능.
  • 유지보수의 향상 : 상속을 통해 기존 클래스의 수정이 필요한 경우, 해당 클래스만 수정하면 된다.

▪️ 상속의 종류

  • 단일 상속 : 하나의 자식 클래스가 하나의 부모 클래스만 상속받는 것. C#에서는 단일 상속만을 지원한다!
  • 다중 상속 : 하나의 자식 클래스가 여러 개의 부모 클래스를 동시에 상속받는 것. C#에서는 다중 상속을 지원하지 않는다!!!
  • 인터페이스 상속: 클래스가 인터페이스를 상속받는 것. 인터페이스는 다중 상속을 지원, 클래스는 하나의 클래스와 여러 개의 인터페이스를 동시에 상속받을 수 있다.

▪️ 상속의 특징

  • 부모 클래스의 멤버에 접근 : 자식 클래스는 상속받은 부모 클래스의 멤버에 접근할 수 있다. 이를 통해 부모 클래스의 기능을 재사용할 수 있다.
  • 메서드 재정의 : 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에 맞게 수정할 수 있다. → 다형성 구현!
  • 상속의 깊이 :
    • 클래스는 다수의 계층적인 상속 구조를 가질 수 있다. 부모 클래스가 또 다른 클래스의 자식 클래스가 될 수 있으며, 이를 통해 상속의 계층 구조를 형성할 수 있다.
    • 깊이가 깊어질수록 클래스 간 관계가 복잡해지기 때문에 적절한 상속의 깊이를 유지하고 적절하게 사용하는 것이 중요!

▪️ 접근 제한자와 상속

  • 접근 제한자에 따라 자식 클래스에서 부모 클래스의 멤버에 접근할 수 있는 범위가 결정된다.

상속의 예시)

클래스 Animal을 상속받은 Dog, Cat 클래스를 만들어보자!

// 부모 클래스
public class Animal
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }

    public void Sleep()
    {
        Console.WriteLine("Animal is sleeping.");
    }
}

// 자식 클래스
public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Dog is bark.");
    }
}

public class Cat : Animal
{
    public void Sleep()
    {
        Console.WriteLine("Cat is sleeping.");
    }

    public void Meow()
    {
        Console.WriteLine("Cat is meow.");
    }
}

// 사용 예시
Dog dog = new Dog();
dog.Name = "Bobby";
dog.Age = 3;

dog.Eat();      // Animal is eating.
dog.Sleep();    // Animal is sleeping.
dog.Bark();     // Dog is barking

Cat cat = new Cat();
cat.Name = "KKami";
cat.Age = 10;

cat.Eat();		// Animal is eating.
cat.Sleep();	// Cat is sleeping.
cat.Meow();		// Cat is meow.

Dog와 Cat에 선언되어 있지 않은 Eat(), Sleep()을 Animal에서 상속받아 사용하는 모습!!!

※ Cat의 Sleep()의 경우, 부모와 자식 모두 선언되어 있을 때, Animal의 Sleep()을 숨기고 Cat의 Sleep()이 실행된다. → 이와 같은 방법은 추천하지 않는다고 한다.

0개의 댓글