24.01.14 TIL - [C#] 기초 (2) : 변수와 자료형

JJwoo·2024년 1월 14일
0

C#

목록 보기
2/20
post-thumbnail

📑 자료형

  • 변수가 저장할 수 있는 데이터의 종류와 특성을 정의하는 분류체계

C#에서 정수형 자료형으로는 sbyte, byte, short, ushort, int, uint, long, ulong이 있으며, 각각의 자료형은 메모리의 크기와 표현 범위가 다르다.

자료형.NET 데이터 타입크기 (바이트)범위
sbyteSystem.SByte1-128 ~ 127
byteSystem.Byte10 ~ 255
shortSystem.Int162-32,768 ~ 32,767
ushortSystem.UInt1620 ~ 65,535
intSystem.Int324-2,147,483,648 ~ 2,147,483,647
uintSystem.UInt3240 ~ 4,294,967,295
longSystem.Int648-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ulongSystem.UInt6480 ~ 18,446,744,073,709,551,615
floatSystem.Single4±1.5 × 10^-45 ~ ±3.4 × 10^38
doubleSystem.Double8±5.0 × 10^-324 ~ ±1.7 × 10^308
decimalSystem.Decimal16±1.0 × 10^-28 ~ ±7.9 × 10^28
charSystem.Char2유니코드 문자
stringSystem.String유니코드 문자열
boolSystem.Boolean1true 또는 false

C#에서 주로 사용하는 자료형을 간단하게 정의하자면

  • int: 정수를 저장하는 데 사용되는 자료형
    (예: -10, 0, 100)

  • double: 부동 소수점 숫자를 저장하는 데 사용되며, 실수 값을 나타냅니다.
    (예: 3.14, -0.001)

  • char: 단일 문자를 저장하는 데 사용되는 자료형입니다.
    (예: 'a', 'Z', '3')

  • string: 문자의 연속, 즉 텍스트를 저장하는 데 사용됩니다. (예: "Hello World")

  • bool: 논리적 값 (참 또는 거짓)을 나타냅니다.


> 자료형 사용의 의의 <

1. 메모리의 효율적인 사용

해당 자료형이 필요한 크기만큼의 메모리를 할당하여 메모리의 효율적인 사용을 가능하게 한다.

2. 정확한 데이터 표현

데이터의 특성에 따라 정확한 표현이 가능.
예를 들어, 부동소수점 자료형인 float과 double은 소수점 이하 자릿수가 다르며, 각각의 자료형은 다른 범위의 값까지 표현이 가능.

3. 타입 안정성

코드의 타입 안정성을 유지할 수 있다. 예를 들어, 정수형 자료형으로 byte를 사용하면, 해당 자료형이 가질 수 있는 값의 범위를 벗어날 경우 오류가 발생하므로, 코드의 안정성을 보장할 수 있다.

4. 플랫폼 호환성

다양한 자료형을 사용하면, 다른 컴퓨터 아키텍처나 운영 체제 간의 호환성을 보장할 수 있다.
예를 들어, int의 크기가 다른 시스템에서도 일관되게 4바이트를 유지하므로, 데이터의 교환과 처리가 더 일관적이게 됨.

5. 성능 최적화

특정 작업에 적합한 자료형을 사용함으로써, 프로그램의 실행 속도와 성능을 최적화할 수 있습니다.
그리고

6. 오버플로우 및 언더플로우 방지

적절한 크기의 자료형을 사용하면, 데이터의 오버플로우(값이 너무 커서 자료형의 최대값을 초과하는 경우)나 언더플로우(값이 너무 작아서 최소값보다 작아지는 경우)를 방지할 수 있다.


🧿 리터럴 (literal)

int num = 10;
float f = 3.14f;
char c = 'A';
string str = "Hello, World!";

int num1 = 0x10;
int num2 = 0b1010;
long num3 = 100000000000000L;

1. 리터럴의 개념과 역할

  • 프로그램에서 직접 사용되는 상수 값으로, 소스 코드에 직접 기록되어 있는 값
  • C#에서 리터럴은 컴파일러에 의해 상수 값으로 처리되며, 변수나 상수에 할당되거나 연산에 사용

2. 리터럴의 종류와 예시

  • C#에서는 다양한 종류의 리터럴을 지원
  • 각각의 리터럴은 다른 형식으로 표현되며, 다양한 값의 범위를 가지고 있다.

3. 리터럴을 사용하는 이유

  • 명확성 : 소스 코드 내에서 변수나 상수에 할당될 구체적인 값을 명확하게 표현할 수 있다.

  • 효율성: 프로그램 실행 도중에 할당될 값이 미리 결정되어 있기 때문에, 실행 시간에 해당 값을 계산하거나 변환할 필요가 없어서 프로그램의 효율성을 높일 수 있음.

  • 타입 안정성: 리터럴은 특정 자료형에 맞게 정의될 수 있어, 컴파일러가 타입 오류를 더 쉽게 감지하고, 프로그램의 안정성을 향상시킬 수 있다.

  • 간결성: 복잡한 값이나 표현식을 간단하고 직관적인 방식으로 코드에 포함시킬 수 있다.

코드의 가독성과 유지 관리를 향상시키는 데 기여


🎰 변수 (variable)

  • 프로그래밍에서 데이터를 저장하고 조작하기 위해 사용되는 기본적인 요소, 단위.

  • 데이터를 저장하는 메모리 위치를 가리키며, 필요에 따라 어떤 값(데이터)을 저장하고 프로그램 실행 동안 그 값이 변경(수정) 될 수 있다.

  • 예를 들어 게임 제작 시 플레이어의 재화나 공격력, HP같은 정보를 저장하기 위해 사용.


🎞 변수의 주요 특징

  • 식별자 (Identifier) : 각 변수는 고유한 이름(식별자)을 가지며, 이를 통해 프로그램 내에서 해당 변수에 접근하고 조작할 수 있음.
  • 데이터 타입 (Data Type) : 다양한 데이터 타입을 가질 수 있으며, 이는 변수가 저장할 수 있는 데이터의 종류와 범위를 결정. (예를 들어, 정수, 실수, 문자열 등이 있다.)
  • 값 (Value) : 변수는 특정 값을 저장하며, 프로그램 실행 중에 이 값을 변경할 수 있다.
  • 스코프 (Scope): 변수는 특정 범위(스코프) 내에서만 존재하며, 이 범위를 벗어나면 그 변수는 더 이상 사용할 수 없게 된다.

  • 생명주기 (Lifecycle): 변수는 선언되어 생성되고, 프로그램의 실행 과정에서 사용되며, 스코프를 벗어나거나 프로그램이 종료될 때 소멸


❓️ 변수는 왜 쓸까?

  • 재사용성 : 변수를 사용하면 한 번 저장된 데이터를 프로그램의 다른 부분에서 재사용할 수 있습니다. 이는 코드의 중복을 줄이고, 효율성을 높입니다.

  • 가독성 및 유지보수 :_ 변수에 적절한 이름을 사용하면 코드의 가독성이 높아지고, 나중에 코드를 수정하거나 확장할 때 유지보수가 용이해집니다.

  • 동적 데이터 처리: 프로그램 실행 중에 데이터가 변경될 수 있으며, 변수를 사용하면 이러한 동적인 데이터 처리가 가능합니다. 예를 들어, 사용자 입력이나 계산 결과 등을 저장하고 처리할 수 있습니다.


🧨 변수 선언과 초기화 방법

선언(Declaration) ?

  • 변수나 함수, 클래스 등의 식별자와 관련된 속성들을 프로그램에 알려주는 과정 .

  • 선언을 통해 프로그램은 해당 식별자가 존재함을 인식하고, 그것이 무엇인지, 어떻게 사용될 수 있는지를 알게 된다.

  • 타입 지정: 대부분의 경우, 선언은 식별자에 타입을 지정합니다. 이는 해당 식별자가 어떤 종류의 값(예: 정수, 실수, 문자열 등)을 저장하거나 어떤 종류의 작업을 수행할 수 있는지를 정의한다.

  • 메모리 할당: 변수를 선언하면, 그 변수에 대한 메모리 공간이 할당됩니다. 이 공간은 변수에 값을 저장하는 데 사용

  • 스코프 정의: 선언은 해당 식별자의 스코프(유효 범위)도 정의한다. 스코프 내에서는 식별자가 인식되고 사용될 수 있으며, 스코프를 벗어나면 더 이상 접근할 수 없다.

  • 초기화와의 구분: 선언은 식별자를 도입하는 것이고, 초기화는 그 식별자에 처음으로 값을 할당하는 것이다. 변수는 선언된 후에 초기화될 수 있다.

<C#에서 변수를 선언하는 방법>


1. 변수 선언
(사실 정의도 동시에 되고 있다.)

자료형 변수이름;)
int num; // 'num'이라는 이름의 정수형 변수 선언




