개발 달리기
C# 기초 - 데이터 다루기 실습 본문
- 문제 1. 변수 만들기
- level, count 의 이름을 가진 정수형 변수
- percentage , speed 의 이름을 가진 실수형 변수
- nickname, description 의 이름을 가진 문자형 변수 - 문제 2. 위 문제에서 만든 변수에 임의의 데이터 입력하기
코드 작성
1
2
3
4
5
6
7
8
9
10
11
|
// 1-1 변수 만들기, 1-2 변수에 데이터 입력하기
{
int level = 50;
int count = 5;
float percentage = 25.0f;
float speed = 2.0f;
string nickname = "햄북스딱스";
string description = "하이빵가루";
}
|
cs |
- 문제 3. 형변환 숫자 -> 숫자
코드 작성
1
2
3
4
5
6
7
8
|
// 1-3 형변환 숫자-숫자
{
int iTen = 10; // 1-3
float fTen = (float)iTen;
float fFive = 5.5f;
int iFive = (int)fFive;
}
|
cs |
- 문제 4. 형변환 숫자 -> 문자
코드 작성
1
2
3
4
5
6
7
8
|
// 1-4 형변환 숫자-문자
{
int n = 10;
float f = 0.5f;
string nStr = n.ToString();
string fStr = f.ToString();
}
|
cs |
- 문제 5. 형변환 문자 -> 숫자
코드 작성
1
2
3
4
5
6
7
8
|
// 1-5 형변환 문자-숫자
{
string strTen = "10"; // 1-5
string strSix = "6.2";
int iTen = Convert.ToInt32(strTen);
float fSix = Convert.ToInt32(strSix);
}
|
cs |
- 문제 6. Convert 와 Parse 의 차이
Convert 클래스는 여러 자료형에서 다른 여러 자료형들로의 형변환이 가능하지만 Parse() 함수는 오직 문자열에서 다른 자료형들로의 형변환만 가능하다.두 방법 모두 형식에 맞지 않는 형변환 수행 시 Format Exception 에러를 발생시킨다.

실제 Convert 는 여러 데이터 타입을 다른 데이터 타입으로 변환해주는 기능이라고 기재되어있다.

Parse의 경우 UTF-8 방식의 문자열만 변환이 가능하다고 한다.
UTF-8이 뭔지는 검색해서 봐도 머리만 아플 뿐 그냥 문자열이라고 이해하였다.
결국 Parse는 문자열만 다른 데이터 타입으로 변환이 가능하다는 뜻이다.
이 한계를 극복하기 위해 TryParse 기능을 사용하는 것으로 보인다.
여기서 드는 의문은
그럼 Convert만 써서 변환하면 되는데 왜 굳이 다른 기능 2가지가 더 있는가이다.
이 부분에 대해서 챗 gpt를 이용하여 궁금증을 해소하였다.
Convert, Parse, TryParse가 각각 존재하는 이유
C#에서 형변환을 수행할 때 Convert, Parse, TryParse가 각각 존재하는 이유는 상황별로 적절한 형변환 방식이 필요하기 때문입니다. 단순히 모든 데이터 타입을 변환할 수 있는 Convert만 사용해도 되겠지만, 다른 방식이 존재하는 이유는 성능, 예외 처리, 사용 목적 등의 차이가 있기 때문입니다.
🔹 Convert
📌 특징
- 거의 모든 데이터 타입을 변환할 수 있음
- null 값을 변환할 때 기본값(default)을 반환 (null을 0이나 false로 변환)
- 변환이 실패하면 예외(Exception)를 발생시킴
📌 예제
int result2 = Convert.ToInt32(null); // 0 반환 (예외 발생 X)
int result3 = Convert.ToInt32("abc"); // 예외 발생 (FormatException)
🔹 Parse
📌 특징
- 문자열(String) → 특정 타입 변환
- 변환 실패 시 예외 발생 (FormatException, OverflowException 등)
- null 값을 변환하면 예외 발생
📌 예제
int result2 = int.Parse(null); // 예외 발생 (ArgumentNullException)
int result3 = int.Parse("abc"); // 예외 발생 (FormatException)
🔹 TryParse
📌 특징
- 문자열(String) → 특정 타입 변환을 시도
- 변환 실패 시 예외를 발생시키지 않고 false 반환
- 예외 처리를 하지 않아도 되므로 안정적
📌 예제
bool success2 = int.TryParse(null, out int result2); // false, result2 = 0
bool success3 = int.TryParse("abc", out int result3); // false, result3 = 0
❓ 그럼 Convert만 쓰면 안 될까?
⚡ Convert를 항상 쓰지 않는 이유
- 성능 이슈
- Convert는 내부적으로 여러 단계를 거쳐 변환하기 때문에 Parse, TryParse보다 상대적으로 속도가 느릴 수 있음.
- 불필요한 예외 발생
- Parse는 예외를 발생시키기 때문에 예외 처리를 해야 하지만, TryParse는 예외 없이 변환 여부를 확인할 수 있어 더 안정적.
- 코드의 명확성
- TryParse를 사용하면 실패를 예측하고 예외 없이 처리 가능하므로 코드가 안정적이고 가독성이 좋음.
- Convert는 어떤 타입이든 변환을 시도할 수 있지만, Parse는 특정 타입에 맞게 변환을 수행하므로 더 직관적임.
✅ 언제 어떤 걸 써야 할까?
Convert | 모든 타입 | 예외 발생 or 기본값 반환 | 필요함 | 다양한 타입 변환 시 |
Parse | 문자열만 | 예외 발생 | 필요함 | 입력 값이 유효한지 확실할 때 |
TryParse | 문자열만 | false 반환 | 불필요 | 안정적인 변환이 필요할 때 |
🏆 결론
- 빠른 변환이 필요하고, 실패 시 예외 처리가 가능하면 Parse
- 안정적이고 예외 없이 변환을 수행하고 싶다면 TryParse
- 모든 데이터 타입을 다룰 때는 Convert
즉, 모든 경우에 Convert를 쓰는 것은 가능하지만, 상황에 따라 적절한 방법을 선택하는 것이 더 성능적이고 안전한 코드를 작성하는 방법입니다. 🚀
'C#' 카테고리의 다른 글
C# 기초 - 대한민국의 수도는? (0) | 2025.04.01 |
---|---|
C# 기초 - 숫자..인가요? (0) | 2025.04.01 |
C# 기초 - 본격 프로그래밍 시작해보기 (0) | 2025.04.01 |
C# 기초 - 연산자 실습 (0) | 2025.03.29 |
공부용 (0) | 2025.03.29 |