1. 오늘 학습 키워드
C#의 언어를 알고 데이터를 다뤄보자.
-일단 읽고, 쓴다. 백지 상태에서 눈으로 아무리 읽어봐야 흘러 넘치는 물이다.
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
2-1. 데이터 작성법
int =정수
float=실수 //사용 시 수의 뒤에 f를 붙여줘야한다.
double=실수 //표기할 수 있는 소숫점은 얘가 더 길다. 하지만 그만큼 메모리도 많이 잡아먹는다. 아무것도 안 적으면 보통 얘다.
string=문자열(글)
char=문자
string 은 "문자" 를 그대로 표기하지만, char은 '문'과 '자'로 하나씩 나누어서 써줘야 한다.
데이터 예시
int level = 1;
int count = 5;
float percentage = 0.8f;
float speed = 0.5f;
double drx = 3.268972;
double dx2 = 2.59976279d;
string nickname = "Hicanos";
string description = "practiceChar";
char a = 'A';
char f = '에';
2-2. Casting (캐스팅/형변환)
우리는 숫자를 문자로도 띄워야하고, 입력된 문자도 데이터로 돌려 넣어야한다.
숫자를 문자로 표기하는 가장 대표적인 예시는 게임 UI에 나타나는 레벨이나 능력치일 것이다.
입력한 문자를 데이터로 돌려 넣는 예시는, 퍼즐이나 추리 게임에 맞는 수를 넣어서 내부의 기능을 작동하는 경우가 아닐까 짐작한다. (실제 활용은 어떨지 아직 모르겠다.)
아무튼 형변환은 필수불가결하고, 할 줄 알아야하니까 정리 해보자.
a.정수 → 실수(int ↔ float)
int iten = 10;
float ften = (float)iten;
//(flaot)는 생략 가능하다. 모든 정수는 실수이기도 하다.
b.실수 → 정수(float ↔ int)
float fFive = 5.5f;
int iFive = (int)fFive;
//수의 내용을 그대로 가져갈 생각이라면, (int)는 필수적이다. 모든 실수가 정수인 것은 아니다.
→ 숫자를 다른 형태의 수로 바꾸는 것은 상당히 쉬운 일이다. 입력한 데이터 값의 앞에 원하는 자료형을 넣으면 된다.
c. 수/bool →문자 (int/float/bool →string)
//모두 .ToString() 하나로 해결 가능.
int n = 10;
string nStr = n.ToString();
float f = 0.5f;
string fStr = f.ToString();
bool B = true;
string boolStr = B.ToString();
→숫자나 참/거짓 등을 문자 그대로 '출력'한다. 저걸 Console.WriteLine(""); 같이 내용을 출력하는 것을 쓰면 숫자/참/거짓 그대로 나온다.
Console.WriteLine("n"); 을 쓰면 10
Console.WriteLine("f"); 라고 쓰면 0.5
Console.WriteLine("B");로 쓰면 true 값이 '출력'된다. 텍스트로.
d. 문자→수/bool (string → int/float/bool)
Convert, Parse(), TryParse()의 삼총사가 있다.
위에 방법은 하나의 키워드이지만, 얘는 세 개나 있다.
◆ Convert 설명
Convert
: 핵심은 Conver 뒤에 들어오는 .To(원하는 자료형의 형변환 코드) 이다.
//문자 지정
string strTen = "10";
string strSix = "6.2";
string bStr = "true";
//문자를 각각 int / double / float / bool로 변형.
int Ten;
Ten = Convert.ToInt32(strTen);
float six;
six = Convert.ToSingle(strSix);
double Six;
Six = Convert.ToDouble(strSix);
bool b;
b = Convert.ToBoolean(bStr);
★ 보면 알겠지만, c.에서 봤던 ToString과 여기에 있는 ToDouble 을 제외하면 변환 코드가 다르다!
심지어 Int는 32만 있는게 아니라 16, 64도 있고 Sbyte라는 놈도 있다.
◆ Parse(); 설명
Parse();
: <원하는 자료형>.Parse(); 형태로 작성한다.
//문자 지정
string strTen = "10";
string strSix = "6.2";
string bStr = "true";
//문자를 각각 int / double / float / bool로 변형.
int Ten;
Ten = int.Parse(strTen);
float six;
six = float.Parse(strSix);
double Six;
Six = Double.Parse(strSix);
bool b;
b = bool.Parse(bStr); // b : true
★.Parse(); 함수의 특징은 앞에 들어가는 문자가 변형할 자료형과 같은 코드를 넣으면 된다는 점이다. 개인적으로 Convert보다 더 보기 좋은 것 같다.
?. 잠깐만, 그럼 둘 다 기능이 똑같은 거잖아. 왜 Convert랑 Parse(); 함수가 나뉘어져 있는 거야?
: null값의 처리 차이 때문이다.
일반적으로 null은 '아무것도 없음'을 표현한다. 그러니까, 값 자체가 할당되지 않은 빈 칸이다.
string strTen = "10"; 를 형변환한다고 했을 때,
int Ten;
Ten = Convert.ToInt32(strTen); //Ten=10
Ten = int.Parse(strTen);//Ten=10
위와 같이 Convert와 Parse(); 함수 둘 다 정상적으로 변환되어 같은 값으로 나온다.
그럼 string에 할당된 것이 null이라면?
string nstr = null;
int n;
n=Convert.ToInt32(nstr); // 0 으로 출력된다.
n=int.Parse(nstr); //ArgumentNullException - 값이 null이 될 수 없으므로 예외처리함.
Convert는 아무것도 없으니 0이라는 수로 변환하는 반면, Parse는 애초에 들어온 값이 없으니 예외처리를 해버린다.
Convert에서는 null="0" 이지만, Parse();에서는 null = " "인 것이다.
※단, 만약 null이 "null"이라는 문자로 들어갔을 경우에는 둘 다 FormatException이 나타난다.
◆TryParse(); 설명
TryParse();
:out 개념이 들어간다. Parse랑 모양이 비슷한데, 뭔가 닮은 점이 있는지도 모르겠다.
TryParse();의 특징은 Convert나 Parse();처럼 단순히 문자를 수나 bool값으로 변환하는 것만이 아니라, 캐스팅의 성공 여부까지 알려준다는 점이다. bool값의 형태로 true/false 로 캐스팅이 정상적으로 되었는지 알 수 있다.
//문자 지정
string strTen = "10";
string strSix = "6.2";
string bStr = "true";
//문자를 각각 int / double / float / bool로 변형.
int Ten;
int.TryParse(strTen, out Ten); // Ten : 10
bool isSuccess;
isSuccess = int.TryParse (strTen, out Ten); // isSuccess : true
float S;
float.TryParse(strS, out S); // S: 6.2
double ss;
double.TryParse(strS, out ss); //ss: 6.2
bool result;
result = float.TryParse(strS, out S); //result : true
bool B;
bool.TryParse(bStr, out B); // B: true
★.Parse(); 함수와 동일하게 int, float 등의 자료형을 코드로 그대로 사용한다! .Parse();와의 차이점은, TryParse(); 함수는 x=의 형식으로 값을 출력하도록 만들지 않고, out x 의 형태로 x를 출력한다고 작성한다는 점이다.
그럼 결과가 어떻게 나오는가?
string strS = "alpha"; //alpha라는 문자열이다.
float S;
float.TryParse(strS, out S); // 여기서 S는 값을 받아들일 수 없다! alpha는 실수가 아니니까!
bool result;
result = float.TryParse(strS, out S); // 캐스팅이 실패했음을 bool 값으로 확인한다.
Console.WriteLine(S.ToString()); // S에 값이 할당되지 않았다. 이걸 다시 결과값으로 끌어내자, 예외처리가 아닌 0이라는 값으로 출력된다.
Console.WriteLine(result); //캐스팅에 실패했으므로, 결과값은 False로 출력된다.

