20240115_기술면접 관련

2024. 1. 15. 23:06IT/TIL

오늘의 TIL은 기술면접과 관련된 지식들의 정리이다.

 

벡터의 정규화

벡터는 크기와 방향의 두 가지 요소를 가지는데, 크기를 1로 만들어서 방향만을 가리키는 벡터로 만드는 것을 벡터의 정규화라고 한다. 벡터의 정규화를 하는 방법은 해당 벡터를 그 크기만큼 나누면 얻을 수 있다

벡터의 정규화를 사용하는 이유는 캐릭터의 이동 등에서 벡터의 길이가 1을 넘어가는 경우, 단위 시간 당 이동거리가 달라지는 문제가 발생하는데, 이 경우에 벡터의 정규화를 사용하여 이동거리를 동일하게 맞출 수 있다.

 

 

Struct와 Class의 차이점

Struct와 Class의 가장 큰 차이점은 상속의 가능여부로, 클래스는 상속이 가능하지만 구조체는 상속이 불가능하다.

이와 연결되는 부분이 참조 타입과 값 타입의 차이인데, 클래스는 참조 타입으로 얕은 복사를, 구조체는 값 타입으로 깊은 복사를 한다.

 

추가 정리

참조 타입은 값을 바로 변수 값을 가져오는 것이 아니고, 해당 변수 값의 주소를 저장 함으로써 데이터를 관리하는 타입으로써, 얕은 복사는 이와 연결되어 변수의 주소를 복사하는 것을 의미한다.

값 타입은 값을 바로 변수 값으로 가져와서 저장함으로써 데이터를 관리하는 타입으로, 깊은 복사는 이와 연결되어 변수의 값을 복사하는 것을 의미한다.

따라서 얕은 복사를 하는 참조 타입은 같은 heap 메모리를 보게되지만, 깊은 복사를 하는 값 타입은 다른 heap 메모리를 보게되는 특징이 있다.

 

 

raycast

raycast를 사용할 수 있는 예는 플레이어의 점프의 구현이다. 플레이어의 점프와 관련하여 바닥에 닿은 상태를 판단하기 위해 raycast를 사용할 수 있는데 플레이어의 발 아래쪽으로 ray를 쏘아 ray가 바닥에 닿으면 점프가 가능한 상태로, ray가 바닥에 닿지 않으면 점프가 불가능한 상태로 구현할 수 있으며 3D의 경우에는 입체이다보니 ray를 4개 정도, 2D의 경우에는 앞과 뒤의 2개 정도 사용하여 구현할 수 있다.

추가 정리

raycast는 레이저를 쏘는 개념으로 특정 오브젝트의 특정 위치에서 특정 방향으로 특정 길이(힘)로 레이저를 쏴서 그 레이저가 원하는 부분에 닿는지를 판단하는 것으로 레이저가 닿았을 경우에 특정한 행동을 하게 할 수 있는 기능이다.

 

Overriding과 Overloading

Overriding은 기반 클래스에서 상속 받은 메소드를 하위 클래스에서 재정의하는 것으로 오버라이딩을 하게되면 기반 클래스의 메소드보다 파생 클래스의 메소드가 더 우선시 되는 특징이 있다. 객체 지향 프로그래밍에서 다형성(Polymorphism)은 객체가 여러 형태를 가질 수 있다는 의미인데, 이 다형성을 구현하기 위해서는 오버라이딩을 사용한다. 즉, 오버라이딩을 이용하면 메소드의 기능을 더 많이 추가할 수 있다는 특징이 있다.

Overloading은 하나의 메소드 명에 여러 구현을 한 것으로, 매개 변수의 개수 또는 타입을 다르게 정의할 수 있다. 변수의 개수나 타입이 다르지만 동일한 기능을 하는 메소드를 만드는 경우에 변수명을 다양하게 하면 코드의 일관성이 떨어지므로, 이를 해결해주는 방법이다. 예를 들어 숫자의 덧셈의 메소드를 만드는 경우, 2개의 덧셈, 3개의 덧셈을 다른 함수로 만드는 것보다, 오버로딩을 사용하여 만드는 것이 코드의 일관성을 높일 수 있다.

'IT > TIL' 카테고리의 다른 글

20240117_박싱 & 언박싱  (1) 2024.01.18
20240116_커피 심부름(프로그래머스)  (1) 2024.01.16
20240112_자료형 Int와 Float  (0) 2024.01.13
20240111_이미지에서 타일맵 만들기  (0) 2024.01.11
20240110_FSM, BT  (0) 2024.01.10