내일배움캠프 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 |