카테고리 없음
C# 문법 정리 1
빈코더
2022. 6. 15. 17:34
728x90
c# 이란
- c#은 마이크로소프트에서 개발된 객체 지향 프로그래밍 언어로서 java 나 c++과 비슷한 면들을 많이 가지고 있다.
- - c#을 이야기 하면 자연스럽게 .NET 프레임워크를 함께 이야히 해야할 정도로 c#은 .NET 프레임워크를 이용하여 프로그래밍하는 대표적인 언어이다.
main
- 모든 c# 프로그램은 Main() 이라는 시작 함수(메서드)를 가져야 한다. Main() 메서드는 임의의 클래스 안에서 존재하며, 포르개름 상에 단 1개만 존재해야한다.
- Main()는 static을 선언되며, 메서드 인자는 string[] 문자열이다.
- system.Console은 .NET 프레임워크 클래스 이며, WriteLine은 화면에 데이터를 출력하는 메서드이다.
주석
- 한 라인에 대한 주석은 // , 여러 라인에 대한 주석은 /* */
타입
- C#을 포함한 모든 .NET 프로그래밍 언어는 .NET의 Common Type System에 정의된 .NET 데이타 타입을 사용한다.
- C#은 int, double, string 과 같은 C# 키워드로 데이타 타입을 표현할 수 있으며, 또한 System.Int32, System.Double, System.String 과 같은 .NET 데이타 클래스로 데이타 타입을 표현할 수도 있다.
- 내부적으로는 C# 컴파일러는 C# 키워드로 된 데이타 타입을 컴파일 후 .NET 데이타 타입으로 변경하게 된다.System.DateTime 날짜와 시간, 별도의 C# 키워드가 없음
object System.Object 모든 타입의 기본 클래스로 모든 유형을 포함할 수 있음
C# 데이타 타입.NET 데이타 타입설명
bool | System.Boolean | True or False |
byte | System.Byte | 8비트 unsigned integer |
sbyte | System.SByte | 8비트 signed integer |
short | System.Int16 | 16비트 signed integer |
int | System.Int32 | 32비트 signed integer |
long | System.Int64 | 64비트 signed integer |
ushort | System.UInt16 | 16비트 unsigned integer |
uint | System.UInt32 | 32비트 unsigned integer |
ulong | System.UInt64 | 64비트 unsigned integer |
float | System.Single | 32비트 single precision 부동소수점 숫자 |
double | System.Double | 64비트 double precision 부동소수점 숫자 |
decimal | System.Decimal | 128비트 Decimal |
char | System.Char | 16비트 유니코드 문자 |
string | System.String | 유니코드 문자열 |
System.DateTime | 날짜와 시간, 별도의 C# 키워드가 없음 | |
object | System.Object | 모든 타입의 기본 클래스로 모든 유형을 포함할 수 있음 |
리터럴 데이터
- C# 코드에서 123, true, "ABC"와 같이 값을 직접 써줄 수 있는데, 이를 리터럴(Literal)이라 한다. C#에서 리터럴 데이터를 사용할 때, 별도의 접미어 표시(Suffix)가 없는 경우 C# 컴파일러는 int, double, char, string, bool 데이타 타입에 기본적으로 그 값을 할당한다.
- 따라서, 특정 데이타 타입을 지정하고 싶으면, 리터럴 데이타 뒤에 1~2자의 타입 지정 접미어(Suffix)를 추가해야 한다. Suffix는 대소문자 구분이 없다.
C# 데이타 타입 예제
// Bool
bool b = true;
// Numeric
short sh = -32768;
int i = 2147483647;
long l = 1234L; // L suffix
float f = 123.45F; // F suffix
double d1 = 123.45;
double d2 = 123.45D; // D suffix
decimal d = 123.45M; // M suffix
// Char/String
char c = 'A';
string s = "Hello";
// DateTime 2011-10-30 12:35
DateTime dt = new DateTime(2011, 10, 30, 12, 35, 0);
- float 데이타 타입은 숫자 뒤에 123.45F와 같이 F를 붙여 double이 아닌 float 타입임을 나타낸다.
- double 데이타 타입은 숫자 뒤에 123.45D과 같이 D를 붙이거나 혹은 아무것도 붙이지 않음으로 해서 double 타입임을 나타낸다.
- decimal 데이타 타입은 숫자 뒤에 123.45M과 같이 M를 붙여 decimal 타입임을 나타낸다.
- char 데이타 타입은 작은따옴표 ' (single quotation)을 사용하여 한 문자를 할당한다.
- string 데이타 타입은 큰따옴표 " (double quotation)을 사용하여 문자열을 할당한다.
최대값, 최소값?
- int i = int.MaxValue;
- float f = float.MinValue;
NULL
- 어떤 변수가 메모리 상에 어떤 데이타도 가지고 있지 않다는 의미로서 NULL을 사용하는데, NULL을 표현하기 위하여 C# 에서는 소문자 null 이라는 키워드를 사용한다.
- 모든 데이타 타입이 NULL을 가질 수 있는 것은 아니며, 사실 데이타 타입은 NULL을 가질 수 있는 타입 (Reference 타입)과 가질 수 없는 타입 (Value 타입)으로 구분될 수 있다.
Nullable Type
- 어떤 변수가 메모리 상에 어떤 데이타도 가지고 있지 않다는 의미로서 NULL을 사용하는데, NULL을 표현하기 위하여 C# 에서는 소문자 null 이라는 키워드를 사용한다.
- 모든 데이타 타입이 NULL을 가질 수 있는 것은 아니며, 사실 데이타 타입은 NULL을 가질 수 있는 타입 (Reference 타`입)과 가질 수 없는 타입 (Value 타입)으로 구분될 수 있다.
// Nullable 타입
int? i = null;
i = 101;
bool? b = null;
//int? 를 int로 할당
Nullable j = null;
j = 10;
int k = j.Value;
변수
- C# 변수는 메서드 안에서 해당 메서드의 로컬변수로 선언되거나, 혹은 클래스 안에서 클래스 내의 멤버들이 사용하는 전역적 변수(이를 필드(Field)라고 부름)로 선언될 수 있다.
- 로컬변수는 해당 메서드내에서만 사용되며, 메서드 호출이 끝나면 소멸된다. 반면 필드는 클래스의 객체가 살아있는 한 계속 존속하며 또한 다른 메서드들에서 필드를 참조할 수 있다. (주: 만약 필드가 정적 필드(static field)이면 클래스 Type이 처음으로 런타임에 의해 로드될 때 해당 Type 객체(타입 메타정보를 갖는 객체)에 생성되어 프로그램이 종료될 때까지 유지된다).
- 로컬변수는 기본값을 할당받지 못하기 때문에 반드시 사용 전에 값을 할당해야 하는 반면, 필드는 값을 할당하지 않으면, 해당 타입의 기본값이 자동으로 할당된다. 예를 들어, int 타입의 필드인 경우 기본값 0 이 할당된다.
- 모든 C# 변수의 이름은 대소문자를 구별(case-sensitive)한다. 예를 들어, var1 과 Var1은 서로 다른 변수이다.
상수
- C# 상수는 C# 키워드 const를 사용하여 정의한다. C# 변수와 비슷하게 선언하는데, 다만 앞에 const를 붙여 상수임을 나타낸다. 상수와 변수의 차이점은, 변수는 프로그램 중간에 값을 변경할 수 있지만, 상수는 초기에 정한 값을 중간에 변경할 수 없다. const는 필드 선언부에서 사용되거나 메서드 내에서 사용될 수 있으며, 컴파일시 상수값이 결정된다.
- C# const 대신 readonly 키워드를 사용하여 읽기전용 (개념적으로 상수와 비슷한) 필드를 만들 수 있다. readonly는 필드 선언부나 클래스 생성자에서 그 값을 지정할 수 있고, 런타임시 값이 결정된다)
728x90