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

Tutorial

foundational

+10XP

10 mins

(75)

Unity Technologies

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

이 튜토리얼에서는 객체 지향 프로그래밍 패러다임에 대한 기초적인 내용과 이에 관한 네 가지 원칙을 알아보겠습니다.

이 튜토리얼에서 배울 내용은 다음과 같습니다.

  • 캡슐화를 정의합니다.
  • 상속을 정의합니다.
  • 다형성을 정의합니다.
  • 추상화를 정의합니다.
  • OOP의 기본 요소가 함께 작동하여 체계적이고 효율적인 코드를 만드는 방법을 설명합니다.

Languages available:

1. 개요

프로그래밍을 연습하다 보면 코드를 좀 더 효과적으로 작성할 수 있었을 것 같은 부분을 파악하게 됩니다. 프로젝트에 많은 스크립트를 추가하면서 코드 라인을 단순히 복사해서 붙여 넣거나, 변수의 보호 수준을 여러 번 변경했을 수도 있습니다. 특정 상황에 관계없이 이러한 관찰력은 더 좋은 프로그래머가 되는 데 중요한 역할을 합니다. 코드 자체의 기능만을 넘어 코드의 활용성까지 고려하고 있기 때문입니다.

코드 활용성을 향상시키는 방법에는 여러 가지가 있으며 최적의 접근 방식에 대한 의견도 분분합니다. 이는 새로운 프로그래머에게 부담처럼 느껴질 수도 있습니다. 경험을 쌓는 가장 좋은 방법은 이러한 접근 방식을 직접 시도해 보는 것입니다. 시작하는 데 도움이 되도록 인기 있는 프로그래밍 패러다임(또는 패턴) 중 하나인 객체 지향 프로그래밍을 소개해 드리겠습니다.

2. 객체 지향 프로그래밍이란?

OOP(객체 지향 프로그래밍)는 프로그래밍 패턴으로, 서로 관련되어 있는 메서드와 변수를 그룹화하여 오브젝트(OOP에서 '객체')를 형성합니다.

데이터를 오브젝트로 구성해서 유지하면 다양한 장점이 있습니다. 우선 코드를 더 쉽게 이해할 수 있기 때문에 코드를 통해 무엇을 구현하고자 하는지 바로 파악할 수 있습니다. 위의 예시에서는 Rabbit 오브젝트에 물리적 형상을 서술하는 몇 가지 변수와 더불어 이동 방법을 정의하는 하나의 메서드가 있음을 알 수 있습니다. 굴 파기를 의미하는 Burrow라는 별도의 클래스에서 Rabbit과 관련된 메서드를 확인했는데, 그 내용이 당근을 먹으면서 코를 벌름거리는 것이라면 혼란스러울 것입니다.

또한 오브젝트를 사용하면 코드의 접근성을 제어할 수 있습니다. 이를 통해 프로젝트를 생성할 때 자신이나 누군가가 실수로 코드를 손상시킬 가능성을 줄일 수 있습니다. 코드의 다른 부분을 간단히 재사용하거나 용도를 변경할 수도 있습니다.

어떤 프로젝트를 만들든지 현재 자신이 수행한 작업을 시간이 지나면 어떤 방식으로 왜 그렇게 했는지 기억하지 못할 수 있다는 사실을 명심하세요. 객체 지향 프로그래밍은 여러분뿐만 아니라, 여러분의 프로젝트에서 작업하는 다른 프로그래머들이 코드를 더 읽기 쉽게 만들고 손상시킬 위험은 줄여 줍니다.

객체 지향 프로그래밍에는 4가지 주요 원칙이 있으며, 흔히 OOP 요소로 일컫습니다. 바로 추상화, 캡슐화, 상속, 다형성입니다. 객체 지향 프로그래밍 패턴을 성공적으로 사용하려면 이러한 네 가지 원칙만 배우고 적용하면 됩니다. 각각의 원칙에 대한 자세한 내용은 추후 알아보고, 지금은 개략적으로만 살펴보겠습니다.

3. 네 가지 원칙

추상화는 다른 프로그래머가 볼 수 있는 스크립트에서 복잡한 코드를 제거하고 다른 프로그래머에게 실제로 필요한 기능만 노출하는 프로세스입니다. 세부 정보를 추상화할 때는 중복된 코드를 줄이고 가장 유용한 메서드에 쉽게 액세스할 수 있도록 합니다. 추상화의 목표는 자신이나 다른 프로그래머들이 사용할 수 있도록 코드를 최대한 깔끔하고 단순하게 유지하는 것입니다. 위의 Rabbit 클래스 예시에서 Hop 메서드는 추상화의 좋은 예시라 할 수 있습니다. Hop 메서드가 없다면 프로그래머들은 Rabbit을 움직이기 위해 리지드바디에 액세스하여 속도, 뛰는 높이 등을 설정하는 코드를 작성해야 할 것입니다. Hop 메서드를 사용하면 이러한 모든 측면이 추상화되므로, 프로그래머는 Rabbit 클래스가 뛰는 방법이 아니라 뛰는 시점에 초점을 맞출 수 있습니다.

