본문 바로가기

전체 글14

[Unity] 리플렉션이 제대로 동작하지 않을 경우! Reflection returns null 결론 Unity에서는 기본적으로 스크립트를 생성하면 MonoBehaviour을 상속 받기 때문에 우리가 크게 신경을 쓰지 않지만, MonoBehaviour을 상속받으면 컴포넌트로써 작동하기 때문에 직접적으로 인스턴스화를 할 수 없다(?) 디버깅을 해보았는데, 리플렉션으로 타입을 받고 인스턴스를 생성했을 때 null이 반환된다면, 클래스가 상속중인 MonoBehaviour을 지워보자!!! If you are experiencing a case what the result of Reflection returns null, check whether your class is inheriting MonoBehaviour. If your class is inheriting MonoBehaviour, try dele.. 2023. 11. 6.
[C#] 프로퍼티 (Property) get, set 목차 프로퍼티란? get, set 접근자 프로퍼티에 접근법(사용법) 프로퍼티란? 개념적인 부분을 설명하기 위해 예시를 하나 만들어보자면 class Player { private int hp; } 다음과 같이 Player라는 클래스에 필드의 안정성을 보장하기 위해 보통 private 또는 protected 접근제한자를 사용하게 되고, 외부에서 필드에 접근하도록 하기 위해 다음과 같이 public 제한자를 갖는 메소드를 생성한다. class Player { private int hp; public int GetHp() { return hp; } public void SetHp(int hp) { this.hp = hp } } 이런 과정은 필드가 많아지면 코드가 길어지며 가독성이 떨어지게 되는데, C#에서는 이.. 2023. 8. 30.
[C#] 선형 자료구조 기초 목차 선형 자료구조와 비선형 자료구조 배열의 장단점 및 선언 동적 배열의 장단점 및 선언 연결 리스트의 장단점 및 선언 선형 자료구조와 비선형 자료구조 선형 자료구조란? 자료를 순차적으로 나열한 형태로 대표적으로 다음과 같은 자료구조 등이 있다. 배열 연결 리스트 스택 / 큐 비선형 자료 구조란? 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태로 대표적으로 다음과 같은 자료구조 등이 있다. 트리 그래프 배열의 장단점 및 선언 장점 연속된 공간을 사용 단점 자료의 추가/축소가 불가 public int[] data = new int[5] 동적 배열의 장단점 및 선언 장점 자료의 개수를 유동적으로 변경 가능 - 충분한 공간 할당 필요 연속된 공간을 사용 단점 중간에서 자료의 삽입/삭제가 발생할 경우 관련된 .. 2023. 8. 24.
[C#] 인터페이스 (Interface) 목차 인터페이스란? 인터페이스를 사용하는 이유 인터페이스의 특징 인터페이스 구현/사용법 인터페이스란? 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템이라고 한다. - Wikipedia 위 정의를 개발자의 입장에서 해석을 해보면 개발자가 '인스턴스를 쉽게 동작시키는데 도움을 주는 시스템' 이라고 생각하면 될 것 같다. 인터페이스를 사용하는 이유 언어에 따라 다르지만 C#의 경우, 클래스를 통한 다중 상속을 지원하지 않는다. 이유는 다음과 같다. abstract class Animal { public abstract void Cry(); } class Dog : Animal { public override void Cry() { Console.WriteLine("멍멍"); } } class Cat : .. 2023. 8. 24.
[C#] 일반화 (Generic) 코드를 작성하다 보면 다음과 같이 타입은 다르지만 형식이 같은 경우를 다루게 된다. class IntArray { int[] arr = new int[5]; } class FloatArray { float[] arr = new float[5]; } 하지만 타입이 많아질 경우 코드가 비효율적이게 되는데, 이러한 경우에 다음과 같이 타입을 일반화(Generic)하면 된다. class MyArray { T[] arr = new T[5]; } public void Swap(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } 위와 같이 일반화를 위해서는 클래스명 또는 메소드명 우측에 와 같이 형식 인수를 추가해주면 된다. 제네릭 클래스/메소드를 호출할 때에는 형식.. 2023. 8. 23.
싱글톤(Singleton) 패턴 싱글톤 패턴이란? 객체의 인스턴스가 오직 하나만 생성되는 패턴 장점 최초 한 번만 고정된 메모리 영역을 할당 받고 사용하기 때문에 메모리가 낭비되지 않는다 다른 클래스 간에 데이터 공유가 쉬워진다 단점 여러 클래스의 인스턴스에서 데이터에 동시에 접근하게 되면 동시성 문제가 발생할 수 있다 자원이 공유되기 때문에 매번 인스턴스의 상태를 초기화하지 않으면 테스트를 온전하게 수행할 수 없다 자식 클래스를 만들 수 없다 Unity에서의 싱글톤 패턴 구현 public class GameManager : MonoBehaviour { static GameManager s_Instance; public static GameManager Instance { get { Init(); return s_instance } }.. 2023. 8. 23.
Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의 노트 인프런에서 제공되는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 강의를 수강하며 복습차원에서 정리한 내용이며 일부 제외된 내용들이 있을 수 있습니다. 자세한 내용이 궁금하신 분들은 강의를 수강해보시기 바랍니다. Part 1 : C# 프로그래밍 입문 일반화 (Generic) 인터페이스 (Interface) 프로퍼티 (Property) Part 2 : 자료구조와 알고리즘 Big-O표기법 [C#] 선형 자료구조 기초 (tistory.com) Part 3 : 유니티 엔진 Singleton 패턴 Part 4 : 게임 서버 Part 5 : 데이터베이스 Part 6 : 웹 서버 2023. 8. 22.
빅오(Big-O) 표기법 알고리즘의 효율을 측정하기 위해 두 알고리즘 A와 B를 비교하는 경우, 두 알고리즘 사이의 실행 속도가 애매모호함 운영체제, 하드웨어 등 실행 환경에 의존적임 입력이 적은 구간과 많은 구간에서의 성능 차이가 확연 위와 같은 경우들에 대한 대안으로 Big-O 표기법을 사용한다. O(1) O(Log N) O(N) O(N Log N) O(N2) O(2N) O(N!) Big-O 표기법 수행되는 연산의 횟수를 '대략적으로' 판단 (ex. 1, N, N2, ...) public int Add(int n) { return n + n; } 위의 코드에서는 n + n의 연산이 한 번 이루어지기 때문에 연산 횟수는 1이다. public int Add(int n) { int sum = 0; for(int i = 0; i <.. 2023. 8. 22.
Level2 - 더 맵게 [C++] ▶ 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. ▶ 제한 사항 sc.. 2022. 3. 30.
[자료구조 / C++] 우선순위 큐 (Priority Queue)란? ▶ 우선순위 큐(Priority Queue)란? 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조 -> 데이터를 우선순위에 따라 처리하고 싶을 경우 사용 자료구조 추출 데이터 스택(Stack) 가장 마지막에 삽입된 데이터 큐(Queue) 가장 먼저 삽입된 데이터 우선순위 큐(Priority Queue) 가장 우선순위가 높은 데이터 ▶ 구현 방법 1. 리스트를 이용하여 구현 2. 힙(Heap)을 이용하여 구현 구현 방법 삽입 시간 삭제 시간 리스트 O(1) O(N) 힙(Heap) O(logN) O(logN) N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업만으로도 정렬이 수행됨 - 이 경우의 시간 복잡도는 O(NlogN) ▶ 기본 메소드 ˙push() : 우선순위 큐에 원소 추가 ˙pop() : 우.. 2022. 3. 29.
자료구조(Data Structure) 란? 프로그래머스의 코딩테스트 문제들을 풀이하고, 해석하기 위해서는 자료구조에 대한 이해가 기본이 되어야 한다고 판단하여 쉽게 찾아볼 수 있도록 본인 블로그에 정리하게 됨. 각각의 자료구조에 대한 자세한 내용은 나눠서 자세하게 공부할 예정 자료구조란? 저장된 데이터에 대한 작업을 보다 효율적으로 수행할 수 있는 방식으로, 컴퓨터에 데이터를 구성하고 저장하는 특수한 수단. 자료구조는 컴퓨터 과학 및 소프트웨어 엔지니어링 분야에서 광범위하고 다양한 사용 범위를 가지고 있음. 1. 배열(Arrays) 배열은 동일한 데이터 형식의 항목을 보유할 수 있는 고정 크기의 구조. 정수배열, 부동점 번호 배열, 문자열 배열 또는 배열의 배열(ex. 2차원 배열)일 수 있음. 배열은 인덱싱 되므로 임의의 액세스가 가능. 2. .. 2022. 3. 23.
[JAVA] 이클립스 main함수 인자값 입력하기 이클립스에서 자바 main함수에 인자값을 입력하는 방법에 대해 알게되어 포스팅합니다. 우선 이클립스를 실행한 뒤, main함수의 인자값인 args를 출력하는 클래스를 생성하고, 상단 메뉴바에 보이는 Run을 눌러준 뒤, Run Configurations...를 들어가줍니다. Run Configurations에 들어간 뒤, 좌측에서 본인이 생성한 프로젝트를 선택하고, 상단 메뉴에 보이는 Arguments에 들어가 Program arguments: 입력란에 인자값으로 입력할 문자열을 입력해줍니다. 마지막으로 하단의 Run을 클릭하면 하단의 콘솔창에서 Program arguments: 란에 입력했던 문자열이 그대로 출력되는 것을 확인할 수 있습니다. 항상 비주얼 스튜디오만 사용하다 이클립스를 접하니 어려운 부.. 2022. 3. 21.
[C++] sort algorithm 설명 및 사용법 sort 알고리즘이란? sort 알고리즘은 C++STL에서 제공해주는 알고리즘으로, 인자를 오름차순, 내림차순 정렬할 때에 편리하게 정렬을 가능하게 해준다 ▶ 헤더파일에 속해있음. ▶ 원형은 아래와 같음. template void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) ▶ sort(First, Last, Order) 형태로, [First, Last)의 범위를 정렬해줌. ▶ 3번째 인자(Order)를 주지 않을 경우, Default로 오름차순 정렬. ▶ sort(First, Last, greater()); -> 내림차순 sort(First, Last, less()); -> 오름차순 sort(First, Last, 사용자지정함수); -> 지정 조.. 2022. 3. 14.
Level1 - 약수의 개수와 덧셈 [C++] ▶ 문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. ▶ 제한사항 1 ≤ left ≤ right ≤ 1,000 ▶ 입출력 예 left right result 13 17 43 24 27 52 ▶ 풀이 코드 #include #include using namespace std; int solution(int left, int right) { int answer = 0; int count = 0; //약수 개수 저장할 변수 for(int i = left; i 2022. 3. 13.
반응형