본문 바로가기

분류 전체보기

(107)
MonoBehaviour와 Unity 생명주기 1-1. Time.timeScale을 0으로 하면 Update와 FixedUpdate는 모두 호출이 되지 않을까요? 그 이유는 무엇일까요?Time.timsScale을 0으로 설정하면 게임의 시간을 멈춘 것으로 간주된다.Update 메서드는 프레임마다 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.FixedUpdate 메서드 또한 고정된 시간 간격으로 호출되므로 Time.timeScale의 영향을 받기 때문에 호출되지 않는다.1-2. Update의 호출주기에 영향을 주는 것은 무엇일까요?프레임 레이트 - Update는 각 프레임마다 호출되기 때문에, 프레임 레이트(FPS)에 직접적으로 의존한다. 높은 프레임                          레이트에서는 더 자주 호출..
선형 자료 구조 - LinkedList, Stack, QueQue 1-1. LinkedList의 특성을 설명해주세요.순서 유지 : 데이터는 삽입된 순서대로 유지 동적 크기 : 필요에 따라 노드를 추가하거나 제거하여 크기를 조정 삽입/삭제 효율성 : 중간 위치에 데이터 삽입/삭제 작업이 빠름 (O(1) 시간 복잡도) 임의 접근 비효율성 : 특정 인덱스의 데이터에 직접 접근하는 데 느림 (O(n) 시간 복잡도) 추가 메모리 사용 : 각 노드는 데이터와 다음 노드를 가리키는 포인터를 저장하기 때문에 메모리 사용량이 증가1-2. LinkedList는 언제 사용하면 좋은 자료구조인가요? 반대로 언제 사용하기 불리할까요? 데이터 순서가 중요한 경우 : 데이터 삽입/삭제 순서를 유지해야 하는 경우 중간 삽입/삭제 빈도가 높은 경우 : 데이터 목록의 중간 부분에서 자주 삽입/삭제 작..
C# 심화 문법 1-1. 다음 코드에서 제네릭을 사용한 부분을 식별하고, 해당 코드가 제네릭을 사용하지 않았을 때 발생할 수 있는 문제점에 대해 설명하세요. 이 코드에서는 제네릭을 사용하여 Box 클래스를 정의하고 있다.제네릭을 사용하지 않으면 다음과 같은 나타낼 수 있다.이 접근법에서는 제네릭을 사용하지 않기 때문에 다음과 같은 문제점이 발생할 수 있다.ⓐ 타입 안정성 부족Value 속성이 object 타입이므로, Value에 어떤 타입의 값이든 할당할 수 있다. 이는 타입 안전성을 보장하지 않는다.예를 들어, int 값을 기대하고 사용하는 경우, Value가 실제로 string일 수도 있다. 이는 런타임 오류를 초래할 수 있다.ⓑ 박싱 및 언박싱 오버헤드값 타입(int, DateTime 등)은 object 타입으로 ..
GC 가비지 컬렉터 1-1. 위의 코드가 문제가 되는 이유를 메모리 관점에서 설명해주세요. ⓐ 문자열의 불변성C#에서 문자열은 불변(immutable)이다. 즉, 한 번 생성된 문자열은 변경될 수 없다. 문자열에 새로운 내용을 추가할 때마다 새로운 문자열 객체가 생성된다.LogMessages에 메시지를 추가할 때마다, 새로운 문자열 객체가 생성되고 기존 문자열의 내용과 새로 추가된 문자열의 내용이 모두 복사된다. 이는 메모리 사용을 비효율적으로 만든다.ⓑ 메모리 재할당과 복사LogMessages가 길어질수록 새 문자열을 만들 때 필요한 메모리도 늘어나게 된다. 기존 문자열이 1000자의 길이를 가지고 있다면, 새 문자열을 생성하기 위해 기존 1000자와 새로 추가될 문자열의 길이만큼의 메모리가 필요하다.이는 반복될수록 더 ..
상속과 인터페이스 1-1. 위와 같은 코드에서, 다음과 같이 다중 상속을 하는 것이 가능할까요? 가능/불가능하다면 이유는 무엇일까요?불가능하다.C#에서는 클래스의 다중상속을 지원하지 않는다. 만약 C와 B가 인터페이스였다면 다중 상속이 가능했을 것이다.1-2. 만약 C#에서 다중 상속이 지원되었다면, 클래스 D는 어떤 문제에 직면하게 될까요?클래스 B or C를 살펴보면 같은 이름의 메서드가 존재한다. 이런 경우 모호성 문제가 발생할 것이라고 생각한다. 이는 "다이아몬드 문제(Diamond Problem)"라고 불리며, 어떤 Display 메서드를 호출해야 할지 결정하는 데 어려움이 있다.2-1. 클래스를 다른 클래스로 상속하기 위한 방법은 무엇인가요?상속선언을 통해 파생 클래스가 기본 클래스의 모든 공용 및 보호된 멤버..
스택 메모리 vs 힙 메모리 1-1. 다음 struct 코드의 결과를 예측해 보세요.10 30구조체는 값 형식이므로 point2.x 값을 바꾸어도 값이 바뀌지 않는다.1-2. 다음 class 코드의 결과를 예측해 보세요.30 30 클래스는 참조 형식이니까 point2.x 를 참조해서 x 값이 모두 30으로 바뀐다2-1. 참조 형식과 값 형식에 대해 설명해주세요.참조 형식: 실제 데이터가 저장된 메모리 위치(참조)를 저장하는 데이터 유형이다. >> 힙 메모리에 할당, 더 큰 메모리 공간을 사용하며 동적 메모리 할당에 적합 , 실제 데이터의 참조(메모리 주소)가 복사된다. 값 형식: 변수가 실제 데이터를 저장하는 데이터 유형이다. 값을 직접 메모리에 저장한다. >> 스택 메모리에 할당 , 빠르게 접근 가능 , 기본 데이터 타입들 , ..
콜백, delegate, event 1-1. 위 코드의 출력 결과는 무엇인가요? 그 이유는 무엇인가요?① MathOperation 델리게이트에 Add 메서드를 할당② MathOperation(3, 4)를 호출하면 Add(3, 4)가 호출되어 3 + 4 = 7이 반환되고, 출력 ③ 이후 MathOperation 델리게이트에 Multiply 메서드를 할당 ④ MathOperation(7, 5)를 호출하면 Multiply(7, 5)가 호출되어 7 * 5 = 35가 반환되고, 출력 1-2. 위 코드의 Main 함수를 아래처럼 바꿔도 같은 방식으로 동작할까요? 그 이유는 무엇인가요?위 코드의 Main 함수를 아래와 같이 바꿔도 같은 방식으로 동작한다.그 이유는 Func는 MyCallback 델리게이트와 동일한 서명을 갖기 때문이다.즉, 두 개의 i..
객체지향 프로그래밍 1-1.  위 코드에서 삼각형 Triangle 클래스를 새로 작성한다고 했을 때, AreaCalculator의 코드를 수정하지 않고 AreaCalculator가 삼각형의 넓이를 계산하도록 만들 수 있을까요?인터페이스를 사용하는 방법이 있다.모든 도형 클래스가 동일한 CalculateArea 메서드를 갖게 만들어 AreaCalculator가 도형 객체를 통해 면적을 계산할 수 있다.1-2. 1번 질문 답변을 바탕으로 위 코드가 유지보수 측면이 어려운 부분을 설명해주세요. ⓐ 인터페이스 구현의 강제성모든 새로운 도형 클래스는 IArea 인터페이스를 구현해야 한다.ⓑ 형 변환 및 타입 검사 AreaCalculator 클래스가 다양한 도형의 면적을 계산할 수 있도록 하려면 인터페이스를 통해 접근해야 한다. 이는..
객체와 한정자 1-1. 위 예제 코드에서 Car는 무엇을 나타내나요? car1과 car2는 무엇을 나타내나요?Car : 클래스로 자동차의 브랜드, 모델, 연식과 같은 속성을 정의한다. 또한 Car 클래스에는 자동차의 정보를 출력하는 DisPlayInfo라는 메서드가 포함되어 있다.car1과 car2는 Car클래스의 인스턴스이다. 이는 Car 클래스의 설계도를 기반으로 생성된 구체적인 객체를 의미한다. 각각car1과 car2는 독립적인 자동차를 의미하며 해당 자동차의 정보를 갖고 있다. 1-2. 위 코드에서 Car클래스에 정의된 메서드를 호출할 때 car1과 car2를 사용해야 하는 이유는 무엇인가요?Car클래스의 DisplayInfo 메서드는 인스턴스 메서드이다. 이는 특정 인스턴스와 연관된 메서드로, 해당 인스턴스의..
Tangreed Tangreed Yoonwoojoo/Tangreed (github.com) GitHub - Yoonwoojoo/TangreedContribute to Yoonwoojoo/Tangreed development by creating an account on GitHub.github.com 🕹️ 플레이 영상
내가 자주 사용하는 LayerMask 가급적이면 접근제한자를 public을 사용하는 것 보다는 private을 선호한다.그러다보니 LayerMask를 필드 초기화하는 과정에서 든 의문이 있다. LayerMask.GetMask("xyz")   vs   LayerMask.NametoLayer("xyz")LayerMask.GetMask("Player")용도 : 지정된 레이어 이름을 포함하는 레이어 마스크를 반환반환값 : 지정된 레이어 이름을 포함하는 레이어 마스크의 정수 값 (비트 필드) LayerMask.NameToLayer("Player")용도 : 지정된 레이어 이름에 해당하는 레이어 번호를 반환반환값 : 해당 레이어 이름의 정수 값 요약LayerMask.GetMask("Player"): "Player" 레이어를 포함하는 비트마스크를 반환La..
생동감 있는 몬스터 만들어 보기 게임을 진행하게 되었을 때몬스터가 가만히만 있다가 플레이어를 감지했을 때에만 추적하는 메커니즘이라면 이 것 만큼 단조로운 상황이 존재할 수 있겠는가? FixedUpdate를 사용해서 몬스터가 플레이어를 감지 할때까지 기다리는 방법보다는코루틴을 사용하여 몬스터를 제어함과 동시에 생동감을 넣어주는 방법을 생각해 봤다. Start메서드에서 UltimatedMove라는 IEnumerator를 호출하여 코루틴을 시작한다.알다 시피 코루틴은 여러 프레임에 걸쳐 실행되는 작업을 가능케 한다. ⓐ while (true)무한 루프이다. 코루틴이 중단되지 않는 한 계속 실행되도록 설계한다. ⓑ if (monsterMechanism.isGrounded)몬스터가 지면에 닿아있는지 여부 ⓒ monsterMechanism.IsP..