기본 문법
기본 자료형
개발자가 별도로 코드를 만들지 않아도 C# 언어에서 자체적으로 제공하는 데이터 형식.
정수형 기본 타입
이름 | 범위 | .NET Framework 형식 | 의미 |
---|---|---|---|
sbyte | -128~127 | System.SByte | 부호 있는 8비트 정수 |
long | –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | System.Int64 | 부호 있는 64비트 정수 |
ulong | 0 ~ 18,446,744,073,709,551,615 | System.UInt64 | 부호 없는 64비트 정수 |
실수형 기본 타입
이름 | 크기 | .NET Framework 형식 |
---|---|---|
float | 4바이트 | System.Single |
double | 8바이트 | System.Double |
decimal | 16바이트 | System.Decimal |
실수형 타입 선택 기준
소수점이 있는 연산을 할 때는 일반적으로 double을 사용한다. 하지만 빠른 처리 속도가 필요한 곳에서 연산하려는 값이 4바이트 실수로 충분하다면 float을 사용 할 수 있다.
decimal의 경우 반올림 오차가 허용되지 않는 회계 계산에 적합하다.
실수형 타입의 접미사
float f = 5.2f; //float의 경우에는 숫자 값 다음에 f.
double d = 10.5;
decimal money = 200.099m //decimal의 경우에는 숫자 값 다음에 m.
문자형 기본 타입
이름 | 범위 | .NET Framework 형식 | 의미 |
---|---|---|---|
char | U+0000 ~ U+FFFF | System.Char | 유니코드 16비트 문자 |
string | 문자열 | System.String | 유니코드 문자열 |
문자는 작은 따옴표를 사용해 표현한다.
char ch = 'A';
Console.WriteLine(ch); //A 문자 출력
char single quote = '\'' //작은 따옴표는 역슬래시 입력해야 표현가능.
char slash = '\\' //역슬래시는 두번입력해야 역슬래시로 표현.
기본 문법 요소
식별자
임의로 선택해서 이름지을 수 있는 단어.
변수
닷넷에서 변수의 종류는 값 형식, 참조 형식 이렇게 2가지 변수가 있다.
값 형식 & 참조 형식 변수
- 값 형식 : 값 자체가 스택 영역에 저장된다. 정수형, 실수형, 불린형 기본 타입 변수가 값 형식이다.
- 참조 형식 : 값은 힙 영역에 저장되고 그 값의 주소값이 스택 영역에 저장된다. 초기화되지 않은 모든 참조형 변수는 null 값을 가진다. string, 배열, 클래스, object
- 대입 : 값 형식끼리 대입했을 때는 스택 내부에서 각각 다른 위치에 동일한 값이 복사된다. 참조 형식의 경우에는 힙 메모리에 하나의 값만 위치한 상황에서 스택의 변수들이 같은 힙 위치를 가리킨다.
기본값
- bool : false
- 숫자 : 0
- 참조 형식 : null
상수
상수는 const 예약어를 쓰는데, 컴파일 할 때 값이 결정되어야 한다.
int n = Math.Max(0, 5); //프로그램을 실행할 때 n값이 결정
const int maxN = Math.Max(0, 5); //maxN은 상수이므로 컴파일할 때 값이 결정되어야 하는데
//Max 메소드는 런타임에 실행되므로 컴파일러가 어떤 값을 넣을지 몰라서 오류 발생
const int n = 5 * 100 / 2 //이런 단순 수식은 컴파일러가 계산해서 대입 가능 (상수식 이라고 함)
배열
배열도 참조 형식이기 때문에 배열의 값을 힙에 할당한다.
int [] products = new int[5]; //이런 식으로 선언.
int [] products = new int[5] {1,2,3,4,5}; //배열 개수 지정 초기화.
int [] products = new int[] {1,2,3,4,5}; //배열 개수 미지정.(컴파일러가 알아서 계산해서 크기 5로 지정)
string도 char의 배열이다.
관계 연산자, 논리 연산자
- 배타적 논리합(XOR) 연산자 : ^
- 단락 계산, 단축 평가 : 한 조건에 의해서 다른 조건의 결과값에 상관 없이 무조건 참, 거짓이 나오기 때문에 다른 조건은 실행도 되지 않는 것. (|| 일 때 한 쪽이 참, &&일 때 한 쪽이 거짓)
int n = 50;
int x = 100;
if (x > 10 || n++ > 10) // 단락 계산이 발생하기 때문에 n++부분이 실행되지 않아서 n값은 그대로 50에서 머무른다.
{
//생략
}
//증감 연산자는 논리 연산자의 피연산자에 해당하는 식에 쓰는 것 보다 따로 분리해서 쓰는 것이 바람직하다.
조건문
- switch 문에서 C/C++와 달리 case문에 break를 포함시키는게 강제사항이라서 break가 없으면 오류가 발생한다. case 문에 실행코드 없으면 생략 가능
반복문
- foreach 문 : foreach (표현식요소_자료형 변수명 in 표현식) 구문;
int [] arr = new int[] {1,2,3,4,5};
foreach (int elem in arr)
{
Console.WriteLine(elem); //1,2,3,4,5가 다섯줄에 걸쳐 출력된다.
}
//다음과 같이 var를 사용하면 다양한 타입에 대해서 foreach를 사용 가능하다.
foreach (var elem in arr)
{
//생략
}
문제풀이
for문을 이용한 별찍기
class StarTest
{
static void Main(string[] args)
{
int num;
Console.WriteLine("반복 횟수를 입력하세요.");
for (;;)
{
try
{
num = Convert.ToInt32(Console.ReadLine());
if (num <= 0)
{
Console.WriteLine("0보다 작거나 같은 수는 입력할 수 없습니다.");
}
else
{
for (int i = 0; i < num; i++)
{
for (int j = 0; j < i + 1; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
break;
}
}
catch (FormatException)
{
Console.WriteLine("정수값을 입력해주세요.");
}
catch (OverflowException)
{
Console.WriteLine("int 범위의 값을 입력해주세요.");
}
Console.WriteLine("다시 입력해주세요.");
}
}
}
}