나는 내 기억력을 믿지 않는다 24

[기술면접 대비] 상속이란 무엇인지, 프로젝트 내에 적용한 예시까지

상속이란 부모클래스의 특성과 동작을 자식클래스가 재사용 하는 것을 말한다. 이를 통해 코드의 재사용성을 높이고 클래스 간의 계층 구조를 형성할 수 있다. 프로젝트 내에서 대표적으로 사용했던 것은 플레이어 FSM 디자인패턴과 포션 그리고 퀘스트 등이 있다. FSM 디자인 패턴에서는 인터페이스에서 구현한 플레이어의 State를 각각 Enter, Exit, HandleInput, Update, FixedUpdate 인터페이스로 구현하여 이를 BaseState에서 강제 구현을 시킨 후, 각각의 상태들이 BaseState를 상속받는 형식으로 디자인 패턴을 구현하여 재사용한 경우가 있으며, 포션은 스태미너포션과 힐링포션 두 가지를 하나의 상위 potion클래스를 구현하여 힐링양, 포션의 이미지 리소스 위치 등을 상..

[기본 지식] 객체지향 정리 (OOP, SOLID원칙)

객체지향이란? 객체는 세계에 존재하는 사물이나 개념 등을 의미한다. 그리고 객체 지향 프로그래밍은 객체를 프로그래밍에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화를 통해 모델링하는 프로그래밍 방식이다. 객체지향 프로그래밍은 프로그램을 개체 또는 객체의 모음으로 구성한다. 객체들은 데이터와 데이터를 처리하는 메서드(함수)로 구성되어 있다. 객체지향 프로그래밍은 현실 세계의 사물이나 개념을 모델링하기에 적합하며, 코드를 더 이해하기 쉽고 유지보수하기 쉽게 만들어 준다. C#에서의 객체지향 프로그래밍은 클래스와 객체를 기반으로 한다. 클래스는 객체를 만들기 위한 템플릿이며, 객체는 클래스의 인스턴스이다. 여기서 클래스는 데이터와 메서드로 구성된다. 예를 들어, 자동차를 객체지향적으로 만..

[기술면접] 자료구조란?

자료구조는 데이터를 구성하고 조직하는 방법을 나타낸다. 게임개발에 자주 사용되는 자료구조는 다음과 같다. 배열: 가장 기본적인 자료구조중 하나로 동일한 타입의 데이터 요소를 순서대로 저장한다. 리스트: 배열과 유사하지만 동적으로 크기를 조정할 수 있는 자료구조이다. 다양한 데이터를 동적으로 관리하는데 유용하다. 딕셔너리: 키와 값을 저장하여 사용하는 자료구조로 특정 키를 통해 값을 불러오는 형식이다. 큐: 선입선출(FIFO) 구조를 가지는 자료구조이다. 이벤트 처리나 작업 대기열 등에 사용될 수 있다. 스택: 후입선출(LIFO) 구조를 가지는 자료구조이다. 재귀 알고리즘 등에 사용할 수 있다. 이러한 자료구조들은 게임에서의 데이터를 효율적으로 조직하고 관리하는데 도움이 된다. 유니티는 이러한 자료구조를 ..

[기술 면접] 값 형식과 참조 형식

값 형식은 스택 메모리에 저장되며 변수가 해당 값 형식의 값을 직접 포함하고 있다. 변수간의 할당이 값 복사를 통해 이루어지며 이는 주로 데이터유형인 int, float, bool 등으로 사용된다. 참조 형식은 힙 메모리에 저장되며 변수는 실제 데이터 대신 데이터가 저장된 메모리 위치 즉, 주소를 가리키고 있다. 변수간의 할당이 값이 아닌 주소 복사를 통해 이루어지며 주로 Array, Class, Interface등에 사용된다.

[기술 면접] 선택 정렬과 버블 정렬

