CH.개인기록 노트

C#은 처음이라 13

Unity 상태 패턴

상태패턴을 모를 땐 enum으로 나열하고 코루틴으로 상태를 전환했다.하지만 이는 유지보수에 불리하고 나중엔 알아먹지 못하는 현상이 발생한다. 그러니 상태패턴을 사용하자.using System.Collections;using System.Collections.Generic;using UnityEngine;public interface IState{ void OnStart(); void OnExit(); void OnExecuteUpdate();}public class MonsterState : IState{ public virtual void OnStart() { } public virtual void OnExit() { } public virtual void OnExecu..

C#은 처음이라 2024.08.06

C# 트리,이진탐색트리(bst)

트리(tree) 트리는 계층적인 자료를 나타내는 자료구조이다. 부모 노드가 여러 자식 노드들을 가질 수 있는 1대 다 구조임. 트리의 구성요소 부모 : 루트(root)노드 방향으로 직접 연결된 노드 자식 : 루트노드 반대 방향으로 직접 연결된 노드. 뿌리(root) : 부모 노드가 없는 최상위의 노드. 트리당 하나만 존재함 가지(branch) : 부모노드와 자식 노드가 모두 있는 노드.트리의 중간에 존재한다 길이 : 출발 노드에서 도착노드까지 거치는 수 깊이 : 루트 노드부터의 길이 차수 : 자식 노드의 개수 이진탐색트리(BinarySearchTree) 이진트리는 부모 노드가 자식 노드를 최대 2개까지 가질 수 있는 트리이다. 이진탐색트리는 이진속성, 탐색속성을 적용한 트리이다. 탐색 위 그림처럼 루트 ..

C#은 처음이라 2024.03.14

C# 리스트(List)

리스트(List)는 동적배열 기반 자료구조이다. 앞선 스택과 큐와는 다르게 중간에 데이터를 삽입,삭제 할 수 있다. 배열과 비슷하지만 리스트가 자료의 입출력이 더 자유롭고 크기를 미리 정하지 않아도 되기 때문에 편리하다. 리스트 생성 및 초기화 List list = new List(); 삽입과 삭제 List list = new List(); list.Add("0번 데이터");//배열 안에 값 삽입 list.Add("1번 데이터"); list.Add("2번 데이터"); list.Add("3번 데이터"); list.Add("4번 데이터"); foreach(var item in list) { Console.Write(item+" -> "); } list.Insert(1,"중간 데이터 1번"); list.Ins..

C#은 처음이라 2024.03.13

C# 자료구조 (큐Queue)

큐(Queue)는 선입선출(First in First Out)구조로 먼저 추가된 요소가 먼저 제거되는 데이터 구조이다. 그림처럼 들어왔다가 들어온 순서대로 나가는 구조임. 큐의 멤버 함수 Enqueue : 요소를 큐의 맨 뒤에 추가한다. Dequeue : 큐의 맨 앞에 있는 요소를 제거하고 반환한다. 장점: 들어온 순서를 유지하기 때문에 순서에 따라 처리하는 작업에 유용하다.(ex.롤 대기열) 큐는 크기가 제한되지 않기 때문에 동적으로 크기가 조정 가능하다. 단점: 큐가 커질수록 요소를 추가하거나 제거하는 데에 시간이 걸릴 수 있다. using System; namespace QueueImplementation { public class Queue { private const int MAX_SIZE = ..

C#은 처음이라 2024.03.12

C# 자료구조(스택)

스택은 LIFO(last in first out)구조로 마지막에 들어온 데이터가 제일 처음 나가는 자료구조이다. 스택의 멤버 함수로는 Push : 스택 안에 데이터를 넣는다. Pop : 스택 안에 저장된 데이터를 꺼낸다. Peek : 가장 상단의 데이터를 꺼낸다. 등이 있다. 스택의 장점 : : 간단한 구조로 인해 사용이 용이하다. 요소의 추가 및 제거가 빠르다. 재귀 알고리즘 및 메모리 관리에 유용하다 단점 : 고정된 크기때문에 동적 크기 조정이 어렵다 중간에 있는 요소에 접근이 불가능하다. 스택 관리를 잘못하면 오버플로우가 발생할 수 있다. using System; using System.Diagnostics; using System.Collections.Generic; namespace _0312 ..

C#은 처음이라 2024.03.12

C# 이벤트(Event)와 델리게이트(Delegate)

델리게이트 델리게이트(Delegate)는 대리자 라고도 하며 특정 매개 변수 목록 및 변환 형식이 있는 함수에 대한 참조이다. 대리자 인스턴스를 통해 함수를 호출할 수 있다. 델리게이트에 메소드의 주소를 할당 한 후 델리게이트를 호출하면 이 델리게이트가 메소드를 호출해준다. 델리게이트는 메소드에 대한 참조이기 때문에 자신이 참조할 반환형식과 매개변수를 명시해야 한다. 요약하자면 1.델리게이트 선언 2.선언한 델리게이트가 참조할 메서드 선언 3.델리게이트의 인스턴스를 만들고 델리게이트가 참조할 메서드를 매개변수로 넘김 4.호출 이 순서로 흘러간다고 생각하면 된다. using System; namespace _0311 { internal class CalC { public delegate void TestD..

C#은 처음이라 2024.03.11

C# 일반화(Generic)

일반화(Generic)은 자료형을 선언할 때 제약조건을 걸어줌으로써 쓸 수 있는 자료형을 제한한다. 타입(T)매개변수를 사용하여 클래스, 구조체, 메서드 및 인터페이스를 정의한다. 제네릭을 사용하는 이유? 제네릭을 사용하면 코드의 재사용성을 높일 수 있고 형식 안전성(type safety)을 유지하면서 코드의 유연성을 높일 수 있다. using System; // 제네릭 클래스 선언 public class GenericClass { private T _value; // 제네릭 형식의 멤버 변수 // 생성자: 제네릭 형식의 매개변수를 받아서 멤버 변수에 할당 public GenericClass(T value) { _value = value; } // 값 반환 메서드: 제네릭 형식의 값을 반환 public ..

C#은 처음이라 2024.03.08

C# 문자열(string)

문자열(string) string은 문자들의 집합이다.내부적으로 문자배열을 통해 구현된다. 불변성(Imutable) string은 특징상 다른 기본자료형과 다르게 크기가 정해져 있지 않다. char의 집합이기 때문에 char의 갯수에 따라 크기가 유동적이다. string은 다른 기본자료형과는 다르게 구조체가 아닌 클래스(class)로 구현되어있다. 데이터 자체를 복사하는 값형식으로 사용하지만 힙 영역을 사용하기 때문에 string이 설정되면 변경할 수 없도록하는 불변성을 가지게 된다. string과 관련된 메서드들 Length : 문자열의 길이를 반환한다. string str = "Hello"; int length = str.Length; // 5를 반환 Substring : 지정된 시작 인덱스부터 문자..

C#은 처음이라 2024.03.07

C# 가상함수

가상함수? 가상함수는 기본 클래스에서 파생된 클래스에 재정의(Override)될 수 있는 함수이다. 가상함수를 통해 다형성을 구현할 수 있다. C#에서는 'virtual' 키워드를 사용하여 선언된다.기본 클래스에서 가상함수를 선언하면 파생 클래스에서 이를 재정의 할 수 있다. class Shape { public virtual void Draw()//가상함수 선언 { Console.WriteLine("도형을 그립니다."); } } class Circle : Shape { public override void Draw()//override로 재정의 { Console.WriteLine("원을 그립니다."); } } 'override'는 자식 클래스 앞에 선언된다.부모로부터 상속받은 함수와는 다르게 구현한다는..

C#은 처음이라 2024.03.06

C# 추상화(Abstract)

Abstract 추상 클래스를 정의할 때 구체화 시킬 수 없는 기능을 추상적 표현으로 정의한다. 객체 지향에서 추상화는 객체의 공통된 특징을 추출하여 인터페이스나 추상 클래스로 정의하는 것을 의미한다.. 추상 클래스(Abstract class) 하나 이상의 추상 함수를 포함하는 클래스 클래스가 추상적인 표현을 정의하는 경우 자식 클래스에서 구체화시켜 구현할것을 염두해야 함 추상 클래스는 인스턴스화 될 수 없으며, 파생 클래스에서 추상 멤버를 구현해야 함 abstract class Animal//class 앞에 abstract 선언 { //상위클래스에서 구현하기 어려운 기능 //->무슨 동물이 어떻게 운다는건데? ->그래서 구체화를 시켜야함 public abstract void Cry(); } class ..

C#은 처음이라 2024.03.06