Pv_log

Manage scene flow and data:Principles of object-oriented programming 본문

Unity Learn 번역/Pathway: Junior Programmer

Manage scene flow and data:Principles of object-oriented programming

Priv 2021. 12. 22. 15:28

출처

 

Principles of object-oriented programming - Unity Learn

In this tutorial you’ll learn about the basics of object-oriented programming paradigm and its four associated principles. By the end of this tutorial, you will be able to: Define encapsulation Define inheritance Define polymorphism Define abstraction Ex

learn.unity.com


 

 

1. 서언

프로그래밍을 더 많이 연습해보시면, 코드를 좀 더 효율적으로 작성할 수 있겠다는 의심이 드는 상황을 식별해낼 수 있게 되실 것입니다. 아마도 여러분은 프로젝트 상에 스크립트를 더 추가할 때, 코드를 복사해 붙여 넣거나 변수들의 접근 지정자 수준을 여러 번 바꾸는 자신의 모습을 발견하셨을 것입니다.

특정 상황에 관계없이, 이러한 관찰력은 더 나은 프로그래머가 되는 데 중요한 요소입니다. - 순수한 코드의 기능 그 이상을 고민하고, 여러분의 코드의 유용성을 고려하는 것입니다.

 

코드의 유용성을 향상하는 방법은 매우 다양하며, 최상의 접근법에 대한 매우 다양한 의견들이 존재합니다! 이는 초보 프로그래머들에게 벅찰 수도 있습니다. 경험을 얻는 가장 좋은 방법은 이러한 접근법들을 여러분 스스로 시도해보는 것입니다. 여러분들이 시작하는 데 도움이 될 수 있도록, 저희는 가장 유명한 프로그래밍 패러다임(또는 패턴) 중 하나: 객체 지향 프로그래밍에 대해 소개해드리고자 합니다.

 


 

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

객체 지향 프로그래밍(OOP: Object-Oriented Programming)은 서로 관련된 메서드들과 변수들이 객체(object)라고 불리는 형태로 그룹화되어 있는 프로그래밍 패턴입니다. (OOP의 그 "Object" 맞습니다!)

데이터를 객체로 조직화하여 관리하면 많은 이점이 있습니다. 코드를 더 쉽게 이해할 수 있게 만들어 해당 코드가 달성하려는 것이 무엇인지를 더 쉽게 파악하게 해 줍니다. 위의 예시를 보면, 우리는 Rabbit 객체가 토끼의 외관을 나타내 주는 몇 가지 변수들과 토끼가 어떻게 움직일 수 있는지를 정의하는 메서드를 가지고 있음을 볼 수 있습니다. 만약 여러분이 Burrow(굴)라는 이름의 별도의 클래스를 열고 당근을 먹고 코를 흔드는 토끼와 관련된 메서드들의 모음을 발견하셨다면 혼란스러우실 것입니다.

또한 객체들은 여러분의 코드의 접근성을 제어할 수 있도록 해줍니다. 이는 즉, 다른 사람(또는 여러분 스스로가!)이 프로젝트에서 작업한 여러분의 코드를 실수로 망가뜨릴 가능성을 줄일 수 있음을 의미합니다. 또한 작성해둔 코드를 더 쉽게 재활용하거나, 다른 부분에 코드를 더 쉽게 이식할 수도 있습니다.

항상 모든 프로젝트는 최소 2명의 프로그래머가 작업한다는 것을 명심하세요: 당신과 지금으로부터 6개월 후, 여러분이 어떻게 또는 왜 그 일을 했는지 기억 못 할 때의 당신입니다. 객체 지향 프로그래밍은 여러분의 코드의 가독성을 높여주고, 프로젝트에 참가할 수도 있는 다른 프로그래머뿐만이 아니라 여러분을 위해 코드를 분리하기 힘들게(difficult to break for your own sake) 만듭니다.

일반적으로 OOP의 기둥이라고 불리는 객체 지향 프로그래밍의 4가지 주요 원칙이 존재합니다. 이는 추상화(abstraction), 캡슐화(encapsulation), 상속(inheritance), 그리고 다형성(polymorphism)입니다. 능숙하게 객체 지향 프로그래밍 패턴을 사용하시려면 이 4가지 원칙들만 익혀서 적용하시면 됩니다! 기둥들 각각의 자세한 내용은 추후에 살펴볼 것이므로, 여기서는 간단하게 살펴보겠습니다.

 


 

3. 4개의 기둥

추상화(Abstraction)란, 스크립트 상에서 복잡한 코드를 제거하고 프로그래머들이 실질적으로 필요로 하는 기능들만 보여주는 프로세스입니다. 세부 사항들을 "추상화"하면 중복되는 코드를 줄일 수 있고 가장 유용한 메서드에 쉽게 접근할 수 있도록 만들 수 있습니다. 추상화의 목포는 여러분의 코드를 가능한 깔끔하게 유지하고, 다른 프로그래머(또는 여러분이!) 사용하기 쉽게 만드는 것입니다. 위의 Rabbit 클래스 예시에서 Hop 메서드가 추상화의 좋은 예입니다. Hop 메서드 없이 프로그래머가 토끼를 움직이고자 한다면 RigidBody에 액세스하고 속도, 점프 높이 등을 설정하는 코드를 작성해야 했을 것입니다. Hop 메서드를 사용하면 이러한 모든 기능들이 추상화되어 프로그래머는 토끼가 어떻게 점프하느냐보다는 언제 점프해야 하는가에 집중할 수 있게 됩니다.

