DevDino

[Unity 기술면접] 객체지향 프로그래밍의 4대 원칙 본문

Unity/기술면접

[Unity 기술면접] 객체지향 프로그래밍의 4대 원칙

데브다이노 2025. 12. 11. 13:43

목표
유니티 환경에서 객체지향 프로그래밍(OOP) 4대 원칙 이해하기

객체지향 프로그래밍의 4대 원칙

객체지향 프로그래밍은 프로그램을 보다 유연하고 변경이 용이하게 만들어주는 강력한 패러다임입니다. 특히 게임 개발처럼 기획 변경이 잦고 시스템이 복잡해지는 환경에서는 이 4대 원칙을 이해하고 아키텍처를 설계하는 습관을 들이는 것이 중요합니다.

 

1. 추상화(Abstraction)

객체의 본질적인 특징만 추출하여 불필요한 세부 사항숨기는 원칙입니다.


- 핵심: 복잡한 시스템을 단순화하여, 사용자가 내부의 복잡한 구현 로직을 몰라도 쉽게 사용할 수 있게 합니다.

 

- 적용 예시: IInteractable 인터페이스나 Creature라는 추상 클래스를 만드는 경우입니다. 상호작용 시스템을 만들 때, 대상이 무엇인지 신경 쓰지 않고 Interact() 메서드 하나만 호출하도록 설계할 수 있습니다. 구체적인 작동 방식은 이를 상속받은 자식 클래스에서 구현합니다.

 

2. 캡슐화(Encapsulation)

데이터(변수)와 기능(메서드)을 하나의 단위로 묶고, 외부에서 클래스 내부의 데이터에 직접 접근하는 것을 차단(정보 은닉)하는 원칙입니다.


- 핵심: 객체의 내부 상태를 안전하게 보호하고, 의도치 않은 데이터 변조로 인한 오류를 막아 유지보수성을 크게 높입니다.

 

- 적용 예시: 유니티에서 가장 흔하게 쓰이는 방법입니다. 플레이어나 크리처의 중요 변수를 private으로 선언하여 다른 스크립트가 함부로 수정하지 못하게 막습니다. 인스펙터 창에서 값을 조절할 수 있도록 [SerializeField] 어트리뷰트를 붙이거나, AddExp() 같은 별도의 public 메서드를 통해 상태를 변경하도록 제어합니다.

 

3. 상속(Inheritance)

기존 클래스(부모)의 속성과 기능을 새로운 클래스(자식)가 물려받아 재사용하고 확장하는 원칙입니다.


- 핵심: 코드의 중복을 줄이고 재사용성을 높여 개발 비용을 절감합니다.

 

- 적용 예시: 공통적인 이동과 애니메이션 로직을 가진 Character 클래스를 만들고, 이를 상속받아 PlayerMonster 클래스를 구현합니다.

유니티는 기본적으로 MonoBehaviour를 통한 상속을 지원하지만, 다중 상속이 불가능하고 상속의 깊이가 깊어지면 코드가 경직될 수 있습니다. 따라서 유니티 환경에서는 상속과 더불어 컴포넌트를 조립하는 컴포지션(Composition) 방식을 함께 적절히 사용하는 것이 중요합니다.
컴포지션이란?
상속이 "A는 B이다(is-a)"의 관계라면, 컴포지션은 "A는 B를 가지고 있다(has-a)"의 관계입니다. 즉, 부모의 기능을 통째로 물려받는 대신, 필요한 기능(부품)들만 골라서 조립하는 방식입니다. 

 

4. 다형성(Polymorphism)

하나의 객체나 메서드 상황에 따라 다르게 동작할 수 있는 성질입니다.


- 핵심: 시스템의 결합도를 낮추고 유연한 구조를 만들어 코드의 확장성을 극대화합니다.


- 적용 예시: 부모 클래스에 virtual로 정의된 Speak() 메서드를 자식 클래스에서 override하는 경우입니다. 같은 Speak()를 호출하더라도, 자식 클래스에서 각각 다르게 실행시킬 수 있습니다.