알고리즘(Algorithm) 이란?

  • 컴퓨터로 문제를 해결하기 위한 일련의 절차나 방법
  • 입력, 출력 / 명확성, 유한성, 유효성
  • 자연어, 순서도(flowchart), 의사코드(pseudo-code), 프로그래밍 언어 코드 등

알고리즘의 대략적인 종류

  • 자료구조 - 정렬, 탐색, 트리, 힙
  • 트리구조 - DFS, BFS.
  • 그래프 - 최단거리
  • 정수론, 난수발생, 해석기하, 그래픽 등.
Mlog공부 중!

1. Singleton 이란?

 

다른 클래스에서 공통적으로 많이 접근하는 클래스가 있을 경우 (ex GameManager) 

해당 클래스의 인스턴스(실체)를 하나로 유지하여 프로젝트에서 클래스의 데이터를 유지하고 객체를 단일화한다.

 

2. Unity에서 Singleton을 사용하는 이유

 

Manager류의 게임을 관리하는 오브젝트를 생성할 때 

인스턴스가 하나이기 때문에 데이터를 쉽게 유지할 수 있고,

정적 선언을 하기 때문에 그 유지된 데이터를 다른 클래스에서 쉽게 접근하여 사용이 가능하다.

 

3. 예제

 

public class GameManager : MonoBehaviour
{
	// static으로 정적 선언하여 프로그램이 끝날 때까지 유지하고 private하여 다른 클래스에서 수정할 수 없게 한다
    static GameManager _instance = null;

	// public 선언하여 다른 클래스에서 접근할 수 있게 하고 get 속성을 통해 접근만 가능하게 한다
    public static GameManager instance {
        get {
            if (_instance == null) {
                _instance = new GameManager();
            }
            return _instance;
        }
    }

	// MonoBehaviour를 상속받는 클래스가 인스턴스화 되는 과정을 막을 수 없으므로 Awake에서 null여부를 검사하여 예외처리를 한다
    void Awake() {
    	// 인스턴스가 비어있을 경우(막 생성되었을 때) 인스턴스를 this로 지정한다
        if (_instance == null) {
            _instance = this;
        }
        // 인스턴스가 비어있지 않을 경우(씬 이동 같은 경우로 인해 MonoBehaviour가 호출되어 인스턴스가 재생성 될 때) 재생성된 오브젝트를 파괴해준다
        else if (_instance != null) {
            Destroy(this.gameObject);
        }
        
        // 씬 로드시 해당 오브젝트를 파괴하지 않아야 다음 씬에도 유지가 된다
        DontDestroyOnLoad(this.gameObject);
    }
}

 

4. 이외의 방법

 

이외에도 MonoBehaviour를 상속받지 않고 사용하는 방법도 있다.

이 경우 하이어라키에 있는 인스턴스를 신경쓰지 않아도 되는 장점이 생긴다.

즉, 씬 이동시 인스턴스가 재생성 되는 과정을 신경쓰지 않아도 되니 Awake에서 다시 검사해주는 과정이 필요가 없다.

하지만, 말 그대로 메모리에만 존재하고 하이어라키에는 보이지 않아 인스펙터로 시각적으로 정보를 확인할 수 없다.

개발하는 입장에서 헷갈릴 수 있어 자주 사용하는 방법은 아니다. 

'C# > Unity3D' 카테고리의 다른 글

[Unity3D] Mono, IL2CPP, AOT, JIT  (0) 2022.09.26
[Unity3D] Occlusion Culling (오클루전 컬링)  (0) 2022.06.28
[Unity3D] 디펜던시 인젝션 (DI)  (0) 2022.01.27
Mlog공부 중!

1. Dependency Injection (의존성 주입)이란?

 

클래스 A가 어떤 작업을 수행하기 위해 클래스 B의 인스턴스에 의존해야 하는 경우,

B는 A의 디펜던시(의존성)이라고 한다.

 

