클래스는 객체를 만들기 위한 설계도입니다. 붕어빵 틀을 생각하면 이해하기 쉽습니다. 붕어빵 틀에는 붕어빵의 모양, 크기 등이 정의되어 있고, 이 틀을 사용하여 여러 개의 붕어빵을 만들 수 있습니다. 마찬가지로 클래스는 객체의 속성(데이터)과 메서드(행위)를 정의하고, 이 클래스를 사용하여 여러 개의 객체를 생성할 수 있습니다.
인터페이스는 클래스가 갖춰야 할 기능을 정의합니다. 예를 들어, "날 수 있는" 기능을 나타내는 인터페이스를 정의하고, 비행기, 새, 슈퍼맨 등의 클래스가 이 인터페이스를 구현하면 "날 수 있는" 기능을 갖추게 됩니다. 인터페이스는 클래스와 달리 구체적인 구현 내용은 가지고 있지 않습니다.
구현이란 인터페이스에 정의된 기능을 실제로 동작하도록 코드를 작성하는 것입니다. 인터페이스는 "날 수 있는" 기능을 정의하지만, 비행기, 새, 슈퍼맨은 각자 다른 방식으로 날 수 있습니다. 따라서 각 클래스는 인터페이스에 정의된 기능을 자신의 특징에 맞게 구현해야 합니다.
인터페이스와 클래스의 주요 차이점
| 특징 | 인터페이스 | 클래스 |
|---|---|---|
| 목적 | 클래스가 갖춰야 할 기능 정의 | 객체를 생성하기 위한 설계도 |
| 구현 | 구현 내용 없음 | 구현 내용 포함 |
| 상속 | 다중 상속 가능 | 단일 상속만 가능 |
| 인스턴스 생성 | 불가능 | 가능 |
예시
interface IFlyable // 날 수 있는 기능을 정의하는 인터페이스
{
void Fly();
}
class Airplane : IFlyable // 비행기 클래스는 IFlyable 인터페이스를 구현
{
public void Fly()
{
Console.WriteLine("엔진을 사용하여 날아갑니다.");
}
}
class Bird : IFlyable // 새 클래스는 IFlyable 인터페이스를 구현
{
public void Fly()
{
Console.WriteLine("날개를 사용하여 날아갑니다.");
}
}
이 코드에서 IFlyable 인터페이스는 Fly() 메서드를 정의하고, Airplane 클래스와 Bird 클래스는 Fly() 메서드를 각자의 방식으로 구현합니다.
인터페이스와 클래스의 차이점을 이해하고 적절히 사용하면 코드의 유연성, 재사용성, 유지보수성을 향상시킬 수 있습니다.