C#과 JS의 var, const

Shy·2025년 3월 8일

C#

목록 보기
3/27
개념JSC#
값을 변경할 수 있는 변수var, let일반 변수(int, string 등)
블록 스코프 변수let일반 변수(int, string 등)
값을 변경할 수 없는 변수constconst
타입을 자동으로 추론var, let, constvar
null 허용 변수let num = null;int? num = null;

1. var 비교

JavaScriptC#
var는 함수 스코프var는 타입을 자동 추론
var는 재할당 가능var는 재할당 가능
var는 호이스팅됨var는 호이스팅 없음
// JS
var x = 10;  // 가능
x = 20;      // 가능
// C#
var x = 10;  // int로 추론됨
x = 20;      // 가능
  • 차이점:
    • JS의 var는 함수 스코프라서 블록({})을 무시하지만, C#의 var는 단순히 타입을 추론하는 역할이다.
    • JS에서는 var호이스팅되지만, C#에서는 그렇지 않다.
// JS는 함수 스코프를 가지므로
// 블록 스코프를 무시한다.
function test() {
    if (true) {
        var x = 10; // if 블록 안에서 선언
    }
    console.log(x); // 10 (블록을 무시하고 함수 전체에서 접근 가능!)
}

test();
// 하지만 let이나 const는 블록 스코프를 가진다.
function test() {
    if (true) {
        let y = 20; // 블록 스코프
    }
    console.log(y); // ❌ 오류 발생! (y는 if 블록 안에서만 유효)
}

test();

2. let ?

C#에는 let과 동일한 개념은 없지만, 일반적인 변수 선언(int, string 등)이 JS의 let과 비슷한 역할을 한다.

// JS
let y = 5;  // 가능
y = 10;     // 가능
int y = 5; // 가능
y = 10; // 가능

3. const

JS와 C#의 const동일한 개념

// JS
const PI = 3.14;  // 상수 선언
PI = 3.15; // ❌ 오류 (const 값 변경 불가)
// C#
const double PI = 3.14;  // 상수 선언
PI = 3.15; // ❌ 오류 (const 값 변경 불가)
  • 공통점
    • 둘 다 값을 변경할 수 없는 상수
  • 차이점
    • JS의 const는 객체를 수정할 수 있다.
    • C#의 const완전한 불변(immutable) 이고, 객체 선언이 불가능하다!

C#에는 readonly도 있다.

readonly는 런타임에 한 번만 할당할 수 있는 변수이다. (const는 컴파일 타임에 값이 고정된다.)

// JS
const obj = { name: "Alice" };
obj.name = "Bob";   // 가능 (객체 속성 변경 가능)
console.log(obj.name); // "Bob"

// 하지만 obj 자체를 다른 객체로 변경하려 하면 오류 발생
obj = { name: "Charlie" }; // ❌ 오류 (const 변수 재할당 불가)
class Person
{
    public string Name { get; set; }
}

const Person p = new Person(); // ❌ 오류! 객체는 const로 선언할 수 없음

const로 객체 선언이 불가능 하므로(컴파일 타임에 결정되는 값에만 사용이 가능하므로) readonly를 사용해야지 객체를 선언하고, 해당 객체를 변경할 수 없게 만들 수 있다.

class Person
{
    public string Name { get; set; }
}

class Example
{
    readonly Person person = new Person(); // 가능 (한번만 할당 가능)

    public Example()
    {
        person.Name = "Alice";  // ✅ 가능 (속성 변경 가능)
        // person = new Person(); // ❌ 오류! 객체 자체를 변경할 수 없음
    }
}
profile
신입사원...

0개의 댓글