[C#] 특징 및 변수와 자료형

장민제·2025년 4월 14일

C# Study

목록 보기
1/11
post-thumbnail

✅ C#의 특징

  1. Microsoft사가 개발한 객체 지향 프로그래밍 언어.
  2. 강력한 형식 시스템과 가비지 컬렉션 기능 제공
  • 강력한 형식 시스템: 변수, 매개변수 및 반환 값의 타입이 컴파일 시간에 결정
    -> 프로그램의 안정성과 신뢰성 향상
  • 가비지 컬렉션: 동적 할당된 메모리를 자동으로 회수해주는 기능
    -> 개발자가 직접 메모리를 할당하고 해제하지않아도 됨
  1. 다양한 플랫폼(웹, 데스크탑, 모바일 게임 등)에서의 개발을 지원.
  2. C, C++, Java 등 다른 언어들과 문법 및 구조적으로 유사

📝 C#의 자료형 (주로 사용하는 자료형 Bold)

자료형.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⁻⁴⁵ ~ ±3.4 × 10³⁸
doubleSystem.Double8±5.0 × 10⁻³²⁴ ~ ±1.7 × 10³⁰⁸
decimalSystem.Decimal16±1.0 × 10⁻²⁸ ~ ±7.9 × 10²⁸
charSystem.Char2유니코드 문자
stringSystem.String가변유니코드 문자열
boolSystem.Boolean1true 또는 false

자료형의 크기, 표현 범위, 부호 여부에 따라 세분화된 자료형으로 구분된다.

왜 변수를 세분화하여 표현하는가?

  1. 메모리의 효율적인 사용
    -> 필요한 자료의 크기만큼의 메모리만 할당하여 메모리를 좀 더 효율적으로 사용 할 수 있다.
  2. 정확한 데이터 표현
    -> 값의 범위와 형태에 맞는 자료형을 사용하여 데이터를 정확하게 표현 할 수 있다.
  3. 타입 안정성
    -> 컴파일 단계에서 잘못된 타입 사용을 방지하여 오류를 줄이고 안정적인 코드를 만 들 수 있다.

❓ 리터럴(literal)

  1. 리터럴의 개념과 역할
    -> 프로그램에서 직접 사용되는 상수 값으로, 소스 코드에 직접 기록되어 있는 값
    Ex) int x = 15; 에서의 15는 리터럴
    -> C#에서 리터럴은 컴파일러에 의해 고정된 상수 값으로 처리되며, 변수나 상수에 할당되거나 연산에 사용된다.
    Ex) int y = 3 + 4; 에서 3, 4 는 리터럴이며 연산에 사용됨

  2. 리터럴의 종류와 예시

📌 C# 리터럴의 종류와 예시

리터럴 종류설명예시
정수형 리터럴정수 값을 나타냄10, -5, 0, 0b1010, 0xFF
실수형 리터럴실수 값을 나타냄3.14, -0.01, 2.5f, 1.2e3
문자 리터럴단일 문자 (작은 따옴표로 감쌈)'A', '1', '\n', '\u0041'
문자열 리터럴문자열 (큰 따옴표로 감쌈)"Hello", "123", "Line\nBreak"
불리언 리터럴논리 값 (true/false)true, false
null 리터럴참조형 변수에 아무 값도 없음을 표현null
개체 리터럴객체를 직접 초기화하는 리터럴 형태new Point { X = 1, Y = 2 }
배열 리터럴배열을 직접 초기화하는 형태new int[] { 1, 2, 3 }
int num = 12;
float f = 3.14f;
char c = 'J';
string str = "String literal";

📁 변수(Variable)

  • 데이터를 저장하고 나중에 참조할 수 있게 하기 위해 메모리의 특정 공간을 할당받음
  • 필요에 따라 데이터를 저장하거나 수정할 수 있음
    -> 프로그램 실행 중 값이 변할 수 있음
    Ex) 게임에서는 플레이어의 '체력, 마나, 돈' 과 같은 정보를 저장하기 위해 사용

    변수 선언 시 자료형에 따라 저장 가능한 데이터의 종류와 크기가 결정
    변수명은 해당 데이터의 의미를 표현하는 것이 좋음.
    Ex) 플레이어의 체력 = playerHp

