반응형
C#
- C언어에서 비롯된 객체 지향 언어 (Object-Oriented Programming, OOP)
- 자바와 같이 가비지 컬렉터(Garbage Collector)를 사용하여 자동으로 메모리를 관리
- 가비지 컬렉터 : 자동으로 메모리를 관리해주는 기법
- 닷넷(.NET)기반 프로그래밍 언어
형식 및 변수 (Types & Variables)
- 형식
- C# 내 모든 데이터의 구조와 동작을 정의
- 형식 선언에는 해당 멤버, 기본 형식, 구현하는 인터페이스 및 해당 형식에 허용되는 작업이 포함 될 수 있음
- 변수 : 특정 형식의 인스턴스를 참조하는 레이블
- 값 형식의 변수 : 해당 데이터가 직접 포함
- 변수가 자체적으로 데이터 사본을 갖고 있음
- 한 변수에 대한 작업이 다른 변수에 영향을 미칠 수 없음 (ref, out 매개 변수 제외)
- 참조 형식의 변수 : 객체 데이터에 대한 참조가 저장
- 두 개의 변수가 같은 객체를 참조 할 수 있음
- 한 변수에 대한 작업이 다른 변수에서 참조하는 객체에 영향을 미칠 수 있음
- 식별자 (Identifier)
- 변수 이름, 공백이 없는 유니코드 문자 시퀀스
- @ 접두사가 있으면 C# 예약어 일 수 있음
- 값 형식의 변수 : 해당 데이터가 직접 포함
값 형식 (Value Types)
- 단순 형식 (Simple Types)
- 부호 있는 정수(Signed Integral) : sbyte, short, int, long
- 부호 없는 정수(Unsigned Integral) : byte, ushort, uint, ulong
- 유니 코드 문자(Unicode Characters) : UTF-16 단위의 char
- 부동 소수점(IEEE Binary Floating-point) : float, double
- 고정 소수점(High-precision Decimal Floating-point) : decimal
- 부울(Boolean) : bool
- 열거 형식 (Enum Types)
- enum E {...} 의 사용자 정의 형식 : enum
- 명명된 상수가 있는 고유한 형식
- 8가지 정수 형식 중 하나의 내부 형식을 갖음
- enum 형식의 값 집합은 내부 형식의 값 집합과 동일
- enum E {...} 의 사용자 정의 형식 : enum
- 구조체 형식 (Struct Types)
- struct S {...} 양식의 사용자 정의 형식
- Nullable 값 형식 (Nullable Value Types)
- null 값을 갖는 다른 모든 값 형식의 확장
- 별도의 정의가 필요하지 않음
- 튜플 값 형식 (Tuple Value Types)
- (T1, T2, ...) 양식의 사용자 정의 형식
참조 형식 (Reference Types)
- 클래스 형식 (Class Types)
- 다른 모든 형식의 기본 클래스 : object
- 유니코드 문자열 : UTF-16 단위의 시퀀스
- class C {...} 양식의 사용자 정의 형식
- 인터페이스 형식 (Interface Types)
- interface I {...} 양식의 사용자 정의 형식
- 배열 형식 (Array Types)
- 1차원 배열 : 예) int[]
- 다차원 배열 : 예) int[,]
- 가변 배열 : 예) int[][]
- 대리자 형식 (Delegate Types)
- delegate int D(...) 양식의 사용자 정의 형식
형식 선언
- 새 형식의 이름과 멤버를 지정
- 사용자 정의가 가능한 6가지 형식
- 클래스 형식 (Class types)
- 데이터 멤버(필드) 및 함수 멤버(메서드, 속성 및 기타)를 포함하는 데이터 구조를 정의
- 단일 상속 및 다양성과 파생된 클래스가 기본 클래스를 확장
- 구조체 형식 (Struct types)
- 데이터 멤버 및 함수 멤버로 구조체를 나타내는 클래스 형식과 유사
- 클래스와 달리 구조체는 값 형식이며 일반적으로 힙 할당이 필요하지 않음
- 사용자 지정 상속을 지원하지 않으며 객체(object) 형식으로부터 암시적 상속
- 인터페이스 형식 (Interface types)
- 계약을 공용 멤버의 명명된 집합으로 정의
- 구현하는 클래스(class) 또는 구조체(struct)는 인터페이스의 멤버 구현을 제공해야 함
- 여러 기본 인터페이스에서 상속 될 수 있음
- 클래스 또는 구조체는 여러 인터페이스를 구현 할 수 있음
- 열거형 형식 (Enum types)
- 대리자 형식 (Delegate types)
- 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식
- 메서드를 변수에 할당되고 매개 변수로 전달될 수 있는 엔티티로 취급
- C언어의 포인터와 비슷하지만 멤버 함수에 대해 객체 지향적임
- 튜플 값 형식 (Tuple value types)
- + 레코드 형식(record), 레코드 구조(record struct) 또는 레코드 클래스(record class)를 선언 할 수 있음
- 레코드 : 주로 연결된 동작을 최소화하면서 값을 저장하는데 사용
- 클래스 형식 (Class types)
데이터 타입 (Data Types)
기본 제공 형식
정수 (Integer)
- 부호 있는 정수 (Signed Integer)
- sbyte : 1바이트
- short : 2바이트
- int : 4바이트
- long : 8바이트
- 부호 없는 정수 (Unsigned Integer)
- byte : 1바이트
- ushort : 2 바이트
- uint : 4바이트
- ulong : 8바이트
소수점 (Floating-point)
- 부동 소수점
- float : 4바이트
- double : 8바이트
- 고정 소수점
- decimal : 16바이트
문자/문자열 (Character/String)
- char : 2바이트의 유니코드 문자
- string : 크기가 정해져 있지 않은 문자열 객체
불린 (Boolean)
- bool : 1바이트 (True or False)
리터럴 타입 (Literal Types)
- 리터럴(Literal) : 코드에 123, "ABC"와 같이 직접 값을 정의하는 것
- 리터럴 데이터 사용시 별도의 접미어가 없을 경우 컴파일러는 기본적으로 리터럴 타입을 할당
- 디폴트 리터럴 타입 (Default literal types)
- 정수 : int (예: 123)
- 실수 : double (예: 12.3)
- 문자열 : string (예: "A")
- 문자 : char (예: 'a')
- 불 : bool (예: true)
데이터 타입 사용 예시
// Bool : true or false
bool b = true;
// 숫자
short sh = -32768;
int i = 2147483647;
long l = 1234L; // L 접미사, int가 아닌 long 타입 선언
float f = 123.45F; // F 접미사, double이 아닌 float 타입 선언
double d1 = 123.45; // 디폴트 리터럴 값
double d2 = 123.45D; // D 접미사
decimal d = 123.45M; // M 접미사, double이 아닌 decimal 타입 선언
// 문자/문자열
char c = 'A';
string s = "Hello";
// 시계열
// DateTime 2023-01-30 01:31
DateTime dt = new DateTime(2023, 01, 30, 01, 31, 0);
참고
반응형