상속과 인터페이스, 무엇이 다를까요?
C#에서 클래스는 상속을 통해 다른 클래스의 특징을 물려받고, 인터페이스를 구현하여 특정 기능을 약속할 수 있습니다.
- 상속: 부모 클래스의 모든 멤버(필드, 메소드, 속성 등)를 자식 클래스에서 사용할 수 있도록 하는 관계입니다. 자식 클래스는 부모 클래스의 기능을 확장하거나 변경할 수 있습니다.
- 인터페이스: 클래스가 반드시 구현해야 하는 메소드의 집합입니다. 인터페이스는 객체가 어떤 기능을 제공해야 하는지를 정의하며, 다양한 클래스에서 동일한 인터페이스를 구현하여 공통된 기능을 제공할 수 있도록 합니다.
왜 상속과 인터페이스를 사용할까요?
- 코드 재사용: 이미 만들어진 클래스를 상속하거나 인터페이스를 구현하여 코드를 재사용하고 개발 시간을 단축할 수 있습니다.
- 다형성: 다양한 객체를 동일한 타입으로 다룰 수 있어 코드의 유연성을 높입니다.
- 모듈화: 시스템을 작은 단위로 나누어 관리하고 재사용성을 높일 수 있습니다.
예시 코드
C#
// 인터페이스
interface IFlyable {
void Fly();
}
// 부모 클래스
class Animal {
public void Move() {
Console.WriteLine("움직인다.");
}
}
// 자식 클래스 (상속 및 인터페이스 구현)
class Bird : Animal, IFlyable {
public void Fly() {
Console.WriteLine("날아다닌다.");
}
}
// 자식 클래스 (상속만)
class Dog : Animal { }
- Bird 클래스는
Animal
클래스를 상속받아Move()
메소드를 사용할 수 있으며,IFlyable
인터페이스를 구현하여Fly()
메소드를 제공합니다. - Dog 클래스는
Animal
클래스만 상속받아Move()
메소드만 사용할 수 있습니다.
C#
Animal animal = new Bird();
IFlyable flyable = new Bird();
animal.Move(); // 출력: 움직인다.
flyable.Fly(); // 출력: 날아다닌다.
위 코드에서 Bird
객체는 Animal
타입으로도, IFlyable
타입으로도 사용될 수 있습니다.
상속과 인터페이스의 차이점
특징 | 상속 | 인터페이스 |
---|---|---|
관계 | is-a 관계 (Bird is a Animal) | can-do 관계 (Bird can fly) |
구현 | 부모 클래스의 모든 멤버를 상속받음 | 인터페이스에서 정의된 메소드를 모두 구현해야 함 |
다중 상속 | 불가능 | 여러 인터페이스를 구현할 수 있음 |
상태 | 상태를 가질 수 있음 | 상태를 가질 수 없음 (메소드 선언만 가능) |
언제 어떤 것을 사용해야 할까요?
- 상속: 클래스 간의
is-a
관계가 명확하고, 부모 클래스의 기능을 확장하거나 변경해야 할 때 사용합니다. - 인터페이스: 다양한 클래스에서 동일한 기능을 제공해야 할 때, 또는 클래스 간의 의존성을 줄이고 유연성을 높이고 싶을 때 사용합니다.
핵심 포인트
- 상속과 인터페이스는 객체지향 프로그래밍에서 코드 재사용성과 유연성을 높이는 중요한 개념입니다.
- 상속은 클래스 간의 계층 구조를 만들고, 인터페이스는 클래스가 제공해야 하는 기능을 정의합니다.
- 다형성을 통해 하나의 변수로 다양한 객체를 참조할 수 있습니다.
다른 예시
- 다양한 동물 예시: 고양이, 강아지, 새 등 다양한 동물을 클래스로 만들고, 공통적인 특징(Animal)과 각 동물의 특징(Flyable, Swimmable 등)을 인터페이스와 상속으로 구현해 보세요.
- 게임 캐릭터 예시: 몬스터, 플레이어, NPC 등 다양한 캐릭터를 클래스로 만들고, 공격, 방어, 이동 등의 기능을 인터페이스로 구현해 보세요.
심화 학습
- 추상 클래스: 상속과 인터페이스의 중간 개념으로, 추상 메소드를 가질 수 있는 클래스입니다.
- Generic: 다양한 타입의 데이터를 다룰 수 있도록 하는 기능입니다.
- Extension Method: 기존 클래스에 새로운 메소드를 추가할 수 있는 기능입니다.
이러한 개념들을 이해하면 C#으로 더욱 효율적이고 유연한 프로그램을 개발할 수 있습니다.
** 본 내용은 Google AI 챗봇(Gemini-제미니)과의 대화를 바탕으로 작성되었습니다.
댓글 없음:
댓글 쓰기