>>> 변수 선언
자료형 변수이름;	
int playerHp;	// 변수 하나만 선언
int playerMp, playerLevel, playerExp;	// 한번에 여러 변수 선언

>>> 변수 초기화
변수명 =;
playerHp = 100;
int playerGold = 0;	// 변수 선언과 초기화 한 번에 수행
playerMp = playerLevel = playerExp = 0;	// 한번에 여러개의 변수 초기화 가능
float f1, f2, f3 = 20f;	// 잘못된 방식

⚠️ 변수명 규칙

  1. 키워드 (Keywords)
    -> C#에서 특별한 의미를 가지며, 미리 정의되어 있는 단어들은 변수나 메서드의 이름 등으로 사용할 수 없다.
    Ex) int, float, class, if, else, return, void, public, private, static 등

  2. 식별자 (Identifiers)
    -> 개발자가 직접 정의하는 이름들

  • 문자 또는 _(언더 바)로 시작해야한다.
  • 숫자로 시작할 수 없다.
  • 공백 및 특수문자 사용 불가능
  • 키워드는 식별자로 사용 불가
  1. 코드 컨벤션(Code Conventions)
    -> 가독성 높고 일관된 코드를 작성하기 위한 약속된 스타일
  • PascalCase: 첫 글자는 대문자로 시작, 이후 단어의 첫 글자도 대문자.
    -> 보통 클래스, 메서드, 프로퍼티 이름 등에 사용

  • camelCase: 첫 글자는 소문자로 시작, 이후 단어의 첫 글자는 대문자.
    -> 보통 변수, 매개변수, 로컬 변수 이름 등에 사용

일반적으로 사용되는 컨벤션

요소컨벤션 예시설명
클래스 이름PlayerControllerPascalCase 사용
메서드 이름TakeDamage()PascalCase 사용
변수 이름playerHpcamelCase 사용
상수 이름MAX_SPEED대문자 + 언더스코어 사용
인터페이스 이름ICharacter접두어 I 사용 + PascalCase
// 일반적인 컨벤션을 사용한 코드 예시
public class PlayerController
{
    private int currentHealth;
    private const int MAX_HEALTH = 100;

    public void TakeDamage(int amount)
    {
        currentHealth -= amount;
    }
}

🔁 명시적 형변환 & 암시적 형변환

  • 자료형이 다른 변수 간에 값을 할당하거나 연산을 수행하기 위해서는 명시적 형변환(Explicit Casting) 또는 암시적 형변환(Implicit Casting)이 필요하다.

명시적 형변환 (Explicit Casting)

-> 개발자가 변환할 자료형을 명시적으로 지정하는 방식, 원래 자료형과 변환할 자료형이 호환될 때 사용

>>> (자료형) 형식으로 수행
double d = 9.7;
int i = (int)d;  // 명시적 형변환

암시적 형변환 (Implicit Casting)

-> 컴파일러가 자동으로 형변환을 수행하는 방식, 손실 없이 데이터 타입 간에 변환이 가능할 때 자동으로 수행된다.

int i = 9;
double d = i;  // 암시적 형변환

❓ var 키워드

  • 컴파일러가 변수의 자료형을 자동으로 추론해주는 키워드
  • 초기화와 함께 사용해야 하며, 컴파일 시점에 초기화 값을 기준으로 변수의 타입이 결정된다.
var number = 10;         // int로 추론됨
var name = "Hello";      // string으로 추론됨
var isActive = true;     // bool로 추론됨
var list = new List<int>(); // List<int>로 추론됨

타입이 명확하지 않으면 코드를 읽기 어려워질 수 있기 때문에, 가독성이 떨어질 수 있음.
타입이 명확하게 드러나는 경우에 사용하는 것이 좋음

profile
Unity, C#

0개의 댓글