카테고리 없음

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