본문 바로가기
TIL

인터페이스 vs 추상 클래스

by vvin39 2025. 4. 15.

내일배움캠프 7일차 TIL

개념정리

📌 인터페이스 (interface)

클래스에 "이 기능 꼭 만들어!!" 라고 규칙만 알려주는 설계서

  • 반드시 구현해야 할 메서드만 선언
  • 실제코드는 없음! (구현 X)
  • 클래스가 인터페이스를 구현
  • 다중 상속 가능
  • 필드, 생성자, 접근 제한자 없음 (전부 public으로 취급됨)
public interface IDamageable
{
    void TakeDamage(int damage); // 구현은 자식 클래스가!
}

📌 추상 클래스 (abstract class)

"공통 기능은 내가 줄게. 중요한 건 너가 꼭 만들어!"

  • 공통 기능 제공 + 필수 구현 기능 명시
  • 일반 메서드 + 추상 메서드(구현 안 된 메서드) 모두 가짐
  • 메서드, 변수, 생성자 포함 가능
  • 자식 클래스가 상속받아야 하고 상속은 한 개만 가능 (단일 상속)
  • 상속받는 클래스는 반드시 abstract 메서드를 오버라이드
public abstract class Enemy
{
    public int hp = 100;

    public void Move()
    {
        Debug.Log("공통 이동 로직");
    }

    public abstract void Attack();  // 자식이 반드시 오버라이드!
}

 

차이점 비교

  항목    인터페이스    추상 클래스
   목적    규약 제공    공통 기능 + 필수 구현 정의
   메서드    선언만 가능    구현 + 선언
   필드 / 변수    불가능    가능
   생성자    없음    가능
   다중 상속    가능
   여러 개 인터페이스 구현 가능
   불가능
   클래스는 하나만 상속
   접근 제한자    전부 (public)    제한자 사용 가능 (private, protected,...)

 

상황에 따른 선택 사용

   상황    인터페이스    추상 클래스
   규칙만 주고 싶을 때    O    X
   공통 기능도 같이 줄 때    X    O
   여러 개 상속해야 할 때    O    X
   변수/필드 필요할 때    X    O

인터페이스 쓰는 상황

 

  • 여러 클래스에게 공통 동작을 강제하고 싶을 때
  • 서로 관계없는 클래스들이 같은 동작을 하도록 만들고 싶을 때

 

public class Player : MonoBehaviour, IDamageable
{
    public void TakeDamage(int amount)
    {
        // 체력 감소 로직
    }
}

 

추상 클래스 쓰는 상황

  • 상속받는 클래스들이 공통된 부모 역할이 필요할 때
  • 공통 로직은 부모가 제공, 특정 기능은 자식이 구현해야 할 때
    = 공통된 로직 + 꼭 오버라이드할 메서드가 있을 때
  • 클래스들 간에 명확한 계층 구조가 있을 때
public class Goblin : Enemy
{
    public override void Attack()
    {
        Debug.Log("공격!");
    }
}

 

Unity 안에서는?

 

  • MonoBehaviour는 사실상 추상 클래스처럼 쓰임 (직접 생성 안됨)
  • OnTriggerEnter2D, Update 등은 인터페이스처럼 약속된 구조
  • 인터페이스는 게임 이벤트 처리 조건 판단 역할에 자주 사용
    예: IDamageable, ICollectible, IInteractable 등

 

 

💡 느낀 점

  • 단순히 “상속 vs 구현”이 아니라 어떤 목적에 맞는 설계인지가 더 중요
  • 인터페이스는 말 그대로 약속이고, 추상 클래스는 기능을 제공하면서 약속까지
  • 나중에 팀 프로젝트 할 때, 역할만 나눠줄 거면 인터페이스 / 기본 로직도 줄 거면 추상 클래스로!
  • 특히 유니티에서는 둘 다 자주 쓰이지만 의도를 명확히 해서 선택해야 코드의 가독성 좋고 유지보수가 더 쉬움.

.

❗ 기억하고 싶은 포인트

  • 인터페이스: "이 메서드는 꼭 만들어! 구현은 니가 해!" → 규칙만 있음 (뼈대만)
  • 추상 클래스: "이 기능은 기본 제공할게. 근데 이건 너가 채워야 해!"  →  규칙 + 공통 기능까지 있음 (뼈대 + 살점)
  • 인터페이스는 해야 할 일 목록, 추상 클래스는 필수 기능 + 기본 기능 제공하는 설계도
  • 다중 상속이 필요하면 → 무조건 인터페이스
  • 자식 클래스들끼리 구조가 비슷하면 → 추상 클래스

 

 

'TIL' 카테고리의 다른 글

이름 입력 흐름 제어..  (2) 2025.04.17
델리게이트(Delegate)와 이벤트(Event)  (0) 2025.04.16
구조체(struct) vs 클래스(class)  (0) 2025.04.14
내일배움캠프 5일차 TIL  (0) 2025.04.11
내일배움캠프 4일차 TIL  (0) 2025.04.10

최근댓글

최근글

skin by © 2024 ttuttak