내일배움캠프/TIL

[내배캠][Unity_6기][TIL] C# 데이터 다루기

binary는 호남선 2024. 8. 29. 23:17

  - 다음 내용은 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"

참고 : https://learn.microsoft.com/ko-kr/dotnet/api/system.int32.tostring?view=net-8.0#system-int32-tostring

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. 이름 규칙 지키기

- 정해진 문자만 사용하기

- 사용 가능 문자 : 영대소문자, 숫자(맨앞제외), _(언더바)