| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Visual Studio Installer
- C#
- 구글 스프레드 시트
- Abstract Factory Pattern
- Render Mode
- 구글플레이콘솔
- 이벤트 버스
- 상태 패턴
- Canvas Scaler
- 개발
- 게임 디자인 패턴
- 추상 팩토리 패턴
- 오브젝트 풀
- 의존성 주입
- New Input System
- 콘솔 앱
- unity
- github desktop
- MVP 패턴
- Unity 기술면접
- event bus
- 스타일 지침
- 프로젝트 생성
- Di
- 기술면접
- Dependency Injection
- Object Pool
- 데이터 형식
- 테이블 데이터
- 유니티
- Today
- Total
DevDino
[Unity 기술면접] 객체지향 프로그래밍의 4대 원칙 본문
목표
유니티 환경에서 객체지향 프로그래밍(OOP) 4대 원칙 이해하기
객체지향 프로그래밍의 4대 원칙
객체지향 프로그래밍은 프로그램을 보다 유연하고 변경이 용이하게 만들어주는 강력한 패러다임입니다. 특히 게임 개발처럼 기획 변경이 잦고 시스템이 복잡해지는 환경에서는 이 4대 원칙을 이해하고 아키텍처를 설계하는 습관을 들이는 것이 중요합니다.
1. 추상화(Abstraction)
객체의 본질적인 특징만 추출하여 불필요한 세부 사항은 숨기는 원칙입니다.
- 핵심: 복잡한 시스템을 단순화하여, 사용자가 내부의 복잡한 구현 로직을 몰라도 쉽게 사용할 수 있게 합니다.
- 적용 예시: IInteractable 인터페이스나 Creature라는 추상 클래스를 만드는 경우입니다. 상호작용 시스템을 만들 때, 대상이 무엇인지 신경 쓰지 않고 Interact() 메서드 하나만 호출하도록 설계할 수 있습니다. 구체적인 작동 방식은 이를 상속받은 자식 클래스에서 구현합니다.
2. 캡슐화(Encapsulation)
데이터(변수)와 기능(메서드)을 하나의 단위로 묶고, 외부에서 클래스 내부의 데이터에 직접 접근하는 것을 차단(정보 은닉)하는 원칙입니다.
- 핵심: 객체의 내부 상태를 안전하게 보호하고, 의도치 않은 데이터 변조로 인한 오류를 막아 유지보수성을 크게 높입니다.
- 적용 예시: 유니티에서 가장 흔하게 쓰이는 방법입니다. 플레이어나 크리처의 중요 변수를 private으로 선언하여 다른 스크립트가 함부로 수정하지 못하게 막습니다. 인스펙터 창에서 값을 조절할 수 있도록 [SerializeField] 어트리뷰트를 붙이거나, AddExp() 같은 별도의 public 메서드를 통해 상태를 변경하도록 제어합니다.
3. 상속(Inheritance)
기존 클래스(부모)의 속성과 기능을 새로운 클래스(자식)가 물려받아 재사용하고 확장하는 원칙입니다.
- 핵심: 코드의 중복을 줄이고 재사용성을 높여 개발 비용을 절감합니다.
- 적용 예시: 공통적인 이동과 애니메이션 로직을 가진 Character 클래스를 만들고, 이를 상속받아 Player와 Monster 클래스를 구현합니다.
유니티는 기본적으로 MonoBehaviour를 통한 상속을 지원하지만, 다중 상속이 불가능하고 상속의 깊이가 깊어지면 코드가 경직될 수 있습니다. 따라서 유니티 환경에서는 상속과 더불어 컴포넌트를 조립하는 컴포지션(Composition) 방식을 함께 적절히 사용하는 것이 중요합니다.
컴포지션이란?
상속이 "A는 B이다(is-a)"의 관계라면, 컴포지션은 "A는 B를 가지고 있다(has-a)"의 관계입니다. 즉, 부모의 기능을 통째로 물려받는 대신, 필요한 기능(부품)들만 골라서 조립하는 방식입니다.
4. 다형성(Polymorphism)
하나의 객체나 메서드 상황에 따라 다르게 동작할 수 있는 성질입니다.
- 핵심: 시스템의 결합도를 낮추고 유연한 구조를 만들어 코드의 확장성을 극대화합니다.
- 적용 예시: 부모 클래스에 virtual로 정의된 Speak() 메서드를 자식 클래스에서 override하는 경우입니다. 같은 Speak()를 호출하더라도, 자식 클래스에서 각각 다르게 실행시킬 수 있습니다.
'Unity > 기술면접' 카테고리의 다른 글
| [Unity 기술면접] 메서드 Override와 Overload (0) | 2025.12.22 |
|---|---|
| [Unity 기술면접] Draw Call 관리 (1) | 2025.12.18 |
| [Unity 기술면접] Prefab과 Scene 관리 (0) | 2025.12.17 |
| [Unity 기술면접] GameObject와 Component의 관계 (0) | 2025.12.15 |
| [Unity 기술면접] Unity 생명주기(Lifecycle) (0) | 2025.12.10 |