Dependency Injection Pattern 줄여서, DI 패턴은 디펜던시를 따로 참조하지 않아도 주입해주는 기능을 한다.

 

// Case 1 (의존성이 있지만 스크립트 내에서 참조)
GameObject obj1;

void Awake() {
	obj = GameObject.Find("Player");
}

// Case 2 (유니티 인스펙터에서 접근하여 의존성을 주입)
public GameObject obj1;

// Case 3 (유니티 인스펙터에서 접근하여 의존성을 주입)
[Serializefield]
GameObject obj1;

 

 

2. 장점

 

Reduced Dependencies
- 종속성이 감소한다.
- components의 종속성이 감소하면 변경에 민감하지 않다.
More Reusable Code
- 재사용성이 증가한다.
- 일부 인터페이스의 다른 구현이 필요한 경우, 코드를 변경할 필요없이 해당 구현을 사용하도록 components를 구성할 수 있다.
More Testable Code
- 더 많은 테스트 코드를 만들 수 있다.
- Mock 객체는 실제 구현의 테스트로 사용되는 객체
종속성을 components에 주입할 수 있는 경우 이러한 종속성의 Mock 구현을 주입할 수 있다.
예를 들어, Mock 객체가 올바른 객체를 반환할 때, null을 반환할 때, 예외가 발생할 때 모두 처리한다.
More Readable Code
- 코드를 읽기 쉬워진다.
- components의 종속성을 보다 쉽게 파악할 수 있으므로 코드를 쉽게 읽을 수 있다.

참조 :

 

[Design Pattern] DI란 (Dependency Injection) - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

3. Zenject

 

Extenject Dependency Injection IOC | 유틸리티 도구 | Unity Asset Store

Use the Extenject Dependency Injection IOC from Mathijs Bakker on your next project. Find this utility tool & more on the Unity Asset Store.

assetstore.unity.com

Zenject를 통해 유니티에서 DI를 쉽고 기능적으로 사용할 수 있다.

'C# > Unity3D' 카테고리의 다른 글

[Unity3D] Mono, IL2CPP, AOT, JIT  (0) 2022.09.26
[Unity3D] Occlusion Culling (오클루전 컬링)  (0) 2022.06.28
[Unity3D] 싱글톤 패턴 (Singleton Pattern)  (0) 2022.02.07
Mlog공부 중!

가상 클래스 (virtural)

1. 가상 (virtural)

- virtual 키워드를 붙여 사용

- 파생 클래스에서 필요에 따라 오버라이드(재정의) 할 수 있지만 필수는 아님

- 자체적으로 완벽한 기능 제공 가능

 

추상 클래스 (abstract)

2. 추상 (abstract)

- abstract 키워드를 붙여 사용

- 추상 클래스는 사용 시 abstract 키워드를 반드시 붙여줘야 함

- 파생 클래스에서 필수적으로 오버라이드 필요

- 여러개의 파생 클래스에서 공통적인 정의를 제공하는 것이 목표

- CTRL + . 사용 시 함수 자동 구현

 

인터페이스 (interface)

3. 인터페이스 (interface)

- abstract와 비슷하지만 변수는 사용 불가. 단, 프로퍼티 (속성)은 사용 가능

= 부모 함수가 기능적으로 복잡해지는 것을 막기 위해 기능적으로 추가하는 것을 도와줌

- 보통 여러 클래스에 공통적인 기능을 추가하기 위해 사용

- CTRL + . 사용 시 함수 자동 구현

'C#' 카테고리의 다른 글

[C#] Garbage Collector  (0) 2022.06.21
[C#] 대리자 (Delegate, Event)  (0) 2022.04.26
[C#] 참조형 (Reference)  (0) 2022.04.25
[C#] 매개 변수 키워드 (params, ref, out, in)  (0) 2022.04.23
Mlog공부 중!

+ Recent posts