인터페이스 ( Interface )

2025. 9. 28. 09:05·⭐C Sharp/11. 객체 지향

인터페이스 ( Interface )

객체지향 프로그래밍에서 중요한 설계 개념 중 하나.

"어떻게 동작하는지는 몰라도, 무엇을 할수 있는지"만 알면 된다. 

인터페이스는 구현 ( Implementation )을 포함하지 않고, 멤버의 시그니처 ( signature )만 정의한다.

클래스나 구조체는 :인터페이스명 을 통해 이를 구현 ( Implement ) 해야 한다. 

인터페이스는 "클래스가 따라야 할 약속 또는 규칙"이다.

 

  • 인터페이스는 속성 , 메서드 , 이벤트 , 인덱서의 선언 ( signature )만 포함한다.
  • 실제 구현은 인터페이스를 상속받은 클래스가 한다.

 

문법

▼인터페이스 정의

public interface IAttackable
{
    void Attack();              // 메서드 시그니처
    int Damage { get; set; }    // 프로퍼티 시그니처
}

 

▼인터페이스 구현

public class Warrior : IAttackable
{
    public int Damage { get; set; }

    public void Attack()
    {
        Console.WriteLine($"전사가 {Damage}의 피해를 입혔습니다!");
    }
}

 

IAttackable 은 "공격할 수 있는 무언가" 라는 개념이다.

Warrior 는 그 규칙을 따라 구현을 제공하는 클래스이다.

 

 

특징

  • 다중 상속이 불가능한 ㅋ르래스와 달리, 여러 인터페이스를 동시에 구현할 수 있다.
  • 인터페이스의 모든 멤버는 기본적으로 public 이며 접근 제한자를 따로 붙이지 않는다.
  • 인터페이스는 인스턴스화 불가하다. ( new IAttackable() )
  • 인터페이스끼리도 상속이 가능하다.

 

 

다중 인터페이스 예시

// ▼첫 번째 인터페이스
public interface IAttackable
{
    void Attack();
}

// ▼두 번째 인터페이스
public interface IHealable
{
    void Heal();
}

// ▼클래스가 여러 인터페이스를 구현
public class Paladin : IAttackable, IHealable
{
    public void Attack()
    {
        Console.WriteLine("팔라딘이 검으로 공격합니다!");
    }

    public void Heal()
    {
        Console.WriteLine("팔라딘이 아군을 치유합니다!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Paladin p = new Paladin();

        // ▼IAttackable 역할
        p.Attack();

        // ▼IHealable 역할
        p.Heal();

        // ▼다형성 활용
        IAttackable attacker = p;
        attacker.Attack();

        IHealable healer = p;
        healer.Heal();
    }
}

클래스는 : 뒤에 여러 인터페이스를 , 로 구분해 구현할 수 있다.

이렇게 하면 하나의 객체가 여러 역할 ( 공격 , 치유 ) 을 동시에 수행할 수 있다.

다형성을 통해 특정 인터페이스 타입으로 참조하면, 그 역할에 맞는 동작만 보장된다.

 

 

주의 사항

  • 구현 클래스는 인터페이스에 정의된 모든 멤버를 반드시 구현해야 한다.
  • 인터페이스를 변경하면 이를 구현하는 모든 클래스에도 영향을 주므로 설계 시 신중해야 한다.

 

 

인터페이스 사용 이유

