struct

값 형식을 나타내는 키워드이다.

struct로 정의된 데이터 타입은 클래스와 비슷한 멤버를 가질 수 있지만 다른 특징이 있다.

 

클래스와 차이

struct는 클래스와 달리 상속이나 인터페이스 구현 등의 기능을 제공하지 않으며 struct는 메모리에 적재되며 개체의 인스턴스화를 할 수 있다. 또한 struct는 기본적으로 stack에 할당되어 heap 메모리를 사용하지 않기 때문에 일반적인 값 형식을 나타내기 위해서 사용된다.

 

struct는 변수에 값을 할당할 때 복사가 일어나게 된다. 예를 들어 struct로 정의된 Point 타입의 변수에 값을 할당하면 해당 값을 복사하여 새로운 메모리 공간에 저장한다.

 

struct Point
{
	public int X;
    public int Y;
}

Point p1 = new Point{X = 10, Y = 20};
Point p2 = p1;	// 이때 p1의 값 전체가 복사되어 p2에 저장된다.

구조체가 메모리에 할당될 때 데이터 멤버들 사이에는 일정한 간격을 두고 배치된다. 

이 간격을 Padding이라고 하며 데이터 멤버의 크기와 정렬을 고려해 계산된다. 이는 구조체 전체 크기가 미리 예측 가능하기 위해서이며 이 크기는 구조체 전체 크기 합에 패딩을 합한 값이다.

 

패딩은 구조체의 크기를 불필요하게 늘리기도 하므로 크기를 최소화하기 위해서는 큰 데이터를 먼저 선언하고 뒤에 작은 데이터들이 선언되도록 멤버들을 크기에 따라 정렬하는것이 좋다. 이렇게 구조체를 제대로 이해하고 사용하기 위해서는 각 타입들의 크기와 패딩의 존재에 대해 정확한 이해가 필요하다.

 

 

 

 

 

728x90
반응형

string

문자열을 나타내는 데이터 타입이다. 문자열은 큰 따옴표로 묶인 문자들의 집합으로 표현된다.

 

string greeting = "Hello World!";

 

string은 다른 기본 데이터 타입과 다르게 참조형으로 System.String 클래스의 인스턴스이다. 따라서 string 변수에는 문자열의 주소가 저장되는데 이로 인해 문자열에 변경이 생기면 새로운 문자열 인스턴스가 생성이 된다.

 

string 타입은 null 값을 가질 수 있으며 이때는 아직 초기화되지 않은 것으로 간주된다.

string str = null;
// str 접근시 초기화 먼저 하라는 컴파일 에러 발생

 

728x90
반응형

정수형

정수형을 표현하는 데이터 타입에는 대표적으로 int가 있고 그 외에 long, short... 등이 있다.

일반적인 상황에서 모두 int로 표현이 가능하기 때문에 가장 많이 사용된다.

 

하지만 int로 표현할 수 있는 크기를 벗어난 특별한 경우도 있기 때문에 long이 존재한다.

long은 int 보다 더 큰 정수 범위를 저장할 수 있다.

 

반대로 저장할 정수값이 작은 경우에는 굳이 int를 사용하지 않아도 되기 때문에 더 적은 공간을 차지하는 short 정수형도 있다.

 

양의 정수

만약 저장할 데이터가 항상 양의 정수라면 굳이 음의 정수까지 저장하기 위한 변수의 크기를 할당할 필요가 없다.

따라서 unsigned를 붙여서 uing, ulong, ushort 정수형의 양의 범위만 저장할 수 있도록 크기를 사용할 수 있다.

 

 

그 외의 특징으로는 CPU가 정수 계산에 대해서 최적화되어 있기 때문에 소수점 계산보다 훨씬 빠르게 계산이 가능하다.

또한 부동 소수점 숫자와 비교하여 더 작은 메모리를 사용하기 때문에 대규모 데이터 세트를 처리할 때 중요한 요소가 된다.

 

 

728x90
반응형

'Program Language > C#' 카테고리의 다른 글

C# 구조체 키워드 : struct  (0) 2023.04.25
C# 문자열 키워드 : string  (0) 2023.04.25
C# 열거형 키워드 : enum  (0) 2023.04.25
C# 문자 저장 키워드 : char  (0) 2023.04.25
C# 데이터 처리 키워드 : byte, sbyte  (0) 2023.04.25

enum

enumeration

열거형은 몇 개의 상수 값들을 가지며 이를 사용하여 변수를 선언하거나 함수에서 사용할 수 있다.

 

enum Color { Red, Green, Blue };

 

열거형 Color는 Red, Green, Blue라는 세 개의 상수값이 있다. 각 상수 값은 0부터 시작하는 숫자로 자동으로 지정된다.

