| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- C#
- 데이터 형식
- 기술면접
- Canvas Scaler
- New Input System
- github desktop
- 프로젝트 생성
- 의존성 주입
- 스타일 지침
- 유니티
- unity
- event bus
- Unity 기술면접
- Abstract Factory Pattern
- 추상 팩토리 패턴
- 테이블 데이터
- Di
- Dependency Injection
- MVP 패턴
- 구글플레이콘솔
- 게임 디자인 패턴
- 개발
- Visual Studio Installer
- 상태 패턴
- 구글 스프레드 시트
- Object Pool
- 콘솔 앱
- 오브젝트 풀
- Render Mode
- 이벤트 버스
- Today
- Total
DevDino
[Unity 기술면접] interface vs abstract class 본문
"interface와 abstract 클래스는 어떤 차이가 있으며, 각각 언제 사용하는 것이 적절한가요?"
interface vs abstract class
interface : "무엇을 할 수 있는가?"(CAN-DO)
인터페이스는 클래스가 반드시 구현해야 하는 행동 규약(Contract)의 집합입니다. 구현부가 없는 메서드의 목록만을 정의하여, 서로 다른 타입의 객체들이 동일한 행동을 하도록 강제합니다.
- 구현 강제: 반드시 구현해야 하는 약속만 정의합니다.
- 다중 상속: C#에서 클래스는 단일 상속만 가능하지만, 인터페이스는 다중 상속(구현)이 가능합니다.
- 상태 비저장: 원칙적으로 필드(멤버 변수)를 가질 수 없습니다.
- 느슨한 결합: 객체 간의 결합도를 낮추어 유연한 설계를 가능하게 합니다.
public interface IAttackable {
void Attack();
}
public interface IMovable {
void Move();
}
public class Monster : IAttackable, IMovable {
public void Attack() { Debug.Log("공격"); }
public void Move() { Debug.Log("이동"); }
}
원칙적으로 인터페이스는 상태를 가질 수 없고 구현부가 없지만, C# 8.0 이후부터는 정적(Static) 필드와 기본 구현 메서드(Default Interface Method)를 지원합니다. 다만, 객체지향의 원칙과 코드의 복잡성 문제로 실무에서는 여전히 인터페이스에 구현을 넣는 것을 지양하는 편입니다.
Abstract class : "이것의 본질은 무엇인가?" (IS-A)
abstract class(추상 클래스)는 파생 클래스들이 공유할 공통 속성과 기본 로직을 묶은 기본 틀(템플릿)입니다. 공통적인 기능은 부모가 미리 구현해 두고, 세부적인 동작만 자식 클래스에서 결정하도록 위임할 때 사용합니다.
- 공통 상태 보유: 일반적인 필드(멤버 변수)를 가질 수 있습니다.
- 선택적 구현: 완성된 공통 메서드와 미완성된 추상 메서드를 모두 가질 수 있습니다.
- 단일 상속: 다른 클래스와 마찬가지로 오직 하나의 클래스만 상속받을 수 있습니다.
public abstract class Character {
public int hp;
public abstract void Attack();
public void TakeDamage(int damage) { hp -= damage; }
}
public class Player : Character {
public override void Attack() { Debug.Log("공격"); }
}
설계를 할 때는 일반적으로 인터페이스를 우선적으로 고려하는 것이 좋습니다. 상속 체계가 깊어질수록 코드가 경직되는 추상 클래스와 달리, 인터페이스는 필요한 기능만 조립하듯 사용할 수 있기 때문입니다.
특히 유니티에서는 인터페이스를 활용하면 대상의 구체적인 타입은 몰라도 인터페이스를 상속받았다면 동일하게 처리할 수 있어 컴포넌트 간의 결합도를 크게 낮출 수 있습니다.
요약
interface: 규약 / 구현 강제 / 다중 상속 가능
abstract class: 공통 틀 / 일부 구현 제공 / 단일 상속
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] C# Garbage Collector (0) | 2026.01.01 |
|---|---|
| [Unity 기술면접] C# vs C++ 메모리 관리 (0) | 2025.12.29 |
| [Unity 기술면접] UGUI vs UI Toolkit (0) | 2025.12.24 |
| [Unity 기술면접] 메서드 Override와 Overload (0) | 2025.12.22 |
| [Unity 기술면접] Draw Call 관리 (1) | 2025.12.18 |