유니티 기초 강좌: 클래스란?

소프트웨어 개발에서 클래스는 객체 지향 프로그래밍(OOP)의 기본이 되는 구성 요소입니다. 유니티와 같은 게임 엔진을 사용할 때, 클래스는 게임 개발의 구조와 흐름을 이해하는 데 중요한 역할을 합니다. 이 글에서는 클래스의 정의와 원리, 유니티에서의 활용 방법, 그리고 실제 예제를 통해 클래스의 개념을 보다 깊이 있게 이해해 보겠습니다.

1. 클래스란?

클래스는 현실 세계의 객체를 모델링하기 위한 틀입니다. 객체 지향 프로그래밍에서 객체는 데이터(속성)와 행동(메서드)을 포함하는 단위로, 클래스는 이러한 객체를 생성하기 위한 청사진 역할을 합니다. 클래스는 데이터의 형태와 그 데이터를 다루는 메서드들을 정의하며, 클래스의 인스턴스(instance)를 생성하여 실제로 사용할 수 있습니다.

1.1 클래스의 구성 요소

  • 속성(Fields): 클래스에서 정의된 데이터입니다. 예를 들어, 자동차 클래스에서 색상, 모델, 제조사 등이 속성이 될 수 있습니다.
  • 메서드(Methods): 클래스가 수행할 수 있는 행동입니다. 자동차 클래스에서는 “주행하다”, “정지하다” 등의 기능이 메서드로 정의될 수 있습니다.
  • 생성자(Constructor): 클래스의 인스턴스를 생성할 때 호출되는 특수한 메서드입니다. 초기 속성을 설정하는 데 사용됩니다.

2. 유니티에서의 클래스 사용

유니티는 C# 언어를 사용하여 스크립트를 작성하게 됩니다. 이때 모든 스크립트는 클래스 형태로 정의되며, 유니티의 많은 기능들이 클래스와 함께 사용됩니다. 예를 들어, 스프라이트, Rigidbody, Camera 등의 유니티 구성 요소들은 모두 클래스입니다.

2.1 클래스 생성하기

유니티에서 클래스를 생성하기 위해서는 새로운 C# 스크립트를 만들고, 그 안에 클래스 정의를 추가하면 됩니다. 아래는 간단한 클래스를 작성하는 예제입니다:

using UnityEngine;

public class Car : MonoBehaviour
{
    public string color;
    public int speed;

    void Start()
    {
        color = "Red";
        speed = 20;
    }

    void Update()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}

2.2 클래스의 상속

클래스는 상속을 통해 다른 클래스를 기반으로 새 클래스를 만들 수 있습니다. 상속은 코드의 재사용성을 높이고, 클래스 간의 관계를 명확히 하는 데 유용합니다. 예를 들어, ‘Vehicle’이라는 기본 클래스를 만들어서 ‘Car’와 ‘Bike’라는 두 개의 서브 클래스를 생성할 수 있습니다.

using UnityEngine;

public class Vehicle
{
    public float speed;

    public void Move()
    {
        Debug.Log("Moving at speed: " + speed);
    }
}

public class Car : Vehicle
{
    public void Honk()
    {
        Debug.Log("Car is honking!");
    }
}

public class Bike : Vehicle
{
    public void RingBell()
    {
        Debug.Log("Bike bell rings!");
    }
}

3. 클래스와 객체

클래스를 정의한 후, 실제로 그 클래스를 기반으로 객체를 생성해야만 사용이 가능합니다. 객체는 클래스의 인스턴스(instance)로, 동일한 클래스를 기반으로 여러 개의 객체를 만들 수 있습니다.

Car myCar = new Car();
myCar.color = "Blue";
myCar.speed = 30;

4. 클래스의 장점

  • 코드 재사용성: 기존 클래스를 상속하거나 재사용함으로써 새로운 기능을 쉽게 추가할 수 있습니다.
  • 캡슐화: 데이터와 메서드를 하나의 단위로 묶어 관리할 수 있어 코드의 유지보수가 용이합니다.
  • 다형성: 같은 메서드 이름으로 서로 다른 클래스에서 다른 동작을 정의할 수 있습니다.

5. 클래스 예제: 간단한 게임 오브젝트

아래의 예제는 간단한 ‘플레이어’ 클래스를 만들고, 이를 통해 게임에서 플레이어가 상호작용하는 간단한 메커니즘을 구현합니다. 이 예제는 유니티의 MonoBehaviour를 상속받아야 합니다.

using UnityEngine;

public class Player : MonoBehaviour
{
    public float health = 100f; // 플레이어의 체력

    // 적에게 피해를 입는 메서드
    public void TakeDamage(float amount)
    {
        health -= amount;
        Debug.Log("Player hit! Health: " + health);
        
        if (health <= 0)
        {
            Die();
        }
    }

    // 플레이어가 죽었을 때의 행동
    private void Die()
    {
        Debug.Log("Player died!");
        // 사망 처리 로직 추가
    }
}

6. 클래스를 활용한 실습

실제로 클래스를 활용하여 간단한 게임 개체를 만들어보는 실습을 해보겠습니다.

  1. 유니티 프로젝트 생성: 새로운 유니티 프로젝트를 생성합니다.
  2. Player.cs 파일 생성: ‘Player’ 스크립트를 작성하고 위의 코드를 붙여 넣습니다.
  3. GameManager.cs 파일 생성: 게임의 흐름을 관리하는 ‘GameManager’ 클래스를 만들어 플레이어를 소환하고 damage를 처리하는 로직을 작성합니다.
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public Player playerInstance;

    void Start()
    {
        // 플레이어 인스턴스 생성 및 초기화
        playerInstance = new Player();
        playerInstance.health = 100;
        
        // 플레이어에게 피해를 입힙니다.
        playerInstance.TakeDamage(20);
    }
}

결론

클래스는 유니티를 포함한 많은 프로그래밍 언어에서 핵심적인 개념입니다. 클래스의 활용은 코드의 가독성을 높이고, 유지보수를 쉽게 하며, 효율적인 개발을 가능하게 합니다. 이 강좌를 통해 클래스의 개념과 유니티에서의 활용 방법을 이해하고, 이를 바탕으로 더 복잡한 게임 로직을 구현할 수 있는 기초를 다지길 바랍니다.

앞으로의 강좌에서는 더 심화된 개념인 다형성, 인터페이스, 추상 클래스 등을 다룰 예정입니다. 이와 함께 실질적인 게임 개발 사례를 적용하여 유니티에서의 클래스와 객체의 활용을 실제로 경험해보는 시간을 가질 것입니다.

© 2023 유니티 기초 강좌. All rights reserved.