상속은 자식 클래스를 만들 수 있는 기본 클래스를 만드는 프로세스입니다. 자식 클래스는 기본 클래스, 즉 부모 클래스의 모든 기능을 자동으로 가져옵니다. 따라서 두 클래스에서 모두 사용되는 코드를 다시 작성할 필요성이 줄어듭니다. 예를 들어 Bunny라는 새 클래스를 만든다고 가정해 보겠습니다. Rabbit 클래스와 마찬가지로, Bunny 클래스도 접히거나 쫑긋한 귀에 털은 특정 색상으로 지정되고, 뛸 수도 있습니다. 상속이 없다면 기본적으로 이미 작성한 모든 코드를 복사하여 새 클래스에 붙여 넣어야 합니다. 하지만 상속을 사용하면 Rabbit 클래스만 확장하면 됩니다. 이미 동일한 기능이 있으며, Bunny 클래스에서도 이러한 기능에 액세스할 수 있습니다. 그런 다음 Bunny 클래스는 버니 차우 먹기와 같은 Bunny 전용 기능을 제공할 수 있습니다.

다형성은 상속을 활용할 때의 큰 장점 중 하나입니다. 이를 통해 부모 클래스에서 상속된 코드에 대한 대체 기능을 만들 수 있습니다. 예를 들어 앞서 만든 자식 Bunny 클래스는 Rabbit 클래스가 길들여진 모습입니다. Rabbit처럼 뛸 수도 있지만, Bunny는 야생성이 남아 있는 부모 클래스보다 약간 느린 것이 좋습니다. 다형성을 사용하면 Hop 메서드의 내용을 오버라이드하고 Bunny 클래스만의 커스텀 코드를 작성할 수 있습니다. 메서드 호출은 동일하게 유지되지만, 호출된 엔티티에 따라 올바른 코드가 호출됩니다.

캡슐화의 경우 프로그래머가 코드 복잡성을 느끼지 않도록 하는 것이 주 목적이라는 점에서 추상화와 유사하지만, 접근성 형태의 코드 안전성에 더욱 집중합니다. 캡슐화는 다른 프로그래머를 위한 코딩 툴을 제공하고, 이들이 의도한 대로만 변수와 메서드를 사용하도록 합니다. 캡슐화된 코드에서 다른 프로그래머들은 변수의 값이나 오브젝트의 프로퍼티를 쉽게 변경할 수 없습니다. 다른 스크립트가 코드에 액세스할 수 있는 다양한 방식을 모두 처리하기란 불가능하므로, 의도한 대로만 동작할 수 있도록 자신이 생성한 코드를 캡슐화하는 것이 훨씬 좋습니다. 예를 들어 Rabbit 클래스의 귀 유형이 청력에 영향을 미친다고 가정해 보겠습니다. 값이 설정되고 나면 추후에 변경할 수 없습니다. 이 값을 비공개로 설정해 외부 스크립트가 액세스하지 못하도록 보호하는 방식입니다.

4. 미션에서의 객체 지향 프로그래밍

이 내용 중 익숙하게 느껴지는 부분이 있나요? 맞습니다. 이 학습 길잡이 전반에서 이미 몇 가지 OOP 원칙을 코드에 구현해 왔습니다. 이 미션의 나머지 부분을 진행하면서 프로젝트에 새 기능을 작성할 때 어떤 요소를 적용할 수 있는지 생각해 보세요. 다음 미션에서는 코드 반복 작업을 수행하고 코드를 개선하는 방법을 강구하면서 각 요소를 다시 살펴보겠습니다.

5. 다음 단계

객체 지향 프로그래밍이 유일한 프로그래밍 패러다임이 아니라는 점은 기억해 둬야 합니다. 애플리케이션을 만드는 접근 방식은 다양하며, Unity에서 만드는 모든 것에 객체 지향 접근 방식을 사용하지 않을 가능성도 높습니다. 객체 지향 프로그래밍을 비롯한 모든 프로그래밍 패턴은 실제로 활용 가능한 툴 중 하나일 뿐입니다. 어떤 면에서 다른 툴보다 더 효과적인 툴이 있을 수는 있으나, 절대적으로 우월한 패러다임은 없습니다. 직면한 과제에 가장 적합한 툴을 선택해야 한다는 사실을 항상 기억하세요. 객체 지향 프로그래밍은 잘 정립된 툴이자 새로운 프로그래머에게 적합한 툴입니다. 다음 미션을 진행하면서 이러한 핵심 개념에 대한 지식을 넓힐 수 있습니다.

다음 튜토리얼에서는 프로젝트를 시작해 보겠습니다. 사용자가 두 씬 사이를 이동하고 애플리케이션을 종료할 수 있도록 씬 플로를 구현하고 버튼을 설정합니다.

Complete this Tutorial