[내일배움캠프 본 캠프 73일차] C# 개념과 유니티

2026. 1. 12. 22:30본 캠프

모의면접에서 받았던 기술면접의 질문 중 하나인 얕은 복사와 깊은 복사의 차이는 무엇일까?

 

얕은 복사 - 겉껍데기만 새로 만들고, 안에 들어있는 참조(주소)는 공유 하는 복사

깊은 복사 - 겉도 새로 만들고, 안에 들어있는 것까지 전부 새로만드는 복사

 

라고 설명할 수 있겠으나 좀 더 자세하게 파보면

 

C#에는 크게 값 타입(Value Type) bool, int, double, struct  등 변수에 값이 직접 들어있는 것과

참조 타입(Reference Type) 인 Class, List<T>, 배열 및 대부분의 '객체' 들 처럼 변수에 값이 아닌 객체가 있는 주소가 들어있는 걸로 나눌 수 있다.

 

class는 대입/복사할 때 내용물이 아니라 주소가 복사되는 형식이다.

 

얕은 복사는 '주소를 복사' 하고 깊은 복사는 '내용을 새로 생성하는 복사' 다.

 

얕은 복사의 형태는 실시간 동기화 상태와 동일하다. 주소를 복사해 왔기 때문에

반면 깊은 복사의 형태는 일종의 snapshot 형태다. 순간의 상태를 고정해서 보관하고 그 상태를 유지해야 하는 경우다.

UI에서 임시로 보여주거나 이전상태와 비교해야 하거나 설정 변경을 취소하거나 스킬 선택을 취소하는 등등

되돌아갈 기준점이 필요할 때 주로 사용된다.

 


유니티 전략패턴

 

유니티 전략패턴은 크게 3가지역할로 구성되는데

1. Strategy(전략 인터페이스)

2. ConcreteStrategy(구체 전략)

3. Context(문맥 객체) 

말이 어렵게 느껴져서 그렇지 기존의 인터페이스 형식을 빌려서 설명한다면

'공격'이라는 메서드를 실행할 전략인터페이스를 만들고나서

구체 전략들은 전략 인터페이스에서 구현하라고 지시한 '공격'을 각각 근접공격/원거리공격 형태로 구체적인 로직을 구현한다.

그리고 해당 전략 인터페이스를 구현하는 객체에서 선언한 뒤 해당 객체가 공격을 할 수 있도록 만든다.

 

전략패턴을 사용해서 얻는 이점으로는 수많은 if문과 switch문을 쓰지않고 구현할 수 있다는 점.

그리고 기능확장과 테스트가 용이하다는 점이 있다. 

단점이 있다면 클래스 수가 많아지기 때문에 구현을 이해하는 데 시간이 좀 걸릴 수 있다는 점?

 

전략패턴을 자주 쓰는 상황으로는 '행동이 자주 바뀌는지' '조건문이 계속 늘어나는 지' '런타임에 로직을 바꾸고 싶은지' 등등

수많은 조건문을 작성해서 코드가 비대해지는 걸 전략 패턴을 통해 간결하게 작성할 수 있다는 점이다.


오늘 기술면접을 보면서 느낀점은, C#이나 유니티의 기술들 그리고 개념에 대한 공부가 많이 부족하다는 점이다.

물론 평상시에도 느끼고 있었지만 직접 질문으로 다가왔을 때 평소에 잘 이해하고 있던 부분이 아니면 설명할 때도 장황해진다.

 

개발자로서 뭔가를 설명할 때는 항상 기술적인 키워드를 많이 사용해야 한다는 점도 보완해야한다.

왜 이렇게 됐는지, 어떤 부분 때문에 이렇게 흘러가는지에 대한 원인과 결과 그리고 과정을 명확하게 설명해야한다.

 

Update와 FixedUpdate의 차이는 Update는 매 프레임마다 1회 호출된다는 점,FixedUpdate는 고정된 시간 간격으로 호출된다.

 

Update의 프레임단위에서 물리처리를 진행하게 되면 충돌시점,바닥 접촉 여부등 중간과정이 계속 달라질 수 있기 때문에

FixedUpdate 항상 같은 계산, 같은 충돌 지점, 같은 결과를 보여줄 수 있는 고정된 시간 간격에서 처리하는 것이다.

 

그래서 입력은 Update에서 처리하고 Rigidbody나 물리 충돌 등 복잡한 계산을 처리하는 건 FixedUpdate에서 처리한다.