2. 변수 초기화

변수를 선언한 후에는 변수를 초기화하여 값을 저장해야 합니다.

변수이름 =;)
int num;     // 변수 선언
num = 10;    // 변수 초기화2) 동시에 초기화
int num = 10;   // 변수 선언과 초기화를 한 번에 수행3)
int num1, num2, num3 = 10;    (X) 틀린 거
// 이 식은 num3에만 10이 할당이 되어서 num1과 num2는 초기화가 되지 않는다.

num1 = num2 = num3 = 10;      옳은 방식
// 10을 모든 변수에 올바르게 할당.

🏸 선언, 정의, 초기화 요약

  • 선언(Declaration): 프로그램에 변수나 함수 등의 식별자의 존재와 타입을 알리는 과정.

  • 정의(Definition): 선언된 식별자에 대해 실제 메모리를 할당하고 필요한 경우 구현하는 과정.

  • 초기화(Initialization): 선언된 변수에 처음으로 값을 할당하는 과정.

특징선언(Declaration)정의(Definition)초기화(Initialization)
목적식별자와 타입 알림메모리 할당 및 구현최초 값 할당
동작타입 및 이름 지정메모리 공간 생성값 설정
예시extern int num;int num;num = 10;
반복성여러 번 가능한 번만 가능필요에 따라 여러 번
스코프식별자 유효 범위 정의구체적인 메모리 위치 할당값의 범위와 상태 설정
사용 예헤더 파일 내 함수 선언소스 파일 내 함수 정의변수 선언 후 값 할당

