091
[C#] 기초 문법(토큰,자료형,형변환,배열) 본문
01. 토큰
- 토큰 : 문법적으로 나눌 수 없는 언어 요소 (ex) 예약어, 식별자, 리터럴, 연산자, 구분자
-> 예약어(keyword) : 컴파일러가 해석할 수 있도로고 미리 정의해둔 토큰 (ex) 자료형(int,double), 제어문(for, if)
-> 식별자(identifier) : 프로그래밍 언어 요소들에 부여하는 이름으로 명명 규칙을 따라 만들어야함
-> 리터럴(literal) : 어떤 숫자나 문자가 가진 값 그대로를 의미, 변하지 않으므로 상수라고 하기도 함
-> 연산자(operator) : 특정 연산을 수행하기 위해서 사용되는 기호
-> 구분자(punctuator) : 문법적으로 구분하는 기호
02. 자료형
* C#은 객체 지향 프로그래밍(OOP)으로 자료형은 값형과 참조형으로 나뉨
-> 값 형(Value Type): int, float, bool 등의 기본형과 struct, enum. 데이터를 직접 저장하고, 값 자체를 복사
-> 참조 형(Reference Type): string, array, class 등. 데이터를 참조(주소)하고, 참조 주소를 복사.
- 정수형
자료형 | 크기 | 범위 |
sbyte(signed byte) | 1byte(8bit) | -128 ~ 127 |
byte | 1byte(8bit) | 0 ~ 255 |
short | 2byte(16bit) | -32,768 ~ 32,767 |
ushort(unsigned short) | 2byte(16bit) | 0 ~ 62,535 |
int | 4byte(32bit) | -2,147,483,648 ~ 2,148,483,647 |
uint(unsigned int) | 4byte(32bit) | 0 ~ 4,294,967,295 |
long | 8byte(64bit) | -9,223,372,036,854,775,808 ~ -9,223,372,036,854,775,807 |
ulong(unsigned long) | 8byte(64bit) | 0 ~ 18,446,744,073,709,551,615 |
- 실수형
자료형 | 크기 | 범위 | 정밀도(유효 자릿수) | 리터럴 형식 접미사 |
float | 4byte(32bit) | ±1.5 × 10^−45 ~ ±3.4 × 10^38 | 7자리 | f or F |
double | 8byte(64bit) | ±5.0 × 10^−324 ~ ±1.7 × 10^308 | 15~16자리 | - |
decimal | 16byte(128bit) | ±1.0 × 10^−28 ~ ±7.9 × 10^28 | 28~29자리 | m or M |
- 문자형
자료형 | 크기 | 범위 |
char | 2byte(16bit,유니코드 문자) | U+0000 ~ U+FFFF |
string | 유동적 | 없음 |
- 논리형
자료형 | 크기 | 값 |
bool | 4byte | true,false |
- 기타
object타입은 모든 타입의 값을 담을 수 있는 것으로, 남용 시 메모리 공간을 낭비하여 오류 발생률을 높임
- cosnt 키워드를 자료형 앞에 써서 상수를 만들 수 있음. const를 붙여 데이터를 선언할 때는 꼭 초기값을 지정해야하며 의미대로 상수가 되는 것이니 당연히 값 변경도 불가능함
03. 형변환
- 형변환은 암묵적 형변환(Implicit casting), 명시적 형변환(Explicit casting), 메서드를 활용한 변환(Convert 클래스 등)이 있음
- 암묵적 형변환이란 범위가 작은 자료형을 범위가 큰 자료형에 담거나 연산할 때 일어남
using System;
public class SoominExample1
{
public static void Main(string[] args)
{
int a = 1;
double b = 3.3;
Console.WriteLine(a + b); // 출력 : 4.3
}
}
- 명시적 형변환이란 범위가 큰 자료형을 작은 자료형에 담거나 연산할 때 의도적으로 바꿔주는 것임
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
int a = 1;
double b = 3.3;
Console.WriteLine(a + (int)b); // 출력 : 4(소수점 이하를 버리고 출력)
}
}
- 메서드를 활용한 변환
• Convert 클래스 : C#에서 다양한 타입 간 변환을 도와주는 정적 클래스로, Convert.ToInt32(), Convert.ToDouble() 등 여러 메소드를 제공하며, 널 값도 처리가 가능하다는 게 특징(0이나 false로 변환)
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
string strNum = "91";
int num = Convert.ToInt(strNum);
Console.WriteLine(num + 1); // 출력 : 91
}
}
• Parse()와 TryParse() : 자료형 메서도 형식으로 사용되어 문자열을 특정 타입으로 변환하는 메서드인데 오류처리 방식에서 차이를 드러냄. Parse()의 경우, 예외처리가 되지 않아서 변환이 실패하면 오류(예외)가 발생함. TryParse()의 경우, 변환이 실패하여도 false가 할당되는 것뿐이지 예외가 발생하지는 않음. 하지만 out을 통해 따로 반환값을 저장해줘야함.
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
string str = "123";
int num = int.Parse(str);
Console.WriteLine(num); // 123
string str = "123";
bool success = int.TryParse(str, out int num);
if (success)
Console.WriteLine($"변환 성공: {num}"); // 변환 성공: 123
else
Console.WriteLine("변환 실패");
}
}
04. 배열
- 배열은 위에서 말했듯이 참조 형 중 하나로 객체의 특징을 알아야 이해가 수월함
// 자료형[] 배열이름;
int[] scores;
int[] scores = new int[5]; //참조형의 경우 기본값이 설정돼있어 0으로 저장되있음
int[] scores = new int[]{10,20,30,40,50}
int[] scores = {10,20,30,40,50}
- 배열은 타입이 같은 여러 개의 자료들을 관리할 때 사용됨, 데이터 구조에 한번에 저장하고 인덱스를 이용해 접근(인덱스는 0부터 시작)
- 위처럼 새 배열을 선언할 때는 처음부터 int[5] scores; 작성이 불가능함,크기를 지정하려면 new 연산자(객체 생성 연산자)를 이용하여야 함!!
- 배열의 크기는 한번 정해지면 변경할 수 없으므로 새로운 배열을 생성하여 복사하는 식으로 크기를 키우는 방법을 추천하거나 제네릭 타입을 이용해 동적으로 크기를 변경할 수 있음
* 일부 내용 출처 : 백현우. (2020). 처음 배우는 C# 프로그래밍. 위키북스.
'Programming Language > C#' 카테고리의 다른 글
[C#] Unity 속 C# script(4) (8) | 2024.10.21 |
---|---|
[C#] Unity 속 C# script(3) (3) | 2024.10.20 |
[C#] Unity 속 C# script(2) (3) | 2024.10.19 |
[C#] Unity 속 C# script(1) (4) | 2024.10.14 |
[C#] 기초문법(연산자,제어문) (4) | 2024.10.13 |