- 다음 내용은 Unity 퀘스트 모음집 \ C# 사전 문법 기초 \ 데이터 다루기 페이지들을 학습하고 작성되었습니다.
변수
기본 개념
- 데이터가 안전하게 존재할 수 있는 공간
- 기본적인 형식
데이터 형식 변수 이름 ;
데이터 형식 : 변수 공간에 있는 데이터가 어떠한 형식인지 정의 (ex) 문자면 string, 숫자면 int
변수 이름 : 변수 공간 구분짓는 이름, 영어와 숫자, 언더바 사용을 권장
;(세미콜론) : 한 줄의 코드가 끝났음을 알림
예)
int num; // 숫자(정수) 형태로 num이란 이름의 변수 선언
string name; // 문자열 형태로 name이란 이름의 변수 선언
*구체적인 변수 명명 규칙은 링크를 참고
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/identifier-names
생성과 저장
- 변수에 데이터를 저장할 때는 =(등호)를 사용해 저장
- 각 자료형에 맞는 데이터를 저장
ex) 숫자 자료형 변수에는 숫자를, 문자열 자료형 변수에는 문자열을
- 저장된 데이터가 무엇인지 구별할 수 있도록 의미있는 이름 사용 권장
/* 모범 예시 */
string codingClub = "팀스파르타";
int year = 2024;
/* 잘못된 사용 예(데이터 파악 어려움) */
string x = "팀스파르타";
int y = 2024;
/* Error */
string x = 2024;
int y = "팀스파르타";
// CS0029 : 묵시적 형변환 불가능
활용
- 데이터를 변수에 저장하면 직접 데이터를 입력하지 않고 활용 가능
string codingClub = "팀스파르타";
int year = 2024;
Console.WriteLine(codingClub);
Console.WriteLine(year);
팀스파르타
2024
수정
- 변수는 계속 그 안에 저장된 데이터의 값을 변경할 수 있음
string codingClub = "팀스파르타";
Console.WriteLine(codingClub);
codingClub = "스파르타코딩클럽";
Console.WriteLine(codingClub);
팀스파르타
스파르타코딩클럽
자료형
숫자(int, float, double)
정수(int)
- 소수점이 없는 숫자, 일반적으로 -2,147,483,648 ~ 2,147,483,647 범위의 수를 의미
- 크기는 4byte
int age = 50; // 나이
int count = 100; // 개수
int level = 200; // 레벨
실수(float, double)
- 소수점이 있는 숫자
- float : 소수점 7자리, 4byte
- double : 소수점 15~16자리, 8byte
- double이 float보다 정밀도는 높으나 크기가 2배나 큼, 정밀한 연산이 필요하지 않으면 일반적으로 float 사용
- 숫자 뒤에 각 자료형에 따라 f나 d를 붙여 숫자가 어떤 자료형인지 표시(아무것도 없으면 double로 인식)
float exp = 56.6f; // 경험치
double speed = 56.5d; // 속도
[ 형변환 ]
float -> double : 가능
double -> float : 불가능, double이 큰 자료형이므로 더 작은 자료형에 바로 바꿀 수 없음
float exp = 56.6d; // ERROR : 형변환 불가
double speed = 56.5f; // OK
문자열과 문자(string, char)
- 문자(char) : 하나의 글자
- 문자열(string) : 여러개의 문자들로 이루어진 배열
string weekDay = "월화수목금"; // 문자열
// 문자
char Mon = '월';
char Tue = '화';
char Wed = '수';
char Thur = '목';
char Fri = '금';
정리표
| 자료형 | 값 | 특징 | 기본값 | 크기 |
| bool | true, false | false | 1byte | |
| string | 문자열 | " " 로 감싸야 함 | null | 가변적 |
| int | 정수 | –2,147,483,648 ~ 2,147,483,647 (-2^31 ~ 2^32 - 1) |
0 | 4byte |
| float | 실수 | 1.5E-45 ~ 3.4E+38 (7자리 유효) 0.0000001f 뒤에 f를 붙여 야함 |
4byte |
- 더 많은 내용은 자료형 - 정리표 페이지와 아래 링크 참조
https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170
형변환(Casting)
- 변수의 자료형을 바꾸는 것
1. 숫자 - > 숫자 (int, float)
- 자료형을 변경할 변수 앞에 괄호를 넣고, 괄호 안에 변경할 자료형 명시
int -> float
- 데이터 손실이 없으므로 묵시적 형변환 가능
int x = 10;
float y;
y = (float)x;
y = x; // OK
float -> int
- 소수점 이하 데이터가 손실되므로 반드시 명시적 형변환 필요
float a = 10.0f;
int b;
b = a; // ERROR : 묵시적 형변환 불가
b = (int)a; // OK
2. 다른 자료형 -> 문자
- 숫자나 bool을 문자로 변환
- 변수명 뒤에 .ToString() 붙이기
int level = 10;
string lvStr = level.ToString(); // "10"
float exp = 10.5f;
string expStr = exp.ToString(); // "10.5"
bool isChecked = true;
string checkingStr = isChecked.ToString(); // "true"
3. 문자 -> 다른 자료형
Convert 클래스 이용
// string -> int
string iStr = "10";
int a;
a = Convert.ToInt32(iStr);
// string -> bool
string bStr = "true";
bool b;
b = Convert.ToBoolean(bStr);
참고 : https://learn.microsoft.com/ko-kr/dotnet/api/system.convert?view=net-8.0
Parse() 함수 사용
// string -> int
string iStr = "10";
int a;
a = int.Parse(iStr);
// string -> bool
string bStr = "true";
bool b;
b = bool.Parse(bStr);
참고 : https://learn.microsoft.com/ko-kr/dotnet/api/system.int32.parse?view=net-8.0
ERROR!
- Convert와 Parse()는 변환한 값을 반환해줌
- 변환할 수 없는 값을 사용하면 Error 발생
string iStr = "10minute";
int a;
a = Convert.ToInt32(iStr);
// ERR : 숫자와 문자가 혼합된 문자열 숫자로 변환 불가
string bStr = "test";
bool b;
b = bool.Parse(bStr);
// ERR : 문자열을 불리언형으로 변환 불가
TryParse() 함수 사용
- 형변환 불가능한 경우에 발생하는 에러 방지하기 위해 사용
- 첫번째 인자가 변환에 성공하면 out 키워드가 붙은 두번째 인자에 변환된 값 저장
- 변환이 성공하면 true, 실패하면 false를 반환
string iStr = "10";
int a;
bool isSuccess1;
isSuccess1 = int.TryParse(iStr, out a);
// 문자열 "10"을 정수 10으로 변환하여 a에 저장
// 변환에 성공했으므로 isSuccess1에 true가 반환됨
string bStr = "test";
bool b;
bool isSuccess2;
isSuccess2 = bool.TryParse(bStr, out b); // ERROR
// 문자열 "test"를 불리언 형으로 변환 불가
// 변환에 실패했으므로 isSuccess2에 false가 반환됨
참고 : https://learn.microsoft.com/ko-kr/dotnet/api/system.int32.tryparse?view=net-8.0
추가 학습
Convert와 Parse의 차이
Convert
- 다양한 데이터 타입을 변환
- 변환하려는 값이 null이거나 변환할 수 없는 경우 기본값(0, null, false)을 반환
string strNum = "123";
int num = Convert.ToInt32(strNum); // 123 반환
string nullStr = null;
int num2 = Convert.ToInt32(nullStr); // 0 반환
Parse
- 특정 데이터 타입의 문자열을 해당 데이터 타입으로 변환
- 변환하려는 값이 적절하지 않거나 null일 경우 예외 발생시킴
string strNum = "123";
int num = int.Parse(strNum); // 123 반환
string nullStr = null;
int num2 = int.Parse(nullStr); // ArgumentNullException
string str = "abc";
int num3 = int.Parse(str); // FormatException
변수 용어 정리
- 선언 : 처음 변수를 만듦
- 할당 : 변수에 데이터를 저장
- 초기화 : 맨 처음 데이터 할당
* 데이터는 다른 말로 "데이터", "값", "리터럴"로 표현
int a; // 선언
a = 10; // 초기화(가장 처음 할당)
a = 20; // (재)할당
int b = 30; // 선언과 동시에 초기화
변수의 규칙
생성과 사용
- 변수를 만든 이후에 사용(선언되지 않은 변수는 사용 불가)
- 변수에 데이터 저장하고 사용(초기화되지 않은 변수는 사용 불가)
/* 모범 예시 */
string name1 = "홍길동";
Console.WriteLine(name1);
/* 잘못된 예시 */
// 1. 만들어진 변수가 없음
name2 = "이무명"; // ERR
Console.WriteLine(name2);
// 2. 변수 선언 전에 사용
Console.WriteLine(name3); // ERR
string name3 = "김르탄";
// 3. 데이터를 저장하지 않고 사용
string name4;
Console.WriteLine(name3); // ERR
이름 만들기
1. 타입과 변수명 필요
/* 모범 예시 */
int x;
/* 잘못된 예시 */
int; // ERR : 변수명이 없음
x; // ERR : 자료형이 없음
2. 같은 공간에 변수명 동일하게 만들 수 없음
3. 대소문자 구분
string lowerStr = "abc";
string upperStr = "ABC";
Console.WriteLine(lowerStr);
Console.WriteLine(upperStr);
abc
ABC
4. 이름 규칙 지키기
- 정해진 문자만 사용하기
- 사용 가능 문자 : 영대소문자, 숫자(맨앞제외), _(언더바)
'내일배움캠프 > TIL' 카테고리의 다른 글
| [내배캠][Unity6기][TIL] 1. 빗물받는 르탄이(5~6) (0) | 2024.09.03 |
|---|---|
| [내배캠][Unity6기][TIL] 1. 빗물받는 르탄이(1~4) (0) | 2024.09.02 |
| [내배캠][Unity_6기][TIL] C# 기초 문법 리뷰, 클래스와 객체, 추가 학습 (0) | 2024.08.31 |
| [내배캠][Unity_6기][TIL] C# 연산자, 제어문, 배열, 함수 (0) | 2024.08.30 |
| [내배캠][Unity_6기][TIL] C# 사전 문법 기초 시작하기 (0) | 2024.08.28 |