상속(Inheritance)이란, 자식 클래스라고 불리는 다른 클래스들을 생성하는 기본 클래스 생성 프로세스입니다. 자식 클래스는 기본 또는 부모 클래스의 모든 기능들을 자동으로 가져와 사용할 수 있게 됩니다. 상속 기능을 사용하면 두 클래스에서 모두 사용해야 하는 코드를 다시 작성할 필요가 줄어듭니다. 예를 들어 Bunny라는 이름의 새로운 클래스를 생성하고자 한다고 가정해봅시다. Rabbit 클래스처럼 퍼덕거리거나 서있을 수 있는 귀가 있고, 특정 색상이 될 수 있는 털이 있으며, 뛸 수 있습니다. 상속을 사용하지 않으면, 기본적으로 여러분이 이미 이전에 작성했던 모든 코드들을 새로운 클래스 안에 복사해 넣어야 합니다. 상속을 사용한다면, 단순하게 Rabbit 클래스를 확장하면 기능들이 이미 Rabbit 클래스 상에 모두 존재하고 Bunny 클래스에서 해당 기능들에 접근할 수 있게 됩니다. 이제 Bunny 클래스는 Bunny chow 먹기와 같이 Bunny와 관련된 기능들을 제공할 수 있습니다.

다형성(Polymorphism)이란, 상속을 사용할 때 가장 유용한 부분 중 하나입니다. 이는 부모 클래스로부터 상속을 받는 코드의 기능들을 대체할 수 있도록 만들어줍니다. 예를 들어, 우리의 Bunny 자식 클래스는 길들여진 토끼를 나타냅니다. 버니(Bunny)는 토끼처럼 뛸 수는 있으나, 부모인 야생 토끼보다는 좀 더 느려야 합니다. 다형성을 사용하면 Hop 메서드의 내용을 재정의할 수 있으며, Bunny 클래스만이 가지는 유일한 사용자 정의 코드를 작성할 수 있습니다. 메서드 호출은 동일하게 유지되지만, 호출된 개체에 따라서 적합한 코드가 호출됩니다.

캡슐화(Encapsulation)란, 프로그래머를 코드 복잡성에서 분리하는 것이 가장 중요한 목적이라는 점에서 추상화와 유사하지만, 여기서는 접근성 형태의 코드 안전성에 더 중점을 두고 있습니다. 캡슐화는 다른 프로그래머들을 위한 코딩 도구를 제공하고, 그들이 의도한 대로 여러분의 변수 및 메서드들만 사용할 수 있도록 해줍니다. 캡슐화된 코드에서는 다른 프로그래머들이 변수들의 값이나 객체들의 속성들을 쉽게 변경할 수 없습니다. 다른 스크립트가 여러분의 코드에 액세스 할 수 있는 다양한 방법들을 모두 설명하는 것은 불가능합니다. 그러므로 의도한 대로만 동작할 수 있도록 여러분이 제작한 코드를 캡슐화하는 것이 훨씬 좋습니다. 예를 들어 토끼의 귀 유형이 청력에 영향을 미친다고 가정해보겠습니다. 해당 값이 1번 결정되면 이는 이후에 바뀌어서는 안 되는 값입니다. 값이 변경되지 않도록 보호하기 위해서는 private 접근 제한자를 사용하여 외부의 다른 스크립트들이 해당 변수 값에 접근할 수 없도록 해야 합니다.

 


 

4. 미션들 속의 객체 지향 프로그래밍

만약 여러분이 이러한 내용들 중에 익숙한 부분이 있었다면, 제대로 보신 겁니다!

여러분은 이미 이번 패스웨이를 통해 여러분의 코드 상에 몇 가지 OOP 원칙을 구현해보셨습니다.

이번 미션의 나머지 부분들을 수행하시면서 여러분의 프로젝트의 새로운 기능들을 구현하실 때 어떤 기둥을 적용하면 좋을지 한번 생각해보세요.

다음 미션에서는 여러분의 코드를 반복하고 개선하는 방법을 찾을 때 각각의 기둥들을 보다 자세히 다시 한번 살펴보도록 하겠습니다.

 


 

5. 다음 단계

여기서 중요한 것은 객체 지향 프로그래밍이 유일한 프로그래밍 패러다임이 아니라는 점을 기억해야 한다는 것입니다. 애플리케이션을 제작하는 데에는 정말 다양한 접근방법이 존재하며, 여러분이 유니티(Unity)에서 만드는 모든 것들이 객체 지향 방식을 사용하지 않을 가능성이 높습니다. 객체 지향 프로그래밍을 비롯해 모든 프로그래밍 패턴들은 사실 여러분의 도구 벨트에 들어 있는 하나의 도구일 뿐이며, 어떤 도구가 다른 도구보다 좀 더 효과적일 수도 있으나, 완벽한 패러다임은 없습니다. 여러분이 직면한 문제에 가장 적합한 도구를 선택해야 한다는 것을 항상 기억해두세요. 이는 즉, 객체 지향 프로그래밍은 잘 확립되어 있으며, 초보 프로그래머 분들에게 정말 좋은 도구라는 것입니다. 다음 미션을 진행하시면서 여러분은 이러한 핵심 개념들에 대한 지식을 더욱 확장할 수 있으실 겁니다.

다음 튜토리얼은 드디어 프로젝트를 시작할 차례입니다! 씬의 흐름(Scene Flow)을 구현하고, 사용자가 두 씬을 넘나들고 애플리케이션을 종료할 수 있도록 버튼을 구성해보겠습니다.

 


 


수고하셨습니다!


Comments