캐스팅에 실패했을 경우, 값을 0으로 출력하고 bool을 이용한 캐스팅 확인 값은 false로 출력함을 확인할 수 있다.
3. 학습하며 겪었던 문제점 & 에러
- 문제&에러에 대한 정의
문자 →수/bool 의 형변환 오류.
조금 더 정확하게 말하자면, float 로 변형하고 싶었는데 Convert 를 이용해서 변형하려고 하니 ToFloat라는 형변환은 없었다.
- 내가 한 시도
일단 '문자'를 '수'로 바꾸어야 하고, 그 형태가 '실수'여야 한다는 점에 착안해, float로의 변환을 포기하고 double 의 형태로 변형했다.
그렇게 변형하자 오류는 나타나지 않았고, 문자가 '실수'값의 형태로 데이터가 변경되었다.
하지만 float 와 double이 둘 다 실수를 표기하는 것은 사실이지만, 두 자료형이 나뉜 이유가 있을 것이다.
그렇다면 이건 목적을 달성하긴 했지만 완전한 해결방법이라고 생각할 수는 없다.
그럼 float는 어떻게 바꿔야 Convert에서 변형이 될까.
- 해결 방법/새롭게 알게 된 점
정답: .ToSingle
String xStr= 6.5f;
float x;
x=Covert.ToSingle(xStr);을 쓰는 것으로 해결되었다.
즉, float의 Convert 형변형 코드는 .ToSingle 이라는 걸 알았다.
double이 표기할 수 있는 소숫점 자리가 float의 두 배(double)이라는 점을 생각했을 때, 생각 이상으로 직관적인 코드였다.
(하지만 왜 ToFloat로 짓지 않았을까...Int16 Int32 Int64 는 용량이라고 생각할 수 있지만...)
- 이 문제&에러를 다시 만나게 되었다면?
그때는 float - ToSingle 을 잊지 않고 사용하면 된다. 혹은, Parse() 함수를 이용해도 좋을 것이다. 어느 쪽이든 그 시점에서 더 나은 방향을 선택해보도록 하자.
4. 내일 학습 할 것은 무엇인지
데이터를 배웠으니 다음은 연산하기로 가보자. 사칙연산 맞다.
빠르게 할 수 있다면 본격 프로그래밍 시작하기까지 가볼 예정이다.
콘솔 창에서 입력하고, 그에 맞는 값을 출력하는 단계까지 가면 가장 베스트.
사칙연산 데이터를 넣을 수 있으면 좋다.
목표 1. 연산자(사칙연산) 해보기
목표 2. 콘솔 프로그래밍 기초 하기 (콘솔창 입력을 통해 값 출력한다.)
'Unity_사전캠프' 카테고리의 다른 글
[사전캠프 6일차] for, while, do-while? 반복문, 그리고 배열. (0) | 2025.03.24 |
---|---|
[사전캠프 5일차] switch case문, 그리고 if문(+반복문 맛보기) (0) | 2025.03.21 |
[사전캠프 4일차] 조건문의 활용 (0) | 2025.03.20 |
[사전캠프 3일차] 연산 계산 (0) | 2025.03.19 |
[사전캠프 1일차] Unity 조사하기 (0) | 2025.03.17 |