버블 정렬 버블 정렬은 인접한 두 요소를 비교하고, 비교된 값이 작다면 서로 교환하는 방식으로 정렬하는 알고리즘을 말한다. 버블 정렬의 시간 복잡도는 O(n^2)이다. 모든 원소에 대한 검사가 이루어지기 때문에 매우 정밀하다는 장점이 있지만, 그렇기에 시간이 오래걸린다는 단점이 있다. 버블 정렬 코드 (C#) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BubbleAlgorithm { internal class Program { static void Main(string[] args) { int[] data = { 10, 1,..

[기술] 힙과 스택, 박싱과 언박싱, SOLID원칙

힙과 스택 스택 - 스택은 값 형식이 저장되며 프로그램을 실행하는데 필요한 메모리 공간으로 메소드가 호출되는데 필요한 메모리가 스택에 저장된다. 여기서 필요한 메모리는 메소드가 사용하는 코드들을 말한다. 컴퓨터의 메모리에는 한계가 있기 때문에 코드를 마음대로 메모리에 저장하게 되면 메모리의 한계인 Stack Overflow에 부딪혀 더 이상 정보를 저장할 수 없게된다. 그래서 메모리를 효율적으로 사용하기 위해 함수의 호출이 종료되면 그에 따른 스택 메모리도 자동으로 해체되며 LIFO 방식으로 가장 나중에 저장된 값을 반환하게 된다. 힙 - 힙은 참조 형식이 저장되며 new키워드를 이용해서 생성한 메모리가 저장된다. 그래서 메소드가 아닌 전역변수도 힙에 저장된다. 배열, 컬렉션 등등 new로 생성하기 때문..

[기술 면접 예상] 정렬 알고리즘과 사용 이유 및 예시

정렬알고리즘은 게임 오브젝트를 처리하거나 게임 내 요소를 정렬할 때 사용된다. 게임 화면에 다양한 오브젝트를 그리거나 사용자의 입력을 처리하거나 충돌을 검사할 때 등 사용될 수 있다. 정렬알고리즘의 예시 중 버블정렬은 가까운 두 원소를 비교하여 순서가 잘못되어있으면 서로 교환하는 방식으로 동작하며 시간복잡도는 O(n^) 이다. 작은 크기의 리스트에서는 효율적일 수 있으나 큰 크기의 리스트에서는 성능이 떨어진다. 삽입정렬은 리스트를 순차적으로 탐색하면서 각각의 원소를 적절한 위치에 삽입하는 것을 말한다. 마찬가지로 O(n^) 이지만 버블정렬보다 좀 더 효율적이다. 병합정렬은 리스트를 반으로 나눈 후 각각을 정렬하여 합병하는 형식이다. 시간복잡도는 O(n log n )으로 효율적인 정렬 중 하나이다. 퀵 정..

람다식이란

간결하고 가독성이 높은 코드를 작성하기 위해 사용되는 것이 바로 람다식이다. 람다식을 이용하면 코드 길이를 줄일 수 있으며 의미있는 변수명을 사용하여 코드의 가독성을 높일 수 있다. 또한 메모리를 효율적으로 사용할 수 있고 LINQ를 비롯한 다양한 C#기능에서 널리 사용되며 이를 통해 복잡한 코드를 더더욱 쉽게 작성할 수 있다. 이는 개발자의 생산성을 높여주며 코드의 유지보수성을 높일 수 있다고 볼 수 있다. 람다식은 성능에 크게 문제가 없다는 것이 일반적인 견해이다. 오히려 람다식을 컴파일러가 더 효율적으로 처리해서 일반 메서드 호출보다 더 빠른 성능을 보일수도 있다. 매우 복잡한 람다식을 사용하거나, 반복문 내부에 람다식을 사용한다면 더 성능이 저하될 수 있으며 메모리 할당이 덤 ㅏㄶ아질 수도 있다...

delegate, event, action, func간의 차이

Delegate 델리게이트는 C# 예약어로 값을 담을 때 값의 범위를 함수도 포함될 수 있지 않을까 하는 생각에서 나오게된 문법으로 함수 여러개를 동시에 실행시키고 싶을 때 사용됩니다. 델리게이트의 장점으로는 복잡한 코드와 복잡한 함수 연결을 좀 더 간단하게 처리할 수 있습니다. Event 이벤트 콜백은 Observer디자인 패턴과 연관이 있는데 이벤트는 작업 실행을 알리기 위해 보내는 메시지로 이 작업은 버튼 클릭과 같은 사용자 조작으로 발생하거나, 속성 값 변경등 상태의 변화가 필요한 구독자들에게 전달할 때 유용합니다. event의 주의사항으로는 외부에서 자유롭게 구독하거나 해지는 가능하지만 이벤트 발생은 오직 내부에서만 가능하다는 것입니다. event연산자로 증감연산자를 이용해 구독, 취소를 하는 ..

델리게이트 의 개념

델리게이트는 반환 타입과 매개변수 타입이 같은 메서드의 포인터를 가리킬 수 있는 C#의 기능이다. 같은 타입의 메서드를 여러 개 등록할 수 있으며, invoke가 실행되면 등록된 메서드들이 호출되는데 이를 델리게이트 체인이라고 한다. 이러한 델리게이트의 장점은 특정 시점에 여러가지 메서드를 한번에 실행해야 한다면 그러한 메서드들을 구독시켜서 호출한다던지 델리게이트 인스턴스를 다른 메서드의 매개변수로 넘겨서 콜백으로 사용하는 방식으로 많이 사용된다. 델리게이트를 이용해 클래스끼리 통신을 한다면 캡슐화에 도움이 된다. 왜냐하면 invoke하는 클래스는 델리게이트에 어떤 메서드가 들어있는지 몰라도 상관없기 때문이다.