캡처와 클로저 ( Capture & Closure )
·
⭐C Sharp/12. 델리게이트
캡처와 클로저 ( Capture & Closure )C# 에서 람다식이나 익명 함수를 사용할 때 , 바깥에 있는 지역 변수에 접근하는 코드가 종종 등장한다.int bonus = 10;Func calc = x => x + bonus;이 때 bonus 는 calc 함수 내부에서 정의된 변수가 아니다.그럼에도 불구하도 calc 는 bonus 에 접근하고 그 값을 참조한다.이런 현상을 변수 캡처 ( Capture )라고 한다.그리고 이런 캡처 기능을 가진 함수 객체를 클로저 ( Closure ) 라고 부른다. 변수 캡처 ( Capture )변수 캡처는 람다식이나 익명 함수가 자신이 선언된 위치의 외부 변수를 참조하는 것이다.변수를 복사해서 저장하는 것이 아니라 , 변수의 참조를 저장한다.람다 ( 또는 익명 메..
너비 우선 탐색 ( BFS )
·
📊Algorithm/탐색
너비 우선 탐색 ( BFS , Breadth - First Search )자료구조 내에서 찾고자 하는 데이터를 찾는 방식은 여러 알고리즘과 기법이 존재한다.너비 우선 탐색은 그래프 탐색 알고리즘 중 하나이다. 가까운 정점부터 탐색을 진행하는 방식이다.시작 정점으로부터 거리가 가까운 정점들을 먼저 방문하고 그 다음 거리에 있는 정점들을 방문하는 방식으로 탐색이 진행된다. 이런 방식은 경로의 길이를 기준으로 탐색하는 문제, 최단 경로를 찾는 문제에서 특히 효과적이다. 시작 정점에서 출발해 연결된 정점들을 순서대로 Queue에 넣고큐에서 꺼낸 정점을 기준으로 다시 그 정점에 연결된 이웃들을 큐에 넣으며 탐색을 확장한다.깊이 우선 탐색이 한 경로를 깊에 따라가는 방식이라면,너비 우선 탐색은 한 계층씩 넓게 탐색..
깊이 우선 탐색 ( DFS )
·
📊Algorithm/탐색
깊이 우선 탐색 ( DFS , Depth - First Search )자료구조 내에서 찾고자 하는 데이터를 찾는 방식은 여러 알고리즘과 기법이 존재한다.깊이 우선 탐색은 그래프 탐색 알고리즘 중 하나이다.한 방향으로 갈 수 있는 곳까지 계속 탐색한 다음 , 막히면 다시 이전 분기점으로 돌아와 다른 경로를 탐색한다.이런 방식은 트리 구조 탐색 뿐만 아니라 , 미로 찾기 , 경로 탐색 , 사이클 검사 등 다양한 문제에 사용된다. 현재 정점에서 탐색을 시작해서 갈 수 있는 곳까지 계속 내려가며 탐색한다.더 이상 갈 곳이 없으면 되돌아가 다른 경로로 탐색을 이어나간다.한 경로를 끝까지 파고들어가기 때문에 "깊이 우선" 이라는 이름이 붙었다.탐색의 흐름은 재귀함수 호출 또는 스택 자료구조를 이용해 구현할 수 있다..
좋은 커밋 메세지 작성
·
🌱Github/기본 개념
좋은 커밋 메세지 작성 ▼ 커밋 메세지의 구조[Type] 제목본문 (선택사항)꼬리말 (선택사항) Type ( 태그 / 접두사 )커밋의 성격을 나타내는 Type 을 제목 앞에 붙인다 핵심 Typefeat : 새로운 기능 추가fix : 버그 수정 그 외 자주 사용하는 Typedocs : 문서 수정style : 코드 포맷팅 , 세미콜론 누락 등 ( 동작에 영향이 없음 )test : 테스트 코드 추가 또는 수정perf : 성능 개선refactor : 리팩토링chore : 빌드 업무 , 패키지 설정 , 라이브러리 업데이트 등ci : CI / CD 관련 변경build : 빌드 시스템 수정 ▼ 대괄호 방식 ( Bracket Style )git commit -m "[feat] Implement enemy spawn ..
불변 ( Immutable )
·
⭐C Sharp/11. 객체 지향
불변 ( Immutable )프로그래밍을 하다 보면 한 번 만들어진 데이터가 절대 바뀌지 않는 경우들을 보게 된다.문자열을 조작하려고 했는데 원본이 그대로인 경우가 발생하는데 이런 현상이 바로 불변 특성 때문이다 정의불변은 "한 번 생성된 객체의 상태가 절대 변경되지 않는다" 는 특성이다.객체가 만들어진 후에는 내부 데이터를 수정할 수 없고 , 수정하려고 하면 새로운 객체가 생성된다.대표적인 불편 타입으로는 string , delegate 그리고 대부분의 값 타입들이 있다. 예시 코드string original = "HoChan";string modified = original + " Blog";Console.WriteLine(original); // "HoChan" (원본 그대로)Console.W..
Data Format
·
🧊Unity Basic/데이터 관리
Data Format데이터를 "저장하거나 전달하기 위해 약속된 구조"컴퓨터가 데이터를 이해할 수 있도록 일정한 규칙으로 표현한 형태를 말한다.텍스트로 표현할 수도 있고 ( CSV , JSON 등 ) 이진 ( binary )형태로 빠르게 저장할 수 있다. ( Image , mp3 등 ) 데이터 포맷이 필요한 이유1. 서로 다른 시스템 간에 데이터를 주고 받기 위해게임 서버 ↔ 클라이언트웹 브라우저 ↔ 서버Unity ↔ 외부 데이터 파일 ( CSV , JSON )이때 같은 규칙 ( 포맷 ) 으로 구조화되어 있어야 해석할 수 있다 2. 데이터를 효율적으로 저장하기 위해텍스트 기반 포맷 → 사람이 읽기 쉽다Binary 포맷 → 크기가 작고 처리속도가 빠르다각 상황에 맞는 포맷을 선택해야 한다 3. 불필요한..
Dictionary<TKey, TValue>
·
⭐C Sharp/15-1. 제네릭
DictionaryDictionary는 C# 에서 가장 많이 쓰는 저장소 자료구조 ( Data Structure )이다.자료구조 중에서 데이터를 Key 와 Value 의 쌍으로 저장하는 해시 테이블을 기반으로 하는 제네릭 컬렉션이다.배열이나 리스트처럼 순서로 접근하는 방식이 아니라 고유한 키 ( Key )를 통해 값 ( Value )을 빠르게 조회할 수 있다.상황Dictionary 적합이유특정 값을 이름 또는 ID 로 빠르게 찾기적합하다O(1) 시간에 바로 접근 가능키가 중복되면 안되는 경우적합하다딱 한 키에 한 값만 저장된다순서가 중요할 때적합하지 않다삽입 순서를 보장하지 않는다→ 배열처럼 인덱스로 찾는 게 아니라 , 키로 직접 접근하는 방식이다.→ 키는 중복될 수 없고 , 값을 빠르게 찾거나 수정할 ..
251114
·
📖TIL
2D 에서 사용할 Player Controller 코드 작성using UnityEngine;using UnityEngine.InputSystem;public class Player : MonoBehaviour{ [SerializeField] private float _moveSpeed; [SerializeField] private float _jumpSpeed; private Rigidbody2D _rigid; private bool _isGrounded; private Vector2 _moveInput; private void Start() { _rigid = GetComponent(); } // 입력 값을 바탕으로 이동 private ..
251113 NavMesh
·
📖TIL
AI NavMesh바닥에 길찾기 가능한 구역을 설정해주자Bake 를 하면 이 바닥에서는 길찾기가 가능하다는 범위가 표시된다 플레이어를 따라다닐 적 스크립트를 작성한다using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.AI;public class EnemyAI : MonoBehaviour{ public Transform player; // 플레이어를 추적 private NavMeshAgent agent; void Start() { agent = GetComponent(); } void Update() { if(player != n..