Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 인터페이스와 클래스의 차이점은 무엇일까?

C# 프로그래밍에서 인터페이스(Interface)클래스(Class)는 객체 지향 설계의 핵심 요소이지만, 그 역할과 특성은 확연히 다릅니다. 두 개념을 정확히 이해하면 더 유연하고 유지보수하기 좋은 코드를 작성할 수 있습니다.

인터페이스는 필드나 메서드 구현부가 없는 일종의 '설계 규격'입니다. 즉, 스스로 정의한 메서드를 직접 구현할 수 없으며, 오직 멤버의 선언만 포함합니다. 반면 클래스는 인터페이스에 선언된 메서드를 실제로 구현하는 역할을 담당합니다.

인터페이스(Interface)란?

인터페이스는 속성(Property), 메서드(Method), 이벤트(Event) 등의 멤버를 정의하지만, 이들에 대한 선언만 포함할 뿐 실제 구현 코드는 담고 있지 않습니다. 인터페이스를 상속받는(구현하는) 파생 클래스가 해당 멤버들을 반드시 정의해야 하는 책임을 갖습니다.

public interface interface_name {
    // interface_members
}

예를 들어 다음과 같이 인터페이스를 선언할 수 있습니다.

public interface IAnimal {
    string Name { get; set; }
    void MakeSound();
}

클래스(Class)란?

클래스는 데이터 타입을 위한 청사진(Blueprint)입니다. 클래스 자체는 실제 데이터를 정의하지 않지만, 클래스 이름이 의미하는 바—즉, 해당 클래스의 객체가 어떤 데이터로 구성되는지, 그 객체에 어떤 연산을 수행할 수 있는지—를 명확하게 규정합니다.

class class_name {
    // class_members
}

앞서 선언한 인터페이스를 클래스가 구현하는 예시는 다음과 같습니다.

public class Dog : IAnimal {
    public string Name { get; set; }

    public void MakeSound() {
        Console.WriteLine("멍멍!");
    }
}

인터페이스 vs 클래스 핵심 차이점

구분인터페이스클래스
필드포함 불가포함 가능
메서드 구현선언만 가능 (C# 8.0부터 기본 구현 허용)직접 구현
다중 상속여러 인터페이스 구현 가능단 하나의 클래스만 상속 가능
인스턴스 생성불가능가능
접근 제한자멤버는 기본적으로 publicprivate, protected 등 자유롭게 지정

언제 무엇을 사용해야 할까?

인터페이스는 서로 다른 클래스들이 공통된 동작 계약을 따르도록 강제할 때 적합합니다. 예를 들어 여러 결제 수단(카드, 계좌이체, 간편결제)이 동일한 '결제' 동작을 수행해야 한다면 인터페이스로 규격을 통일하는 것이 좋습니다.

클래스는 상태(필드)와 동작(메서드)을 함께 캡슐화하여 독립적인 객체를 만들 때 사용합니다. 재사용성과 확장성이 필요하다면 추상 클래스(Abstract Class)와 인터페이스를 적절히 조합하는 설계도 고려해 볼 만합니다.