게임 프로그래밍 (Game Programming)/C#

What is Object-Oriented Programming (OOP) 객체 지향 프로그래밍, 너 누구야

Ride a Code, Dine, and Rhyme 2023. 2. 13. 16:27

 

 

유니티를 시작하면서 자연스레 접하게 되는 용어 중 하나는 바로 '객체 지향 프로그래밍 (OOP)' 입니다.

위키에 검색해보면 "프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다." 라고 나옵니다. 

 

프로그래밍을 처음 접하는 분들에게는 생소한 용어들의 나열로 정확한 의미를 알기가 쉽지않죠.

우리는 앞뒤 따지지 않고 단순하게 객체 지향 프로그래밍이라는 용어를 해석해보자구요!

각 단어를 사전에서 찾아보면,

 

객체 : 행위가 미치는 대상. 

지향 : 어떠한 목표로 뜻이 쏠리어 향함.

프로그래밍 : 컴퓨터 프로그램을 작성하는 일.

 

사전적 의미로 보았을 때 '코드를 어떠한 객체로 구성하는데 중점을 둔 프로그래밍 방식이다.' 라고 볼 수 있습니다.

아직도 어떤 의미인지 확실하게 와닿지는 않을 거예요.

다음의 예시를 보고나면 조금은 이해하실 수 있을 겁니다.

 

우리가 유니티에서 '개(dog)라는 객체를 생성하고 싶다.' 라고 가정해봅시다.

 

 

 

 

함께 개(dog)를 정의해봅시다!

강아지를 구성하는 것은 사람에 따라 다르긴 하지만 저는 아래와 같이 간단하게 구성을 해보았습니다.

 

Class : 강아지라는 구성요소를 만들고 관리한다. 즉, 논리적으로 정의한 강아지를 의미한다.

 

Attribute : 몸무게, 성별, 이름, 나이, 먹이 등 강아지의 속성이다.

Method : 짖기, 걷기, 뛰기, 먹기, 자기 등 기능을 의미한다.

 

Object : Class를 이용하여 강아지를 물리적으로 표현한 객체이다.

 

 

 

 

정확하게 따지자면 복잡할 수 있으나 프로그래밍을 처음 접하는 분들을 위해 간단하게 설명해보도록 하죠!

Class는 속성을 담당하는 Attribute와 기능을 담당하는 Method로 구성되어 있고, 이 Class를 이용하여 우리가 만들 세계에 Object 중 하나로 '개(dog)'를 객체화 하는 것입니다.

 

여러분은 지금 캡슐화(encapsulation)를 이해하였습니다.

요약하자면 변수와 함수를 하나로 묶어 하나의 요소로 만드는 것이 캡슐화입니다.

 

이러한 과정을 거치면 우리의 세계에서 뛰노는 개(dog)를 생성해낼 수 있습니다.

 

 

 

개(dog)를 만들었다면 이번엔 강아지(puppy)를 만들어 봐야겠죠?!

강아지는 개의 속성과 기능을 모두 수행할 수 있다고 가정해보자구요.

실제로 위에서 간단하게 정의한 개의 속성과 기능은 강아지도 수행할 수 있습니다.

 

그렇다면 우리는 강아지를 만들 때 굳이 완전 새로운 것을 창조하는 방식을 선택하는 것이 아닌, 어미로부터 속성들을 그대로 물려받고 강아지만이 수행할 수 있는 기능을 따로 만들어 추가해주면 더 쉽지않을까요?

 

 

 

 

이러한 방식이 바로 상속(inheritance)입니다. 강아지는 개가 할 수 있는 모든 기능을 그대로 물려받고 거기에 추가해서 '어미 따라다니기' 와 같은 독립적인 기능을 추가하여 정의할 수 있습니다.

 

상속은 캡슐화를 유지하면서 클래스의 재사용이 용이하도록 해줍니다!

 

우리는 이렇게 개와 강아지를 정의하였고, 각 객체의 속성만을 달리 수정하여 여러 종류의 개와 강아지를 만들 수 있게 되었습니다.

 

OOP의 주요 이점은 코드를 구성하고, 변경하며, 프로그램의 다른 부분에서 코드를 재사용하기가 더 쉽다는 것입니다. 

또한 객체가 실제 개념을 나타내므로 코드를 이해하고 유지 관리하기가 더 쉽게되죠.
요약하자면 OOP는 코드를 객체로 그룹화하여 소프트웨어 프로그램을 설계하는 방법입니다.

 

 

객체 지향 프로그래밍의 중요한 요소에는 캡슐화와 상속과 더불어 정보 은닉, 다형성 등이 있지만 지금 단계에서는 이해하기 힘들 수 있기 때문에 다음 시간을 통해 알아보도록 하고 오늘은 이만 글을 줄이겠습니다.

수고하셨습니다 :D 

 

 

 

 

 

글 : 본인 작성

그림 : 구글링 + 본인 제작