오늘은 스파르타 코딩 클럽 unity 게임 개발 과정 60일차(최종프로젝트 11일차 면접준비!)
팀 프로젝트에 빠져 여태껏 기술면전 문제를 풀지 않고 있었다.
그래서 한번 제대로 생각해서 기술면접을 준비하고자 한다.
1. float와 int의 표현 가능한 수의 범위가 다른 이유는 무엇인가요?
일단 둘다 4byte의 크기를 가지지만 int 와 float는 데이터의 저장 방식부터가 다르다.
int는 정수를 표현하는데 사용되고 일정한 크기의 메모리 공간에 숫자를 그대로 저장하는 방식이다.
이러한 데이터는 메모리에서 이진수의 형태로 저장되는데 대부분의 컴퓨터 시스템에선 정수를 2의 보수형태로 표현한다.
예를 들어 32비트의 int값을 저장한다고 가정했을때 맨 첫번째의 비트의 부호비트로 사용되고 0은 양수 1은 음수로 표현된다.
그러나 float같은 경우에는 첫번째의 비트가 부호비트로 사용되는 방식은 같지만
부호 비트 | 지수 비트 | 가수 비트
이런식으로 구분지어 메모리에 저장되게 되고 1,8,23의 비트를 가지게 되어 총 32비트를 구분짓게 된다.
float의 문제점은 정밀도가 떨어질수가 있다는 점인데 그 이유는 가수부분의 비트가 소수점을 정확히 저장할 만큼의 여유를 가지고 있지 못하다는 것이다.
이로인해서 정밀도가 제한되어 근사값으로 표현되는데 정확한 소수의 값을 표현하기 어려운 경우가 발생할땐 double과 같이 더 많은 비트를 사용하는 방식의 자료형으로 높은 정밀도를 챙길수있다.
즉 float와 int의 표현 가능한 수의 범위가 다른 이유는 데이터의 저장방식의 차이때문이다.
2.'ref'와 'out'의 사용 시 차이는 무엇인가요?
ref와 out 모두 메소드에 변수를 참조로 전달하는 키워드다.
ref는 메소드 호출 전에 변수가 초기화 되어있어야하며 메소드 안에서는 이 값을 읽고 수정할 수가 있다.
변수의 값을 메소드 내에서 변경해야 하고 이것은 메소드 외부에 영향을 줄 수 있다.
out은 메소드 호출전 변수를 초기화 할 필요는 없지만 메서드 안에서는 반드시 해당 변수의 값을 할당해야한다.
이 키워드는 메소드가 여러 값을 반환해야 할 때 사용된다.
두 키워드는 용도에 따른 목적이 다른데
ref의 목적
- 변수의 값을 메소드 내에서 읽고 수정해야 할 때 사용한다.
- 메소드가 변수의 값을 변경하고 해당 변경이 메소드 외부에서도 유지되어야 할 때.
out의 목적
- 메소드가 여러 값을 반환해야 할 때 사용된다. 아래는 예시다.
-
CalculateStats(numbers, out int minVal, out int maxVal, out double avgVal);
- 메소드 외부에서 변수에 값을 할당하기 위해 사용.
결론
즉 두 키워드의 차이는 변수 초기화에 대한 부담과 그리고 키워드의 목적성이다.
3. 접근제한자란 무엇이며, 각각 어떤 차이가 있는지 비교해서 설명해주세요.
표로 설명하는 편이 눈에 잘 띄고 좋다고 생각한다.
접근 제한자 | 설명 | 상속 |
public | 어디서나 접근 가능 | 상속 관계에서도 접근 가능 |
private | 동일한 클래스 내에서만 접근 가능 | 상속 관계에서도 불가능 |
protected | 동일한 클래스 및 하위 클래스에서 접근 가능 | 상속 관계에서 접근 가능 |
internal | 같은 어셈블리(어플리케이션 또는 라이브러리) 내에서 접근 가능 | 같은 어셈블리내에서 상속관계에 관계없이 접근 가능 |
protected internal | 같은 어셈블리 내에서는 public, 상속 관계에서는 protected로 접근 가능 | 같은 어셈블리 내에서 상속관계에서 접근 가능하며 다른 어셈블리에서는 상속관계에서의 접근 범위와 동일하게 동작 |