EveryDay.DevUp

[Unity] 프로그래밍 패턴 in Unity 본문

Unity

[Unity] 프로그래밍 패턴 in Unity

EveryDay.DevUp 2020. 4. 29. 00:01

 

 

Unity 프로젝트 참여 시, 다른 사람에 코드를 보거나 직접 코드를 작성하다보면 잘 짜여진 코드와 보기 어렵고 이해하기 어려운 코드를 볼 수 있는데 그 차이는 코드의 설계에 달려 있다.

개인적으로 잘 짜여진 코드를 정의하면

1. 클래스의 상속 구조가 복잡하지 않은 경우

: 유사한 오브젝트라는 생각에 상속의 상속의 상속으로 클래스를 만드면서 하위 클래스로는 해당 클래스를 이해할 수 없어 상위 클래스를 모두 확인해야 되는 경우가 발생 ex) 캐릭터 > 오크 > 오크 마법사 > 오크 주술사 

2. 변수와 함수의 이름이 명확하고 ( 일반적으로 사용되는 단어 ), 하는 일이 간결한 경우

: 자신만이 알 수 있는 줄임말을 변수에 사용하거나 ex) GameManager -> GM 

3. 주석이 잘 달려있는 경우 

: 코드를 보면 알수 있는 내용까지 주석이 달려있거나, 설명이 긴 경우 가독성이 떨어짐

: 해당 주석을 통해 코드의 주의점, 왜 이런 코드가 들어갔는지에 대한 이유를 적어주는 것이 좋음

: 가장 좋은 코드는 주석없이 누구나 쉽게 이해할 수 있는 코드 

4. 같은 코드가 반복되지 않는 경우

: 코드를 작성하다보면 같거나 비슷한 코드가 반복되는 경우가 있는데, 이때 해당 부분을 수정하지 않고 반복된 채로 두면 유지보수 과정에 실수가 생김

5. 읽기 쉽도록 문단, 문장이 정리가 잘된 경우

: if 문 안에서 여러가지의 조건이 한번에 걸려 있는 경우,  긴 문장을 한번에 적는 경우, 하나의 로직이 끝났을 때 줄 바꿈이 없는 경우

잘 짜여진 코드를 만들기 위해서는 기본적으로 프로그래밍 패턴을 이해하고 사용해서 실수를 줄이는 것이 필요

Unity에서 사용한 프로그래밍 패턴을 이해함으로써 Unity 친화적인 코드 작성을 할 수 있음

● 컴포넌트 패턴 

: 하나의 컴포넌트는 다른 컴포넌트들과 독립적으로 실행되며, 유기적으로 조합하여 사용할 수 있음

 

 

 

Unity에 기본이 되는 GameObject는 Add Component 를 통해 필요한 컴포넌트를 추가하고 조합하는 구조

▶각각의 컴포넌트는 다른 컴포넌트에 영향을 받지않고 각자의 역할을 하게 됨

▶GameObject는 각각의 컴포넌트를 담는 컨테이너의 역할을 하며 보유한 컴포넌트간의 전달자 역할을 하게 됨

 

 

 

 

 

 

● 게임 루프 & 업데이트 패턴

: Unity는 현재 씬의 GameObject들을 가지고 있으며, 각 실행 타이밍에 맞추어 해당 GameObject의 MonoBehaivor를 실행 시킴

▶ Initalization 초기화 상태라면 GameObject들의 MonoBehaivor의 Awake -> OnEable -> Start 의 순서로 호출

public class Test1 : MonoBehaviour
{
    void Awake()
    {
        Debug.LogWarning("Test1 Awake");
    }

    void Start()
    {
        Debug.LogWarning("Test1 Start");
    }
}

public class Test2 : MonoBehaviour 
{ 
    void Awake() 
    { 
        Debug.LogWarning("Test2 Awake"); 
    } 

    void Start() 
    { 
        Debug.LogWarning("Test2 Start"); 
    } 
}

[ GameObject에 Test1, Test2 컴포넌트가 있다고하면, Test1 Awake -> Test2 Awake -> Test1 Start -> Test2 Start 형태로 로그가 출력됨 ]

: MonoBehaivor 는 Unity 엔진에 의해 매 프레임 마다 Update가 호출되어 로직을 수행하게 됨

 

 

위의 2가지 패턴이 Unity에 가장 기본이 되는 프로그래밍 패턴으로, C#에서도 다양한 프로그래밍 패턴을 사용하여 코드를 구조화함

'Unity' 카테고리의 다른 글

[Unity] Unity에서 스크립트 우선 순위 설정  (0) 2020.04.30
[Unity] Singletone  (0) 2020.04.29
[Unity] 해상도에 따른 2D Camera 설정  (0) 2020.04.26
[Unity] Layout 변경  (0) 2020.04.23
[Unity] Unity Hub 2.3.0  (0) 2020.04.23