본문 바로가기

Unity 개발 공부

[내일배움캠프 사전캠프] 1일차 C# 사전문법 기초 공부 - 변수

1. 오늘 학습 키워드

C#의 사전 문법의 완전 기초를 전체적으로 속독하고 배운 부분 복습하며 이해하기.
전반적인 개념을 빠르게 공부 후, 블로그에 정리하며 이해하면서 체화시킨다.
첫번째: 변수와 형변환

 

2. 오늘 학습 한 내용을 나만의 언어로 정리하기


변수: 데이터가 안전하게 살 수 있는 집의 개념

데이터 형식 변수이름 ;

으로 표기하며, 변수이름은 임의로 만들지만, 코딩스탠다드의 네이밍 규칙을 따르는것이 협업에 용이하다.
영어 대/소문자
숫자 (맨 앞에 오면 에러가 납니다.)
언더바 _

데이터 형식에는 

 

변수를 처음 만드는것을 '선언한다' 라고 한다. 변수에 데이터를 넣어주는 것을 '할당한다' 라고 한다.|
그리고 맨처음 데이터를 할당하는것을 '초기화한다' 라고한다.

예: Int x = 10 ;
를 함으로서 선언,할당, 초기화를 하였다.

 

이때 변수에 할당된 데이터(예시에서는 10)를 “데이터”, “값”, “리터럴” 등으로 표현가능하다.

변수의 데이터형식에 쓰이는  자료형 


숫자
1. int : 정수 : 소숫점이 없는 숫자로 ... -2, -1, 0 ,1 ,2, ... 같은 숫자들이다.

2. float : 실수 (소숫점7자리까지) : 0.4, 1.7, 10.4, -5.7 등의 숫자가 실수에 포함됌, 
float exp =56.5f;
에서 뒤에 f 를 붙인다. float speed = 56.5; 처럼 표기하면 에러가 생긴다.

3. double: 실수 (소숫점15~16자리까지)
double exp
=56.5d;
double exp
=56.5;
둘다 가능하다 뒤에 d를 붙이든 생략하든 double로 인식한다.

 

※ double이 표현할 수 있는 숫자는 더많으나, 쓰는데 더 많은 메모리를 사용하기때문에 효율을 위해서
웬만하면 float을 사용한다.

문자열과 문자

1. string :
여러글자가 합쳐졌을때 문자열이라한다. " " 로 데이터를 쓴다.

예: string codingClub ="팀스파르타";

2. char:

문자를 표현하는 자료형이다. ' '로 데이터를 쓴다.

예: char team_1 ='팀'

 

자세히 항목을 리스트업하자면 아래와 같다.

중요 - 무조건 알아야 합니다.
참고 - 이후에 활용 될 수 있는 자료형입니다.
기타 - 많이는 안쓰입니다. 우선 다른 자료형 먼저 익숙해지세요.
자료형
특징
기본값
크기
bool
true , false
 
false
1 byte
string
문자열
" " 로 감싸야 함
null
계속 변함
char
문자
' ' 로 감싸야 함
'\0'
2 byte
sbyte
8bit 정수
-128 ~ 127
0
1 byte
byte
8bit 정수 (부호 없음)
0 ~ 255
0
1 byte
short
16bit 정수
–32,768 ~ 32,767
0
2 byte
ushort
16bit 정수 (부호 없음)
0 ~ 65,535
0
2 byte
int
정수
–2,147,483,648 ~ 2,147,483,647
0
4 byte
uint
정수 (부호 없음)
0 ~ 4,294,967,295
0
4 byte
long
64bit 정수
–9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
0
8 byte
ulong
64bit 정수 (부호 없음)
0 ~ 18,446,744,073,709,551,615
0
8 byte
float
실수
1.5E-45 ~ 3.4E+38 (7자리 유효) 0.0000001f 뒤에 f를 붙여 야함
0
4 byte
double
실수
5.0E-324 ~ 1.7E+308 (15자리 유효) 0.000000000000001d 뒤에 d를 붙여야 하지만 붙이지 않더라도 double로 인식
0
8 byte
Decimal
실수
±1.0 x 10-28 ~ ±7.9228 x 1028 28-29개의 자릿수
0
16 byte

 

위 표를 보면 byte 크기가 다르다. 따라서 아까 말했듯, 8byte의 double을 쓰는것보다 4byte의 float을 쓰는게 메모리에 더 효율적이다.
int 값이 대략  21억까지 표현이 되는데 해당 숫자를 넘긴 값이 출력되면 오류나듯 다른 숫자가 출력되는 경우가 있었다. 표현 할 수 있는 숫자 범위를 넘어서서 정확한 값이 출력되지않는 것이다.

 

변수는  데이터형식과 데이터가 형식이 맞아야 된다. 그렇지않다면 에러가 발생한다.

 

변수는 한번 선언 및 할당 후에, 바꿔서 저장할 수 있다.

 

 

형 변환 (casting)
변수를 사용하면서 해당 변수의 자료의 형태를 변환해야 할 상황에 따라 쓰인다.
3가지 방법이 있다.

1. 숫자다른 형태의 숫자로 변환

2. 다른 자료형문자로 변환

3. 문자다른 자료형으로 변환


먼저

1. 숫자 -> 다른 형태의 숫자로 변환 방법

