1. 오늘의 알고리즘 코드카타 - 행렬의 덧셈
답안 :
//주의점 : 2차원 배열, 행렬 길이 GetLength
//배열의 덧셈은 어떻게? 고민해보다가 for문을 이중으로 사용하는 예시들-
//이번엔 혼자 하기보단 자료를 많이 찾아봐야했다.
public class Solution {
public int[,] solution(int[,] arr1, int[,] arr2) {
//2차원 배열의 길이 설정
int[,] answer = new int[arr1.GetLength(0),arr2.GetLength(1)];
//더하기
for(int i = 0; i < arr1.GetLength(0); i++)
{
for(int j = 0; j < arr1.GetLength(1); j++)
{
answer[i,j] = arr1[i,j] + arr2[i,j];
}
}
return answer;
}
}
이번 문제는 2차원 배열을 이해하는 것이 핵심이었다.
하지만 2차원 배열의 개념을 공부 했던 것이 C#프로그래밍 기초 즈음이었던 걸로 기억해서 대략적인 개념은 기억나도 이걸로 어떻게 문제를 풀어야 할지는 고민을 해야 했다.
2차원 배열 둘 다 크기가 같다. 그렇기에 저장할 배열 또한 동일한 길이로 만들어 주는 건 쉽다.
하지만 이후 이중for문을 통해 2개의 배열을 동시에 다루는 것이 구조 상 생각해보기 어려웠다.
2. 오늘의 공부 일지
오늘 오전은 과제 발제와 새로운 팀 구성으로 시간을 보냈다.
오후는 특강과 강의 영상을 보며 따라해보며 보냈다.
스탠더드 반 강의 내용 중 중요하게 메모한 부분들을 남겨 놓으려 한다.
Start와 Awake 구분 사용
Awake 메서드
- 호출 시점
- 스크립트가 활성화되거나 게임 오브젝트가 활성화될 때 가장 먼저 호출됩니다.
- 다른 모든 스크립트의 **Awake**가 호출된 후에 해당 게임 오브젝트의 **Start**가 호출됩니다.
- 사용 방법
- 주로 초기화 로직이나 다른 스크립트에 대한 참조를 설정할 때 사용됩니다.
- 예를 들어, 다른 스크립트에서 제공하는 매니저에 대한 참조를 설정하거나 초기 설정을 수행하는 데 사용됩니다.
Start 메서드
- 호출 시점
- Awake 메서드 호출이 완료된 이후, 게임 오브젝트가 활성화될 때 호출됩니다.
- 사용 방법
- 초기화가 완료된 후에 실행되는 로직을 구현할 때 사용됩니다.
- 주로 게임 로직이나 다른 스크립트 간의 상호작용을 설정할 때 사용됩니다.
이 호출 시점의 차이로 인해 그저께 문제가 생겨봤던 만큼 이 내용은 복습하는 기분이 들었다.
프리팹 인스턴스화:
- 프리팹을 Scene에 배치하거나 스크립트에서 인스턴스화할 수 있습니다. 이때 Instantiate 함수를 사용하며, 이 메서드는 프리팹의 복제본을 만듭니다.
// 스크립트에서 프리팹 인스턴스화 예시
public class ExampleScript : MonoBehaviour
{
public GameObject prefab; // 인스펙터에서 프리팹 할당
void Start()
{
// 프리팹을 현재 위치에 인스턴스화
GameObject instance = Instantiate(prefab, transform.position, Quaternion.identity);
}
}
이전에 비효율적인 작업 방법보다 인스턴스화를 사용하는 것을 권고 받았던 만큼 메모해둘만 하다.
싱글톤 패턴 (Singleton Pattern)
메모리 영역 4가지
1. 코드 영역 / 2. 데이터 영역 / 3. 힙 영역 / 4. 스택 영역
(이전에 배운 힙 메모리, 스택 메모리에 연계되는 내용이었다. 아직 이런 부분까지 고려하며 코딩하는 것은 많이 어렵지만 알아두어야 할 문제이다.)
싱글턴 패턴
싱글턴 패턴은 어떤 클래스의 인스턴스가 하나만 생성되도록 보장하며, 이에 대한 접근점을 제공하는 디자인 패턴입니다.
- 메모리 구조에서의 싱글턴
- 싱글턴은 주로 스태틱 변수와 스태틱 메서드를 활용하여 구현됩니다.
- 스태틱 변수를 사용하여 클래스의 인스턴스가 단 하나만 생성되도록 합니다.
- 스태틱 변수를 활용한 싱글턴
- 스태틱 변수에 싱글턴 클래스의 인스턴스를 저장합니다.
- 생성자를 private으로 선언하여 외부에서 직접 생성을 막습니다.
- 스태틱 메서드를 통해 유일한 인스턴스에 접근하도록 합니다.
- Unity 싱글턴 패턴의 예시
- Unity 싱글턴 패턴의 예시
- 싱글톤 1 (국룰 싱글톤)
-
public class GameManager : MonoBehaviour { public static GameManager Instance { get; private set; } void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); // 중복 인스턴스가 생성될 경우 제거 } } }
- 싱글톤 2 (씬 전환 싱글톤)
public class GameManager : MonoBehaviour { public static GameManager Instance { get; private set; } void Awake() // 게임오브젝트가 처음으로 켜진 그 순간 { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); // 씬 전환 시 파괴되지 않도록 설정 } else { Destroy(gameObject); // 중복 인스턴스가 생성될 경우 제거 } } public void Init(){ // 초기 세팅 } }
- 씬 전환 시 주의점 : 라이프사이클은 씬마다 발생하지 않음
- 싱글톤 3 (Generic 싱글톤)
-
using UnityEngine; public class Singleton<T> : MonoBehaviour where T : MonoBehaviour { private static T _instance; // Lazy Loading public static T Instance { get { if (_instance == null) { _instance = FindObjectOfType<T>(); if (_instance == null) { GameObject obj = new GameObject(); // obj.name = typeof(T).Name; _instance = obj.AddComponent<T>(); } } return _instance; } } } public class AudioManager : Singleton<AudioManager> { public void PlaySound(string soundName) { // 사운드 재생 로직 } }
신 전환 시 데이터 유지
PlayerPrefs 사용
- ToDo : 아래 방법들은 작업하면서 문제를 느낀 적이 많기에 이 내용을 더 공부해볼 것
DontDestroyOnLoad 메서드
Static 변수
강의 학습 내용
오늘부터 강의 내용은 유니티 3D를 다룬다. 확실히 2D 때랑은 다른 부분이 꽤 많다.
3D를 이용해 2D를 보여주는 2.5D 게임에 관심이 있기에 그런 부분으로 생각하면서도 많이 보게 되었다.
확실히 라이팅과 같은 부분을 건들이다 보니 재밌는 부분이 많지만 그만큼 코딩도 어려워 졌다.
특히나 예전에는 하드코딩하는 방식이 많았지만 벌써부터
인터페이스나 enum, IEnumerator를 많이 쓰고 있다.
아직 이런 부분들, 옵저버나 델리게이트 같은 부분을 포함해서 강의 내용을 따라하지 않으면 직접 쓰는데는 제대로 쓰고있지 못하다.
이런 구현 부분을 더 집중해서 보고 습득하지 못한다면 팀 과제 단계에 들어가서 내가 문제가 될 수도 있다는 생각이 들어 더 자세히 봐야할 것 같다.
'TIL' 카테고리의 다른 글
[TIL]2024-2-05 / 31일차 - 유니티 숙련 주차 개인과제 작업 시작 (1) | 2024.02.06 |
---|---|
[TIL]2024-2-02 / 30일차 - 강의 영상 끝마치기 (0) | 2024.02.02 |
[TIL]2024-1-31 / 28일차 - Unity 팀 과제 발표, 회고 (1) | 2024.01.31 |
[TIL]2024-1-30 / 27일차 - Unity 팀 과제 마지막 마무리 단계 (1) | 2024.01.30 |
[TIL]2024-1-29 / 26일차 - Merge의 시간이다, 하루 종일 버그를 고쳐보자 (0) | 2024.01.29 |