이전 포스팅에서 한번 다루었던 OOP에 대해 다시 한번 그 중요성을 느꼈기에 한번 더 다뤄 보고자 한다.
이전 글: https://nybot-house.tistory.com/53
게임 개발을 하는 데 있어 객체 지향 프로그래밍, 즉 OOP (Object Oriented Programming)의 중요성은 다시 말할 필요 없이 핵심이고 중요하다. 필자 또한 처음 입사했을 때 OOP에 맞게 코딩하지 않아 굉장히 많은 지적을 받았던 기억이 있다. OOP는 필자가 게임 개발을 할 때 가장 먼저 고려하는 요소이고, 이미 프로그램을 다 짠 후에도 OOP에 맞게 코드를 짰는지 다시 한번 더 고민하는 시간을 갖고는 한다. 그렇다면 OOP란 무엇이며, 어떤 역할을 할까?
OOP는 프로그램 패러다임 중에 하나로, 데이터와 그 데이터를 처리하는 함수들을 하나의 '객체'로 묶어서 생각하는 방식이다. 복잡하고 상호 작용이 많은 시스템을 설계하는 게임 개발에서 OOP를 고려하지 않고 게임을 개발한다면 수없이 많은 스파게티 코딩이 생길 것이고, 확장성, 유지 보수 등에 엄청난 시간을 쏟게 될 것이다.
OOP의 핵심 개념들
OOP는 주로 다음 네 가지 원칙에 기반한다.
- 캡슐화-은닉성 (Encapsulation)
: 데이터(속성)과 그 데이터를 다루는 함수(메서드)를 객체 내부에 포함시켜, 객체의 세부 구현 내용이 외부에 드러나지 않도록 하는 것이다. 이는 코드의 재사용성을 높이고, 변경에 따른 위협을 줄인다. - 상속성(Inheritance)
: 한 클래스(부모 클래스)의 속성과 메서드를 다른 클래스(자식 클래스)가 물려 받을 수 있게 함으로써, 공통된 코드를 재사용할 수 있게 한다. - 다형성 (Polymorphism)
: 같은 이름의 메서드가 다른 클래스에서 다양한 방식으로 실행될 수 있음을 의미한다. 이를 통해 코드의 유연성과 확장성이 증가한다. - 추상화 (Abstraction)
: 복잡한 실제 세계를 간단한 모델로 표현하는 것으로, 필요한 정보만을 추출하여 객체의 특성을 단순화한
oop가 게임 개발, 특히 Unity에서 중요한 이유
- 구조화와 조직화
: OOP를 사용하면 코드를 논리적이고 체계적으로 조직할 수 있어, 프로젝트의 복잡성을 관리하기 쉽다. 게임 개발은 다양한 객체(캐릭터, 아이템, 환경 등)을 다루기 때문에 이러한 조직화는 필수적이다. - 재사용성과 확장성
: OOP의 상속성과 캡슐화는 코드 재사용을 용이하게 한다. 이는 개발 시간을 단축하고, 프로젝트의 확장성을 높여준다. - 유지 보수의 용이성
: OOP의 추상화와 캡슐화는 코드 변경 시 영향을 받는 범위를 최소화하며, 이는 유지 보수를 용이하게 한다. - 협업
: 게임 개발은 협업의 연속이다. 99퍼센트의 개발자들은 혼자 게임 개발을 할 수 없다. OOP는 각 개발자가 시스템의 특정 부분(객체)에 집중할 수 있게 하여, 대규모 프로젝트에서의 협업을 원활하게 한다
결론
Unity 게임 엔진은 이러한 OOP 원칙을 근간으로 설계되었으며, Unity에서 스크립팅을 할 때 객체 지향 언어인 C#을 사용하게 된다. 따라서 OOP에 대한 이해는 Unity 게임 개발에서 매우 중요하며, 효율적인 게임 설계와 개발을 위한 필수적인 기술이다.
이제 다음 포스팅들에서 OOP의 4 핵심 개념에 대해 구체적으로 알아 보시면 되겠다.
상속성: https://nybot-house.tistory.com/58
캡슐화/은닉성:https://nybot-house.tistory.com/105
'C# 기초 프로그래밍 > C# Basic' 카테고리의 다른 글
[C# Basics] 재귀 함수 (0) | 2024.06.11 |
---|---|
[C# Basics] 다형성 (polymorphism) - OOP의 핵심 개념 (0) | 2024.04.15 |
[C# Basics] 캡슐화 / 은닉성 - OOP 의 핵심 개념(객체 지향 프로그래밍) (0) | 2024.04.12 |
[C# Basics] 생성자 Constructor (0) | 2024.04.02 |
[C# Basics] 스택과 힙 정리 - feat.복사와 참조, value, reference (0) | 2024.04.01 |
<C# Basics> 복사와 참조 (struct, class의 차이, 깊은 복사) (0) | 2023.12.23 |
<C# Basics> ref, out 키워드 (0) | 2023.12.11 |
<C# Basics> 함수/메서드 (2) | 2023.12.11 |