float → int

int x = 10;

float y = 10.0f

int z = x + (int)y; 

int → float
int x = 10;

float y = 10.0f

float z = (float)10 + y;

단 데이터 손실이없다면, 괄호 형태를 명시하지않아도됌. 
float 1.5f 를 int1로 바꾸는데 있어선 0.5값이 사라지니 명시해야하나, float 1f 에서 int1 이라면 괜찮음.
따라서 
int x = 10;

float y = 10f;

int z = x + y ;
float a = x + z ; 

 

2. 숫자 또는 bool 을 문자로 변환
간단하게 뒤에 .ToString()를 붙이면 가능하다.

int x = 10;

string xstr = x.ToString(); 
할시에, "10" 으로 인식

 

bool y = true;

string ystr = y.ToString(); 

할시에, true 가아닌 "true" 로 인식

3. 문자를 다른 자료형으로 변환
세가지 방법 존재.
- convert 클래스 사용
-Parse() 함수 사용

-TryParse() 함수 사용

 

먼저 convert 사용법
String iStr = "10";

int x;

x= Convert.ToInt32(iStr); 
하면 x : 10
String bStr = "true";

bool b;

b = Convert.ToBoolean(bStr);

하면 b : true

이런식으로 사용한다.

형변환 리스트에는 다음과 같다.
Convert.ToBoolean() 부울형태(참,거짓)
Convert.ToByte() 유니코드 정수형태

Convert.ToChar() 유니코드 형태 (문자)

Convert.ToDecimal() decimal 숫자형태

Convert.ToDouble() 실수(15~16자리) 형태

Convert.ToInt16() 16비트 부호 있는 정수:  –32,768 ~ 32,767

Convert.ToInt32() 32비트 부호 있는  정수: –2,147,483,648 ~ 2,147,483,647 

Convert.ToInt64() 64비트 부호있는 정수
Convert.ToSbyte() 8비트 부호 있는 정수
Convert.ToSingle() 단정밀도 부동 소숫점 32비트 float , 즉 실수( 7자리)
Convert.ToString() 문자열
Convert.ToUInt16() 16비트 부호 없는 정수

Convert.ToUInt32() 32비트 부호 없는 정수
Convert.ToUInt64() 64비트 부호 없는 정수

 

Convert 클래스를 사용하기 위해선 네임스페이스인 'System'을 써야하므로,
코드 상단에 " using System" 을 적어놓는게 좋다. 아니라면 System.Convert.ToInt32()와 같이 전부 명시해야만한다.

 

그다음 Parse() 함수 사용법

String iStr = "10";

int x;

x = int.Parse(iStr); 
할 경우 x: 10

문제는 에러가 발생하는 경우인데, 변환할 수 없는 값일때이다. 예를들어

String iStr = "10.xxx";

int x;

x = Convert.ToInt32(iStr); 혹은

x= int.Parse(iStr); 라고 하였을때
iStr가 정수가 아니기때문에 에러가 발생한다.

이를 대처하기 위해
TryParse() 함수를 사용가능하다.
TryParse()는
out 개념이 들어간다

반환값으로 캐스팅한 값을 받지않으며, 
반환값으로 bool만 받아 캐스팅이 성공했는지 여부를 알려준다.

string iStr = "10";

int x;

bool isSuccess;

isSuccess = int.TryParse(iStr, out x);
isSuccess : true 가 된다.
그러나
string bStr = "testtest" ;
bool b:
bool isSuccess;
isSuccess = bool.TryParse(bStr, out b); 
이면 bStr의 값이 bool로 변환이 안되기때문에, 

isSuccess = false 가 된다.

응용해보자면
string iStr = "10.0";
int x;
int.TryParse(iStr, out x);
Console.WriteLine(x);
의 경우 0의 값을 낸다. 왜일까? 
10.0은 소수점이 포함된 문자열이라 int로 변환 하기를 실패했기 때문이에 결과값을 false로 반환 한것이며 
out 매개변수 x의 기본값인 0이 할당 되었기 때문이다. 만약에 10.0이 아닌 10이었다면 
10을 그대로 호출했을 것이다. 

string iStr = "10.2";
float x;
float.TryParse(iStr, out x);
Console.WriteLine(x);
이렇게 하면 10.2를 호출한다.

 

기본값은 아래와 같다.

  • 숫자형 (정수 및 실수)
    • int, long, short, byte, sbyte, ushort, uint, ulong: 모두 0
    • float: 0.0f
    • double: 0.0
    • decimal: 0.0m
  • 문자형
    • char: '\0' (널 문자)
  • 논리형
    • bool: false
  • 참조형
    • string, object, 배열, 클래스 등: null

즉 정리하자면 캐스팅에 성공하면 해당값을 out 하려는 매개변수의 자료형에 맞춰서 그대로, 실패하면 out 하려는 매개변수의 자료형의 기본값을 호출하는 것이다.

 



3. 학습하며 겪었던 문제점 & 에러

 

 


- 문제&에러에 대한 정의


- 내가 한 시도 - 해결 방법


- 새롭게 알게 된 점


- 이 문제&에러를 다시 만나게 되었다면?



4. 내일 학습 할 것은 무엇인지 

C# 문법 기초 추가 복습, 정리
기초 수학공부