전체 코드

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(new Vector3(1.0f, 1.0f, 1.0f));
    }
}

컴포넌트 패턴(Component Pattern)이란?

  • 하나의 개체가 여러 기능을 독립적으로 사용할 수 있도록, 기능별로 클래스를 나누어 구성하는 디자인 패턴이다.
  • 한 개의 클래스 안에 모든 로직을 넣으면 결합도가 높아져 유지보수가 어렵고, 코드 수정 시 사이드 이펙트가 많이 발생할 수 있다.
  • 따라서, 각 기능을 독립적인 컴포넌트로 나누어 코드 가독성을 높이고, 모듈화(Modularization)를 통해 협업에 유용하게 만들 수 있다.

Unity에서의 Component(컴포넌트)

1. Component(컴포넌트)란?

  • Unity에서 게임 오브젝트(GameObject)의 동작을 정의하는 기본 단위.
  • 하나의 게임 오브젝트는 여러 개의 컴포넌트를 조합하여 기능을 수행할 수 있다.

2. GameObject(게임 오브젝트)란?

  • Unity에서 캐릭터, 배경, 소품 등의 오브젝트를 표현하는 기본 단위.
  • 단독으로는 큰 역할을 하지 않으며, 기능 수행을 위해 여러 개의 컴포넌트를 포함할 수 있는 컨테이너(Container) 역할을 한다.

Component 패턴을 활용한 코드 예제

using UnityEngine;

// Test 클래스는 Unity의 MonoBehaviour를 상속받아 게임 오브젝트에 부착 가능한 컴포넌트 역할을 수행함
public class Test : MonoBehaviour
{
    // Start() : 게임 시작 시 1회 실행되는 초기화 함수
    void Start()
    {
        Debug.Log("Test 컴포넌트가 시작되었습니다.");
    }

    // Update() : 매 프레임마다 실행되는 함수 (초당 수십~수백 번 호출)
    void Update()
    {
        // 현재 오브젝트를 X, Y, Z 축 방향으로 회전
        transform.Rotate(new Vector3(1.0f, 1.0f, 1.0f));
    }
}

코드 분석 및 설명

1. Test 클래스는 MonoBehaviour를 상속받음

  • MonoBehaviour는 Unity에서 게임 오브젝트의 컴포넌트로 동작할 수 있도록 해주는 기본 클래스이다.
  • MonoBehaviour를 상속받은 클래스는 Unity의 게임 오브젝트에 부착(Attach)할 수 있으며, Start()Update() 같은 주요 이벤트 함수를 사용할 수 있다.

2. Start() 함수

  • 게임이 시작되면 한 번만 호출되는 초기화 함수이다.
  • 여기서는 Debug.Log("Test 컴포넌트가 시작되었습니다.");를 통해 Unity 콘솔 창에 메시지를 출력함.

3. Update() 함수

  • Unity에서 매 프레임마다 자동으로 호출되는 함수이다.
  • 게임이 실행되는 동안 반복적으로 실행되며, 보통 오브젝트의 이동, 회전, 입력 감지 등의 기능을 구현할 때 사용됨.
  • 현재 코드에서는 transform.Rotate(new Vector3(1.0f, 1.0f, 1.0f));를 사용해 오브젝트가 계속 회전하도록 설정함.


컴포넌트 패턴의 핵심 개념

1. 기능을 독립적인 컴포넌트로 분리

  • 게임 오브젝트의 다양한 기능을 하나의 거대한 클래스에 구현하는 것이 아니라, 각 기능을 별도의 컴포넌트로 만들어 독립적으로 관리할 수 있도록 설계한다.

2. GameObject에 필요한 컴포넌트만 추가하여 조립

  • GameObject는 하나의 컨테이너 역할을 하며, 원하는 컴포넌트(Component)를 추가 및 제거할 수 있다.
  • Unity에서는 AddComponent<T>() 메서드를 통해 런타임에서 동적으로 컴포넌트를 추가할 수도 있음.
void Start()
{
    // 현재 오브젝트에 새로운 Test 컴포넌트를 동적으로 추가
    gameObject.AddComponent<Test>();
}

3. 컴포넌트 재사용 가능

  • 여러 개의 GameObject에 동일한 Test 컴포넌트를 부착하면, 동일한 기능을 여러 오브젝트에 적용할 수 있다.
  • 한 번 만든 컴포넌트는 다른 게임 오브젝트에서도 재사용 가능하여 개발 생산성을 높일 수 있음.

Unity에서 컴포넌트 관련 주요 기능

1. Add Component

  • 새로운 컴포넌트를 추가하는 기능.
  • Unity Editor에서 게임 오브젝트를 선택한 후 "Add Component" 버튼을 클릭하면 새로운 컴포넌트를 추가할 수 있다.

2. Copy Component

  • 현재 컴포넌트의 설정값을 복사하는 기능.
  • Unity Editor에서 특정 컴포넌트를 우클릭 → Copy Component를 선택하여 복사할 수 있음.

3. Paste Component

  • 복사한 컴포넌트를 동일한 오브젝트 또는 다른 오브젝트에 붙여넣는 기능.
  • Unity Editor에서 우클릭 → Paste Component를 선택하여 적용 가능.


컴포넌트 패턴을 적용했을 때의 장점

  1. 코드의 결합도를 낮추고, 유지보수를 쉽게 할 수 있음.

    • 하나의 거대한 클래스에 모든 기능을 넣는 것이 아니라, 기능별로 컴포넌트를 나눠서 관리하므로 유지보수가 쉬워진다.
  2. 코드를 재사용할 수 있어 생산성이 높아짐.

    • 만든 컴포넌트를 다른 게임 오브젝트에 쉽게 부착하여 같은 기능을 사용할 수 있음.
  3. 기능을 동적으로 추가/삭제할 수 있음.

    • AddComponent<T>()RemoveComponent<T>()를 사용하면 런타임에서도 동적으로 기능을 추가하거나 삭제할 수 있다.
  4. 협업에 유리함.

    • 각 기능을 독립적인 컴포넌트로 나누어 개발하면, 여러 개발자가 동시에 작업할 때 충돌이 줄어들고, 코드 수정이 편리해진다.

profile
李家네_공부방

0개의 댓글