Tip)
extern 키워드는 다른 소스 파일에서 정의된 전역 변수를 참조하기 위해 현재 파일에서 그 변수를 선언할 때 사용


📑 변수명

<팀스파르타 강의 자료 中>

  • 1) 키워드 (Keywords)
    • C#에서는 이미 예약된 단어들이 있기 때문에 변수, 메소드, 클래스 등의 이름으로 사용할 수 없다.
    • 이러한 단어를 키워드(Keywords)라고 한다
    • 다음과 같은 키워드들이 있습니다.

  • 2) 식별자 (Identifiers) 식별자란 변수, 메서드, 클래스, 인터페이스 등에 사용되는 이름을 말합니다. 이 이름은 키워드와 동일하게 사용할 수 없다.
    • 첫 문자는 알파벳, 언더스코어(_)가 올 수 있습니다.
    • 두번째 문자부터는 알파벳, 언더스코어, 숫자가 올 수 있습니다.
    • 대소문자를 구분합니다.
    • 키워드와 같은 이름으로 사용할 수 없습니다.
// 좋은 예시
int playerScore;
string playerName;
float itemPrice;

// 나쁜 예시 (중요 의미 있는 변수명 짓기)
int x1;  // 변수명이 의미를 알기 어려움
string a; // 변수명이 명확하지 않음

// 오류 예시
int 1stNumber;  // 변수명은 숫자로 시작할 수 없음
string my-name; // 변수명에 하이픈(-)을 사용할 수 없음
float total$;   // 변수명에 특수문자($)를 사용할 수 없음

- 3) 코드 컨벤션(Code convention)

코드 컨벤션(Code convention)은 개발자들 사이에서 약속된 코드 작성 규칙으로, 코드의 가독성을 높이고 유지 보수를 쉽게 하기 위해 사용됩니다. 코드 컨벤션은 프로그래밍 언어마다 다를 수 있으며, 다음의 규칙을 따릅니다.

  1. 식별자 표기법
    • PascalCase: 클래스, 메서드, 프로퍼티 이름 등에 사용됩니다. 단어의 첫 글자는 대문자로 시작하며, 이후 단어의 첫 글자도 대문자로 표기합니다. 예를 들어, ClassName, MethodName, PropertyName과 같은 형태입니다.
    • camelCase: 변수, 매개변수, 로컬 변수 이름 등에 사용됩니다. 단어의 첫 글자는 소문자로 시작하며, 이후 단어의 첫 글자는 대문자로 표기합니다. 예를 들어, variableName, parameterName, localVariableName과 같은 형태입니다.
    • 대문자 약어: 예외적으로 전체 글자가 모두 대문자인 식별자도 있습니다. 대표적으로 ID, HTTP, FTP 등이 있습니다.
  1. 들여쓰기
    • 탭(tab) 또는 스페이스(space) 4칸을 사용하여 코드 블록을 들여씁니다.
  2. 중괄호 위치
    • 중괄호({})는 항상 새로운 줄에서 시작합니다.
  3. 빈 줄 사용
    • 관련 없는 코드 사이에는 빈 줄을 사용하여 구분합니다.
    • 메서드, 클래스 등의 블록 사이에는 두 줄을 띄어씁니다.
  4. 주석
    • // 한 줄 주석을 사용합니다.
    • /* / 여러 줄 주석을 사용할 때는 / 를 다음 줄에서 시작하고, */ 를 새로운 줄에서 끝내도록 합니다.
class MyClass
{
    // 필드는 camelCase 표기법을 사용합니다.
    private int myField;

    // 프로퍼티는 PascalCase 표기법을 사용합니다.
    public int MyProperty { get; set; }

    // 메서드는 PascalCase 표기법을 사용합니다.
    public void MyMethod()
    {
        if (true)
        {
            // 중괄호는 새로운 줄에서 시작합니다.
        }

        // 코드 블록은 탭(tab) 또는 스페이스(space) 4칸으로 들여씁니다.

        // 관련 없는 코드 사이에는 빈 줄을 사용하여 구분합니다.
				// 블록 사이에는 두 줄을 띄어씁니다.
				
		    /*
		    여러 줄 주석을 사용할 때는
		     / * 를 새로운 줄에서 시작하고,
		     * / 를 새로운 줄에서 끝내도록 합니다.
		    */
		
		    // 한 줄 주석은 이렇게 사용합니다.
		    int a = 10; // 코드 끝에도 한 줄 주석을 사용할 수 있습니다.
		}
}

식별자 작명 개념코드 컨벤션을 지키면 코드의 가독성이 좋아지고 유지보수가 용이해지기에 C# 개발을 할 때는 코드 컨벤션을 준수하는 것이 좋다는 뜻.

profile
개발 모코코

0개의 댓글