C# 문자열 기초와 형 변환 면접 질문 및 답변
C# 문자열 기초와 형 변환
1. char
Q1. char란 무엇인가요?
A. 문자 하나를 담는 타입입니다. 크기는 2바이트(16비트)이며, 작은따옴표로 감싸서 표현합니다.
Q2. char에는 한글도 저장할 수 있나요?
A. 가능합니다. 알파벳과 한글 모두 char 하나에 저장할 수 있으며, 크기는 동일하게 2바이트입니다.
Q3. char와 string은 어떤 차이가 있나요?
A. char는 문자 하나를 담고, string은 문자들의 묶음을 담습니다. char는 작은따옴표, string은 큰따옴표를 사용합니다.
Q4. char가 실제로 저장하는 값은 무엇인가요?
A. 문자에 매겨진 유니코드 코드 값입니다. 예를 들어 'A'는 65, '가'는 44032라는 코드 값을 가집니다.
Q5. char를 숫자로 변환하려면 어떻게 하나요?
A. (int)와 같은 캐스트를 사용합니다. 문자가 가진 코드 값을 정수로 변환할 수 있습니다.
Q6. 문자에 숫자를 더하면 어떻게 되나요?
A. 문자에 매겨진 코드 값에 숫자를 더한 결과를 문자로 변환하면 다음 글자를 얻을 수 있습니다.
Q7. 유니코드 코드 값으로 문자를 표현하려면 어떻게 하나요?
A. \u 뒤에 16진수 네 자리를 붙여 표현합니다. 이를 사용하면 키보드로 입력하기 어려운 문자도 코드 값으로 나타낼 수 있습니다.
2. string
Q1. string이란 무엇인가요?
A. 문자들이 순서대로 이어진 문자열을 담는 타입입니다. 큰따옴표로 감싸서 표현합니다.
Q2. 빈 문자열이란 무엇인가요?
A. 글자가 하나도 없는 문자열입니다. "" 또는 string.Empty로 표현할 수 있습니다.
Q3. string의 불변(Immutable)이란 무엇인가요?
A. 한 번 만든 문자열의 내용을 직접 수정할 수 없다는 의미입니다. 문자열을 변경하는 것처럼 보이는 코드는 실제로 새 문자열을 만들어 변수에 연결합니다.
Q4. 문자열을 반복해서 이어 붙이면 어떤 일이 발생하나요?
A. 이어 붙일 때마다 새로운 문자열이 만들어집니다. 따라서 문자열을 반복해서 연결하면 새로운 문자열이 계속 생성됩니다.
Q5. char와 string의 차이는 무엇인가요?
A. char는 문자 하나를 저장하며 크기가 항상 2바이트입니다. string은 여러 문자를 저장하며 글자 수에 따라 크기가 달라집니다. 또한 string은 빈 문자열을 저장할 수 있지만 char는 불가능합니다.
3. bool
Q1. bool이란 무엇인가요?
A. 참과 거짓을 나타내는 타입입니다. true 또는 false 두 가지 값만 저장할 수 있으며 크기는 1바이트입니다.
Q2. bool 값은 어떻게 표현하나요?
A. 코드에서는 소문자 true와 false로 작성합니다. 출력할 때는 첫 글자가 대문자로 표시됩니다.
Q3. bool 값은 주로 어떻게 얻나요?
A. 값을 직접 지정하기도 하지만, 주로 두 값을 비교한 결과로 얻습니다. 비교 결과는 true 또는 false로 반환됩니다.
Q4. bool 변수 이름은 어떻게 작성하는 것이 좋은가요?
A. 예 또는 아니오로 답할 수 있는 질문처럼 작성하는 것이 좋습니다. 상태를 나타내는 is, 소유 여부를 나타내는 has, 가능 여부를 나타내는 can을 접두사로 사용합니다.
Q5. flag, check, status 같은 이름을 피해야 하는 이유는 무엇인가요?
A. 변수 이름만으로는 true가 어떤 의미인지 알기 어렵기 때문입니다. 변수의 목적과 상태를 명확하게 나타내는 이름을 사용하는 것이 좋습니다.
4. 형 변환 기초
Q1. 형 변환(Type Conversion)이란 무엇인가요?
A. 한 타입의 값을 다른 타입으로 옮기는 작업입니다. C#에서는 안전한 방향과 위험한 방향을 문법으로 구분합니다.
Q2. 암시적 변환이란 무엇인가요?
A. 좁은 타입에서 넓은 타입으로 값을 옮기는 변환입니다. 범위가 넓은 타입에 안전하게 들어갈 수 있으므로 별도의 표시 없이 자동으로 변환됩니다.
Q3. 명시적 변환이란 무엇인가요?
A. 넓은 타입에서 좁은 타입으로 값을 옮기는 변환입니다. 값이 범위를 벗어날 수 있으므로 개발자가 직접 변환을 지시해야 합니다.
Q4. 캐스트(Cast)란 무엇인가요?
A. 괄호 안에 변환할 타입을 적어 값을 직접 변환하는 표기입니다. 명시적 형 변환에 사용합니다.
Q5. 모든 암시적 변환은 값의 손실이 없나요?
A. 아닙니다. 암시적 변환이 보장하는 것은 범위뿐이며 정밀도까지 보장하지는 않습니다. 예를 들어 큰 정수를 float으로 변환하면 값이 달라질 수 있습니다.
Q6. 자동 형 변환은 어떤 기준으로 허용되나요?
A. 출발 타입의 값 범위가 도착 타입의 범위 안에 전부 들어갈 때 허용됩니다.
5. 명시적 형 변환과 값의 손실
Q1. 실수를 정수로 캐스트하면 어떻게 되나요?
A. 소수점 이하를 버립니다. 반올림이 아니라 0에 가까운 방향으로 버리며, 음수도 동일하게 적용됩니다.
Q2. 실수를 정수로 반올림하려면 어떻게 해야 하나요?
A. Math.Round()를 먼저 적용한 다음 정수로 캐스트합니다.
Q3. 정수끼리 나누면 어떤 결과가 나오나요?
A. 두 값이 모두 정수이면 결과도 정수가 됩니다. 소수 부분은 버려집니다.
Q4. 정수 나눗셈에서 소수 부분을 얻으려면 어떻게 해야 하나요?
A. 나누기 전에 한쪽 값을 double과 같은 실수 타입으로 변환해야 합니다. 나눗셈이 끝난 뒤 변환하면 이미 버려진 소수 부분은 복구되지 않습니다.
Q5. 큰 정수를 작은 정수로 캐스트하면 어떤 일이 발생하나요?
A. 도착 타입에 들어갈 만큼의 아래쪽 비트만 남기고 나머지는 버립니다. 이 과정에서 원래 값과 전혀 다른 값이 될 수 있으며, 양수가 음수로 바뀌기도 합니다.
Q6. 부호 있는 정수와 부호 없는 정수 사이에서 캐스트하면 어떻게 되나요?
A. 비트는 그대로 유지하고, 도착 타입의 부호 해석 규칙에 따라 값을 읽습니다. 따라서 같은 비트라도 타입에 따라 다른 값으로 해석될 수 있습니다.
Q7. byte나 short끼리 계산하면 결과 타입은 무엇인가요?
A. 계산 결과는 int입니다. 다시 byte나 short에 저장하려면 캐스트가 필요합니다.
6. char와 숫자의 형 변환
Q1. char와 숫자 타입 사이에도 형 변환이 가능한가요?
A. 가능합니다. char에서 int로는 자동 변환되며, int에서 char로 변환하려면 캐스트가 필요합니다.
Q2. 숫자 문자 '7'을 정수 7로 변환하려면 어떻게 해야 하나요?
A. 문자 '0'을 빼면 됩니다. (int)'7'은 숫자 7이 아니라 문자에 해당하는 코드 값 55를 반환합니다.
7. decimal과 double의 형 변환
Q1. decimal과 double은 서로 자동 변환할 수 있나요?
A. 불가능합니다. 두 타입은 범위와 정밀도가 서로 다르므로 어느 방향으로도 자동 변환되지 않습니다.
Q2. decimal과 double은 어떤 차이가 있나요?
A. double은 표현할 수 있는 범위가 넓고, decimal은 정밀도가 높습니다. double에서 decimal로 변환하면 범위를 초과할 수 있으며, decimal에서 double로 변환하면 정밀도가 손실될 수 있습니다.
Q3. 돈 계산에 decimal을 사용하는 이유는 무엇인가요?
A. double은 계산 과정에서 유효 자릿수가 줄어들 수 있기 때문입니다. 돈 계산은 입력부터 출력까지 decimal을 사용해야 정밀도 손실을 줄일 수 있습니다.
Q4. decimal과 double을 같은 계산식에서 사용할 수 있나요?
A. 불가능합니다. 같은 계산식에서 사용하려면 한쪽을 명시적으로 변환하거나 동일한 타입으로 맞춰야 합니다.
8. checked와 unchecked
Q1. unchecked란 무엇인가요?
A. 오버플로를 검사하지 않고 잘린 값을 그대로 사용하는 방식입니다. C#의 기본 동작입니다.
Q2. checked란 무엇인가요?
A. 오버플로가 발생하면 오류를 일으키는 방식입니다. 값이 잘못되는 상황을 실행 중 오류로 발견할 수 있습니다.
Q3. checked는 어떤 상황에서 사용하면 좋나요?
A. 금액이나 개수 누적처럼 계산 결과가 잘못되면 안 되는 상황에서 사용하면 좋습니다.
Q4. checked는 모든 숫자 타입의 오버플로를 검사하나요?
A. 아닙니다. 정수 계산과 정수 타입으로의 변환에 적용됩니다. float와 double의 계산은 오버플로가 발생해도 Infinity가 되며, decimal은 checked 여부와 관계없이 오버플로 오류를 발생시킵니다.
Q5. NaN이란 무엇인가요?
A. Not a Number의 약자로, 숫자가 아님을 의미합니다. 실수 계산으로 결과를 구할 수 없을 때 나타납니다.
9. 문자열과 숫자의 변환
Q1. 문자열을 숫자로 캐스트할 수 있나요?
A. 불가능합니다. 캐스트는 숫자 타입끼리 변환할 때 사용하며, 문자열을 숫자로 바꾸려면 int.Parse()와 같은 기능을 사용해야 합니다.
Q2. "123" + 1의 결과는 무엇인가요?
A. 1231입니다. + 연산자의 한쪽이 문자열이면 숫자 계산이 아니라 문자열을 이어 붙입니다.
Q3. 캐스트와 Parse()의 차이는 무엇인가요?
A. 캐스트는 이미 숫자인 값의 타입을 변경합니다. Parse()는 문자열을 숫자로 해석해 변환합니다.
Q4. 문자열을 숫자로 변환하면 원래 입력한 표기가 유지되나요?
A. 유지되지 않습니다. 문자열은 입력한 표기를 보존하지만, 숫자로 변환하면 숫자 값만 남습니다. 예를 들어 "007"을 정수로 변환하면 7이 됩니다.
10. 면접 전 핵심 정리
char는 문자 하나를 담으며 작은따옴표를 사용합니다.char는 2바이트이며 문자에 매겨진 유니코드 코드 값을 저장합니다.string은 문자들의 묶음이며 큰따옴표를 사용합니다.string은 불변이므로 내용을 변경하면 새로운 문자열이 만들어집니다.bool은true와false만 저장하며, 비교 결과로 자주 사용합니다.bool변수는is,has,can을 사용해 의미를 명확하게 표현합니다.- 암시적 변환은 좁은 타입에서 넓은 타입으로 자동 변환하는 방식입니다.
- 명시적 변환은 캐스트를 사용해 직접 변환하는 방식입니다.
- 암시적 변환은 범위를 보장하지만 정밀도까지 보장하지는 않습니다.
- 실수를 정수로 캐스트하면 소수점 이하가 버려집니다.
- 정수끼리 나누면 결과도 정수이므로 소수 부분을 얻으려면 나누기 전에 변환해야 합니다.
byte와short끼리 계산해도 결과는int입니다.decimal과double은 같은 계산식에서 자동으로 섞어 사용할 수 없습니다.checked는 오버플로를 오류로 확인하고,unchecked는 오버플로를 검사하지 않습니다.- 문자열은 캐스트로 숫자가 되지 않으며,
Parse()를 사용해 숫자로 변환합니다.



