C# - 인터페이스 (Interface)

2025. 9. 21. 19:08·C#

인터페이스 (Interface)

클래스나 구조체가 반드시 구현해야하는 메서드와 프로퍼티의 규약을 정의하는 요소다.

즉 특정 기능 구현을 강제하는 역할이다.

얼핏 추상 클래스와 비슷한 역할처럼 보이지만 일반 필드는 가질 수 없고 메서드 시그니쳐와 자동 구현 프로퍼티만 선언할 수 있다는 차이점이 있다.

 

interface IInteractable // 인터페이스 인터페이스명
{
    void Interact(); // 반드시 구현되어야 할 메서드로 구성
    // 필드는 가질 수 없음
    int MyNum { get; set; } // 프로퍼티는 됨. 프로퍼티는 메서드 취급
}

 

이렇게 간단하게 구현할 수 있다.

이렇게 인터페이스를 구현한 클래스는 Interact() 메서드와 MyNum 프로퍼티를 반드시 정의해야 한다.

또 하나의 특징으로는 인터페이스란 것을 명시하기 위해 앞에 대문자 I를 붙이는 것이 관례다.

 

 

예시 코드를 통해 조금 더 알아보자.

using System;

namespace Generic
{
    // “운전 가능한 것”이라는 규약
    interface IDrivable
    {
        void Drive();
        int DriveSpeed { get; set; }
    }

    // 기본 Vehicle 클래스
    class Vehicle
    {
        protected int x;
    }

    // Plane 클래스는 Vehicle을 상속 + IDrivable 인터페이스 구현
    class Plane : Vehicle, IDrivable
    {
        float x;
        float y;

        public int DriveSpeed { get; set; }

        public void Drive()
        {
            Console.WriteLine("활주로를 달립니다.");
        }

        public void Fly()
        {
            Console.WriteLine("비행기 발사!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IDrivable myPlane = new Plane();
            myPlane.Drive();
            Console.WriteLine($"속도: {myPlane.DriveSpeed}");
        }
    }
}

 

여기서 몇가지 핵심 포인트가 있다.

 

  • 클래스 상속은 1개만 가능하지만, 인터페이스는 여러 개 동시에 구현 가능하다.
  • 따라서 Plane은 Vehicle을 상속받으면서, 동시에 IDrivable 규약을 만족시킬 수 있다.
  • 실제 프로그램에서는 IDrivable 인터페이스를 구현하는 여러 타입(자동차, 비행기, 배 등)을 동일한 규약으로 다룰 수 있다.

 

또한 클래스와 달리 여러개의 인터페이스를 상속받는 것도 가능하다.

interface IFlyable
{
    void Fly();
}

interface IDrivable
{
    void Drive();
}

interface ITransformable : IFlyable, IDrivable
{
    void Transform();
}

 

 

 


 

인터페이스 vs 추상 클래스

인터페이스와 추상 클래스는 매우 유사해 보이기 때문에 실제 면접에서도 단골 질문이라 하니 핵심 차이점을 잘 알아두자.

  인터페이스 (Interface) 추상 클래스 (Abstract Class)
다중 구현 여러 개 구현 가능 단일 상속만 가능
멤버 메서드, 프로퍼티만 가능 필드, 생성자, 구현 메서드도 가능
접근 제한자 항상 public public / protected 등 자유롭게 설정 가능
목적 “규약(약속)” 정의 “공통 뼈대 + 일부 구현” 제공

 

공통점 : 인스턴스화 불가, 반드시 상속/구현해야 사용 가능

차이점 : 인터페이스는 규약, 추상 클래스는 뼈대 + 기본 구현

 

 

프로퍼티는 멤버변수가 아니라 메소드와 비슷한 취급을 하기에 가능한 것.

 

using Delegate;
using System;

namespace Delegate
{
    interface GooglePlay
    {
        void SetId();
    }

    // 제네릭으로 바꾸면
    class GooglePhone<T> where T: IAndroid
    {
        T phone; // 여기에 안드로이드 폰들만 들어가게 하고싶음
    }

    interface IAndroid
    {
        string GoogleID { get; set; }
    }

    class Galaxy : IAndroid
    {
        public string GoogleID { get; set; }

        public void SetId()
        {
            Console.WriteLine("ㅎㅇ");
        }
    }

    class Iphone { }
    class Pixel : IAndroid
    {
        public string GoogleID { get; set; }
    }
    class Motorola : IAndroid
    {
        public string GoogleID { get; set; }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // 이렇게 인터페이스로 IAndroid 돼있는 녀석들만 구글폰 제네릭에 넣도록 강제할 수 있음
            GooglePhone<Galaxy> phone = new GooglePhone<Galaxy>();
            //GooglePhone<Iphone> phone = new GooglePhone<Iphone>(); 
        }
    }
}

'C#' 카테고리의 다른 글

C# - 델리게이트 (Delegate)  (0) 2025.09.22
C# - 인터페이스 문제 풀이  (0) 2025.09.22
C# - 제네릭 (Generic)  (0) 2025.09.21
C# - 추상 클래스 실습 문제 풀이  (0) 2025.09.21
C# - Null 조건부 연산자 ?.  (0) 2025.09.21
'C#' 카테고리의 다른 글
  • C# - 델리게이트 (Delegate)
  • C# - 인터페이스 문제 풀이
  • C# - 제네릭 (Generic)
  • C# - 추상 클래스 실습 문제 풀이
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    firebase
    stack
    추상 클래스
    스택
    C#
    클래스
    자료구조
    list
    큐
    delegate
    알고리즘
    네트워크
    유니티
    Network
    console
    콘솔
    Photon
    function
    Queue
    struct
    interface
    useState
    최적화
    게임
    inputsystem
    class
    터미널
    Design Pattern
    Abstract
    unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
C# - 인터페이스 (Interface)
상단으로

티스토리툴바