  • 기능 보장 : 클래스가 어떤 인터페이스를 구현했다는 것은, 특정 기능을 반드시 제공한다는 의미
  • 유연한 설계 : 다양한 타입을 같은 방식으로 다룰 수 있다 ( 다형성 )
  • 느슨한 결합 : 인터페이스만 바라보고 코드를 작성하면 구현체가 변경되어도 문제 없다

 

 

 

인터페이스 vs 추상클래스

구분 인터페이스 추상클래스
목적 동작의 규칙 정의 동작의 틀 + 기본 구현 제공
다중 상속 가능 불가능
필드 선언 불가능 가능
생성자 없음 있음
구현된 메서드 (C# 8.0) 이전에는 불가능 가능

 

 

 

정리

인터페이스는 클래스 / 구조체가 반드시 따라야 할 약속을 정의하는 설계도이다.

 

 

 

참고 자료

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/interface

 

'⭐C Sharp > 11. 객체 지향' 카테고리의 다른 글

상속 ( OOP )  (0) 2025.09.28
추상 클래스 ( Abstract Class )  (0) 2025.09.28
this ( 매개변수 키워드 )  (0) 2025.09.28
클래스 ( Class )  (0) 2025.09.22
메모리 구조  (0) 2025.09.22
'⭐C Sharp/11. 객체 지향' 카테고리의 다른 글
  • 상속 ( OOP )
  • 추상 클래스 ( Abstract Class )
  • this ( 매개변수 키워드 )
  • 클래스 ( Class )
DevHoChan
DevHoChan
맨땅에서 시작하는 코딩 도전
  • DevHoChan
    Debugging Life
    DevHoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (374)
      • 🕹️Game Life (1)
      • 🖥️Computer Science (5)
      • 📖TIL (141)
        • 🔥Projects (16)
        • 💡DevTips (5)
        • 🤔발생한 문제와 해결 (5)
        • 🔮Unity Graphics (5)
        • 🎤Interview (3)
        • ✅CodingTest (9)
      • 🚀Game Release (4)
      • 🧊Unity Basic (58)
        • 📌용어 사전 (1)
        • 에디터&인터페이스 (3)
        • 디버그 (1)
        • 라이프사이클 (4)
        • 게임오브젝트 (4)
        • 프리팹 (1)
        • 오브젝트풀링 (4)
        • 애트리뷰트 (2)
        • 트랜스폼 (4)
        • 물리&충돌 (1)
        • 프레임&델타타임 (4)
        • 코루틴&이벤트 (7)
        • 수학&보정함수 (3)
        • 디자인패턴 (9)
        • UGUI (3)
        • 벡터 ( Vector ) (3)
        • 씬 ( Scene ) (2)
        • 데이터 관리 (2)
      • ⭐C Sharp (99)
        • 📌용어 사전 (1)
        • 📌문법 사전 (6)
        • 메모리 관리 (3)
        • 00. 문법 (17)
        • 01. 변수 (3)
        • 02. 자료형 (2)
        • 03. 연산자 (6)
        • 04. 조건문 (2)
        • 05. 반복문 (2)
        • 06. 배열 (3)
        • 07. 메서드(함수) (7)
        • 08. 열거형 (3)
        • 09. 구조체 (2)
        • 10. 참조 (2)
        • 11. 객체 지향 (11)
        • 12. 델리게이트 (3)
        • 13. 디자인 패턴 (7)
        • 14. LINQ (1)
        • 📂▼자료구조 (2)
        • 15-1. 제네릭 (3)
        • 15-2. 배열 (4)
        • 15-3. 리스트 (2)
        • 15-4. 스택과 큐 (2)
        • 15-5. 딕셔너리 해시테이블 (2)
        • 15-6. 트리와 그래프 (3)
      • 📊Algorithm (16)
        • BigO (2)
        • 정렬 (4)
        • 셔플 (2)
        • 탐색 (6)
        • 최적화 (1)
      • 📝Game Design (16)
      • 🤖​AI Tools (12)
        • AI 리뷰 분석 (6)
        • Player2 (0)
        • 3D 모델링 (1)
        • 2D 스프라이트 (0)
        • 이미지 (2)
        • 사운드 (1)
        • 동영상 (1)
        • 문서 (1)
      • 🌍Network (6)
      • 🌱Github (11)
        • 기본 개념 (7)
        • 명령어 (1)
        • 도구 활용 (1)
      • ⚙️Visual Studio (5)
        • 🔧설치 및 환경설정 (2)
        • ⌨️HotKey (1)
        • 🚨디버깅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    유니티
    OOP
    csharp
    자료형
    CodingTest
    문법
    gamedesign
    c#
    기획
    객체지향
    게임디자인
    GitHub
    자료구조
    부트캠프
    메모리관리
    til
    unity
    게임기획
    디자인패턴
    algorithm
  • 최근 댓글

  • 최근 글

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

티스토리툴바