Red=0, Green=1, Blue=2 

선언된 순서로 값이 지정되기 때문에 순서에 영향을 받는다.

 

만약 Red=10 으로 선언된 경우 뒤에는 별도의 선언이 없는 경우 자동으로 Green=11, Blue=12로 지정된다.

 

열거형으로 정의된 상수 값은 변수나 함수에서 사용될 수 있다.

Color myColor = new Color();	// 기본값 0 ( Red )
myColor = Color.Red;

 

enum to int

enum은 캐스트를 통해서 정수로 사용하는것도 가능하다.

int a = (int)Color.Red;

 

enum to string

enum 값을 toString()하면 선언된 상수명으로 반환된다.

string strColor = Color.Red.ToString();
// strColor는 Red 이다.

 

string to enum

문자열에서 enum 상수명으로 사용하는것도 가능하다.

string colorName = "Red";
Color color = new Color();
Enum.TryParse<eCurrency>(str, out curr);
// curr = Color.Red;

 

숫자를 문자열 형태로 볼 수 있기 때문에 코드의 가독성을 올리기 위한 매크로상수처럼 사용하거나 특정 상태를 관리하기 위해서 사용하기 한다.

728x90
반응형

char

유니코드 문자를 표현하기 위한 데이터 타입이다.

2바이트의 크기를 가지며 0부터 65535까지의 값을 저장할 수 있다. 이 범위 내의 값은 유니코드 표준에서 정의된 문자와 대응되는데 A라는 문자를 char 타입으로 표현하면 65 값을 가진다.

또한 이스케이프를 사용하여 특수 문자들을 표현할 수 있다. \n, \t ...

 

C#의 문자열은 char 타입의 배열 형태로 구현되어 있으며 문자열에서 인덱스를 사용하여 개별 문자에 접근하는 것이 가능하다.

 

 

728x90
반응형

decimal

부동 소수점과 다르게 고정 소수점 숫자를 나타내는 자료형이다. 정확한 소수점 계산이 필요한 금융, 세금, 계산 등과 같은 분야에서는 decimal을 자주 사용한다.

 

최대 28자리의 숫자를 나타낼 수 있으며 부호, 정수, 소수점, 소수점 이하 자릿수를 나타내는 4바이트 정수형 정수부와 소수부를 나타내는 4바이트 정수형 소수부 그리고 소수점 위치를 나타내는 4바이트 정수형 지수부 등으로 구성된다.

 

decimal balance = 100.50m;
decimal withdrawalAmount = 20.25m;
decimal newBalance = balance - withdrawalAmount;
Console.WriteLine($"New balance : {newBalance:C}");
// balance : 기존 잔액
// withdrawalanceAmount : 출금액
// newBalance : 출금 후 잔액

// New balance: $80.25 출력

decimal을 사용할 때는 m으로 끝나는 접미사를 사용해서 변수를 선언해야 한다.

 

소수점 자릿수가 다른 경우의 계산에서는 더 적은 숫자와 같은 자릿수로 맞춘 후 계산이 된다.

 

decimal d1 = 100.123m;
decimal d2 = 10.1m;

// d1 + d2 = 110.223m

만약 자릿수를 맞추어도 계산이 불가능한 경우에는 OverflowException이 발생한다. 따라서 숫자를 계산할 때는 소수점 자릿수를 유의하여 맞추는 것이 좋다.

728x90
반응형

bool

영국의 수학자 겸 논리학자인 조지 불의 이름에서 유래되었다.

bool은 참과 거짓의 값을 저장하는 변수타입으로 논리 자료형이라고도 한다.

 

프로그래밍 언어마다 다르지만 true, false는 정수형 1, 0과도 대응된다.

조건문과 논리 연산자 등에서 많이 사용된다.

 

조건문

bool isDone = true;
if (isDone)
{
	Console.WriteLine("작업 완료");
}

 

논리 연산자

&& (and) : 좌항과 우항이 모두 true일 때 true를 반환한다.

||(or) : 좌항과 우항 중 하나라도 true이면 true를 반환한다.

!(not) : 피연산자의 값을 반대로 반환한다.

 

int x = 10;
bool b1 = ( x > 5 ) && ( x < 20 );	// b1 == true
bool b2 = ( x < 0 ) || ( x > 100 );	// b2 == true
bool b3 = !(x == 10);	// b3 == false

 

bool 타입의 가장 흔하게 사용하는 방식으로 토글이 있다.

 

isDone = !isDone;

 

해당 코드가 실행되면 isDone은 언제나 현재 값의 반대 값을 가지게 되며 이 코드를 통해서 true와 false를 번갈아 가지는 토글 기능을 갖게 된다.

728x90
반응형

+ Recent posts