클래스 기반의 클래스 지향 언어에서 가장 중요한 특징은 바로 상속(Inheritance)과 다형성(Polymorphism)입니다.
만약 Dog() 클래스와 Cat() 클래스를 만든다고 생각해봅시다.
class Dog
{
public int Age { get; set; }
public string Color { get; set; }
public Dog() { this.Age = 0; }
public void Eat(); { Console.WriteLine("먹습니다"); }
public void Sleep(); { Console.WriteLine("잡니다"); }
public void Bark(); { Console.WriteLine("짖습니다"); }
}
class Cat
{
public int Age { get; set; }
public Cat() { this.Age = 0; }
public void Eat(); { Console.WriteLine("먹습니다"); }
public void Sleep(); { Console.WriteLine("잡니다"); }
public void Meow(); { Console.WriteLine("냥냥 웁니다"); }
}
static void Main(string[] args)
{
List<Dog> Dogs = new List<Dog>() { new Dog(), new Dog(), new Dog() };
List<Cat> Cats = new List<Cat>() { new Cat(), new Cat(), new Cat() };
foreach(var item in Dogs)
{
item.Eat();
item.Sleep();
item.Bark();
}
foreach(var item in Cats)
{
item.Eat();
item.Sleep();
item.Meow();
}
}
이러한 방식으로 추상화를 진행했을경우 Dog와 Cat 클래스의 인스턴스를 만들고 메서드를 실행하면 겹치는 코드가 많습니다. 이렇게 같은 코드를 여러번 작성을 효율적으로 작성해야 합니다. 이때 사용하는것이 상속입니다.
[상속]
상속은 클래스 사이에 부모 자식 관계를 정의하는 작업입니다.
Dog와 Cat 클래스를 예로 들면 겹치는 부분을 Animal 이라는 부모 클래스로 묶습니다.
묶는 기준은 동물이라면 가지고 있는 특징을 기준으로 묶은 것입니다.
class Animal
{
public int Age { get; set; }
public Animal() { this.Age = 0; }
public void Eat(); { Console.WriteLine("먹습니다"); }
public void Sleep(); { Console.WriteLine("잡니다"); }
}
이제 Dog 와 Cat 클래스가 Animal 클래스의 상속을 받아보겠습니다.
class Dog : Animal // Animal 클래스의 상속을 받습니다.
{
public stirng Color { get; set; }
public void Bark() { Console.WriteLine("짖습니다"); }
}
class Cat : Animal // Animal 클래스의 상속을 받습니다.
{
public void Meow() { Console.WriteLine("냥냥 웁니다"); }
}
이런 식으로 클래스의 부모 자식 관계가 형성되면 자식 클래스는 부모 클래스의 public 또는 protected 멤버에 접근할 수 있습니다.
<다양한 접근 제한자>
접근 제한자 | 내부 클래스 | 외부 클래스 | 파생 클래스 | 프로젝트 |
public | O | O | O | O |
internal | O | O | O | |
protected | O | O | ||
private | O | |||
protected internal | O | 사용하는 클래스가 같은 어셈블리 안에 있을 떄 접근 가능 |
'C# > 클래스와 객체지향' 카테고리의 다른 글
C# 클래스와 객체지향 - 12. 클래스(키워드) (0) | 2024.05.28 |
---|---|
C# 클래스와 객체지향 - 11. 다형성 (0) | 2024.05.28 |
C# 클래스와 객체지향 - 09. 값 복사와 참조 복사 (0) | 2024.05.28 |
C# 클래스와 객체지향 - 08. 속성 (0) | 2024.05.28 |
C# 클래스와 객체지향 - 07. 생성자와 소멸자 (1) | 2024.05.28 |