담비의 개발블로그

[C#]C#기초이론 본문

언어&프레임워크/C#

[C#]C#기초이론

담비12 2026. 4. 8. 20:40

이직성공 후 교육을 받고 있는 중입니다.

교육받고 있는 내용들을 토대로 정리한 내용입니다.

 

그냥 내가 보려고 메모장처럼 적어두는 것!

 

◆ JS와 C#의 차이점
JS는 인터프리터 언어이며 C#은 컴파일러 언어이다.

인터프리터 : 프로그램을 한 줄씩 읽으며 즉시 실행한다.
컴파일러 : 소스 코드를 기계어로 번역하는 컴파일 과정을 거친 후 소스 코드 전체를 한번에 분석하고 최적화를 수행한 후 실행 파일을 생성한다.

인터프리터와 컴파일러의 차이점
실행속도 : 느림 vs 빠름
보안 : 취약 vs 안전

 

종류 인터프리터 컴파일러
실행속도 느림 빠름
보안 취약 안전




◆ 변수 : 값을 담아 놓을 수 있는 역할


◆ 자료형 
> C#의 모든 자료형은 최상위 객체인 System.Object에서 파생된다.
> 값타입과 참조타입으로 나뉜다.


1) 값타입
> 실제 데이터 값을 스택 영역에 직접 저장한다.
① 정수형 : 데이터 크기에 따라 선택한다. (shor, int, long)
② 실수형 : 소수점이 포함된 데이터를 다룬다. (float, double, decimal)
③ 기타 : bool - true 또는 false만 저장/char - 유니코드 문자1개/enum - 열거형/struct - 사용자의 정의 구조체

2) 참조타입
① object : 모든 타입의 조상으로 어떤 타입의 데이터도 담을 수 있다.
② string : 문자열을 다룬다.
③ class : 객체지향 프로그래밍의 기본 단위이다. 무언가를 실행하기 위한 틀로 생각하면 편하다.
④ interface : 클래스가 구현해야 할 기능을 정의한다.
⑤ delegate : 함수를 참조하는 타입이다.
⑥ array : 동일한 타입의 데이터를 연속적으로 저장하는 집합이다.

3) 특수타입
① var타입 : 컴파일러가 대입되는 값을 보고 타입을 자동으로 결정한다.
② Nullable타입 : 기본적으로 값 타입은 null을 가질 수 없지만 데이터베이스 연산 등에서 데이터가 비어있음을 표현하기 위해 사용한다.
③ dynamic : 컴파일 시점이 아닌 런타임에 타입을 결정한다. 파이썬 같은 동적 언어와 통신하거나 리플렉션을 쓸 때 주로 사용하지만, 성능 저하와 런타임 에러 위험이 있어 주의가 필요하다.

◆ 형변환
> 각 자료형은 서로 변환이 가능할 수도 있고, 그렇지 않을 수도 있다.

// string > int 로 변환
string a = "123";
int b = int.Parse(a);

 

// int > string 로 변환
int c = 123;
string d = c.ToString();



◆ 연산자
1) 산술 연산자 
> 숫자 데이터를 계산할 때 사용하며, 가장 기본이 되는 연산자이다.
+ 더하기 
- 빼기
* 곱하기
/ 나누기
% 나머지

2) 증감연산자
> 변수의 값을 1씩 증가시키거나 감소시킬 때 사용한다. 위치의 따라 실행 순서가 달라진다.(아래 i는 임의의 값이다.)
++i : 값을 1 증가시킨 후에 문장을 실행한다.
i++ : 문장을 실행한 후에 값을 1증가시킨다.
--i,i-- : 1감소

3) 비교 연산자
> 두 값을 비교하여 결과로 bool값(true 또는 false)을 반환한다.
== : 같다
!= : 다르다
> / < : 크다 / 작다
>= / <= : 크거나 같다 / 작거나 같다

4) 논리 연산자
>여러개의 조건을 조합할 때 사용한다.
&& : 두 조건이 모두 참일 때만 true(AND)
|| : 두 조건 중 하나만 참이어도 true(OR)
! : true를 false로, false를 true로 반전(NOT)

5) 대입연산자
> 변수에 값을 할당할 때 사용하며, 산술 연산과 결합된 복합 대입 연산자도 자주 쓰인다.
= : 값을 대입(오른쪽 값을 왼쪽에 넣음)
+=, -=, *=, /=, %= : 계산 후 바로 대입

6) 비트 연산자
데이터를 비트(0,1) 단위로 조작할 때 사용한다. 하드웨어 제어나 최적화 작업에서 주로 쓰인다.
&(AND), |(OR), ^(XOR), ~(NOT)
<<, >>(Shift) : 비트를 왼쪽이나 오른쪽으로 이동시킨다.

7) C#전용 및 특수 연산자
> C#에는 코드를 간결하게 만들어주는 유용한 특수 연산자들이 많다.
▷ 삼항연산자 : 조건? 참일_때_값 : 거짓일_때_값

int score = 85;
string result = (score >= 60) ? "Pass" : "Fail";



▷ Null 관련 연산자
?? : 왼쪽 값이 null이면 오른쪽 값을 반환한다.

string name = inputName ?? "Guest";



?. : 객체가 null이 아닐 때만 멤버에 접근한다. null이면 에러 대신 null을 반환한다.

int? length = list?.Count;



◆ 조건문(if, switch)
if문

if(조건식)
{
구문
}




◆ 필드(Field)
> 클래스 내부에서 데이터를 저장하는 진짜 변수
> 외부에서 이 변수에 직접 접근해서 값을 바꾸거나 가져올 수 있다.
> 데이터를 담는 그릇


◆ 프로퍼티(Property = 속성)
> 내부적으로는 데이터를 저장하지만, 외부에서는 메서드를 통해 접근하도록 감싸진 형태
> 자동 구현 프로퍼티라고 해서 C#이 내부적으로 숨겨진 필드를 자동으로 만들어준다.
① 데이터검증(유효성검사) : 필드는 아무 값이나 넣는 것을 막을 수 없지만 프로퍼티는 제어가 가능하다.

private int _price;
public int price 
{
    get { return _price; }
    set 
    {
        if (value < 0) // 0보다 작으면 0으로 고정
            _price = 0;
        else
            _price = value;
    }
}


② 읽기 전용 / 쓰기 전용 설정 : 필드는 public으로 열어두면 누구나 수정할 수 있지만, 프로퍼티는 수정만 막거나 읽기만 막을 수 있다.

// 외부에서는 읽기만 가능하고, 클래스 내부에서만 수정 가능하게 설정
public string Writer { get; private set; }


③ 데이터 바인딩 (UI 연동) : 나중에 WPF나 WinForms 같은 GUI 프로그램을 만들 때, 화면에 데이터를 뿌려주는 '데이터 바인딩' 기능은 필드가 아닌 프로퍼티에서만 작동하는 경우가 많다.