자바스크립트와 C언어 비교

자바스크립트와 C의 문법 및 특징에 대한 상세 비교를 해보겠습니다.

1. 출력

C:

printf("Hi Daehyun lee");

JavaScript:

console.log("Hi Daehyun lee");

2. 접합 연산자

C에는 없는 문자열 접합 연산자 +를 JavaScript는 지원합니다. 두 문자열을 합치는 기능을 합니다.

JavaScript:

var str1 = "Hello";
var str2 = "World!";
var str3 = null;

str3 = str3 + str2;
console.log(str3); 
// 출력: Hello World!

3. 자료형

자바스크립트는 변수를 선언할 때 별도로 자료형을 명시하지 않으며, var라는 키워드를 사용하여 변수나 객체를 선언합니다. 예를 들어, var에 문자를 할당하면 문자열 형태로, 정수를 할당하면 정수형으로 간주됩니다. 이러한 특징으로 인해 자바스크립트는 느슨한 타입(loosely typed) 언어 또는 동적(dynamic) 언어로 분류됩니다.

C 언어는 자료형을 명시적으로 지정해야 하지만, JavaScript에서는 변수의 자료형이 동적으로 결정됩니다.

3.1. 기본 자료형 (Primitive values)

C 언어와는 다르게, 자바스크립트의 기본 자료형 값들은 한 번 선언되면 수정할 수 없는 불변값(immutable value)입니다.

1) Number

C언어와 달리, JavaScript에서는 10진수, 8진수, 16진수, 소수점을 가진 실수, 지수 표기법을 사용할 수 있습니다.

var number = 1;
var float = 5.6;

Number 타입에는 +Infinity, -Infinity, 그리고 NaN(숫자가 아님)이라는 세 가지 상징적인 값도 있습니다.

2) String

JavaScript에서 문자열을 작성할 때는 큰따옴표(“”)나 작은따옴표(”) 모두 사용할 수 있습니다. 또한 문자열의 각 글자는 0부터 시작하는 인덱스를 통해 참조할 수 있습니다. 그러나 문자열 자체를 수정할 수는 없으며, 다른 문자열을 만들어야 합니다.

3) Boolean

Boolean은 true와 false 두 가지 값을 가질 수 있으며, 논리적인 요소를 나타냅니다.

4) Null

NULL 타입은 null 값 하나만 가집니다. 어떤 값이 의도적으로 비어있음을 표현하며, boolean 연산에서는 거짓으로 취급됩니다.

5) Undefined

값을 할당하지 않은 변수는 undefined 값을 가집니다.

또한 ECMAScript 6에서는 Symbol 타입도 추가되었습니다.

6) 기타 연산자와 기능

JavaScript와 C는 몇 가지 비슷한 연산자와 기능을 공유하고 있습니다. 예를 들어, 산술 연산자, 할당 연산자, 비교 연산자, 논리 연산자, 조건 연산자 등은 두 언어에서 유사하게 작동합니다. 자바스크립트와 C의 문법과 특징을 비교함으로써 코드 이해와 언어 간 전환이 수월해질 것입니다.

물론, 자바스크립트와 C 언어의 문법 및 특징을 더 자세히 비교하여 설명해보겠습니다.

3.2. 객체 자료형 (Objects)

JavaScript의 객체는 키와 값의 매핑으로 이루어져 있습니다. 키는 문자열이며 값은 어떤 값이든 될 수 있습니다.

JavaScript에서 객체는 중괄호 {}new Object() 생성자를 사용하여 만들 수 있으며, 콤마 ,를 사용하여 여러 개의 키-값 쌍을 저장할 수 있습니다.

var me = {'name':'daelee', 'age':24};
console.log(me.age);
// 출력: 24

3.3. Reference(참조)와 객체

JavaScript에서 객체 자료형과 기본형 자료형의 가장 큰 차이점 중 하나는 참조(Reference)입니다. 기본형 변수는 값이 복사되어 전달되지만, 객체는 메모리 주소가 복사되며 값 자체는 복사되지 않아 같은 객체를 참조하게 됩니다. 이것은 함수를 호출할 때 매우 중요한 역할을 합니다.

예를 들어, 함수를 호출할 때 new를 사용하면 새로운 객체를 만든 후에 이를 반환합니다.

4. for-in 문

JavaScript와 C 언어 모두 반복문으로 for문, while문, do-while문을 지원합니다. 또한 JavaScript에는 for-in 문이라는 반복문 형태가 있으며, 배열의 원소나 객체를 탐색하는 데 유용합니다.

var a = ['a', 'b', 'c', 'x', 'y', 'z'];
var result = '';

for (var i in a) {
    result += 'index:'+ i + ', value:'+ a[i] + '\n'; 
}

console.log(result);
// 출력:
// index:0, value:a
// index:1, value:b
// index:2, value:c
// index:3, value:x
// index:4, value:y
// index:5, value:z

5. 함수

JavaScript에서 함수는 function 키워드를 사용하여 선언합니다. JavaScript에서 함수는 객체 자료형으로 취급되며, 변수에 함수를 할당할 수 있습니다. 또한 함수는 객체를 생성하는 창조자 역할도 합니다.

함수의 반환값에 대한 자료형을 명시할 필요가 없습니다.

function sum(a, b) {
    var c = a + b;
    return c;
}

var add = sum;
console.log(add(1, 2));
console.log(typeof add);
// 출력:
// 3
// "function"

5.1. 익명 함수(Anonymous Function)

익명 함수는 한 번만 사용하고 버릴 함수로, 이름을 갖지 않는 함수입니다. JavaScript에서 익명 함수는 변수에 할당하여 사용합니다.

var sum = function(a, b){
    var add = a + b;
    return add;
}

console.log(sum(1, 2)); // 출력: 3

5.2. 콜백 함수(Callback Function)

콜백 함수는 특정 이벤트가 발생하면 호출되는 함수로, 이벤트 핸들링에 주로 사용됩니다. 콜백 함수는 함수의 인자로 다른 함수를 전달하여 사용합니다.

예를 들어, 콜백 함수를 사용하여 함수를 호출하는 방법은 다음과 같습니다.

function one() { 
    return 1;
}

function invoke_and_add(a, b) {
  return a() + b();
}

console.log(invoke_and_add(one, function() { 
  return 2; 
}));
// 출력: 3

자바스크립트와 C 언어의 문법 및 특징에 대한 상세한 비교를 통해 코드 이해와 언어 간 전환이 더 수월해질 것입니다.

유효 범위(Scope)와 콘솔에서의 값 입력(argv)에 대한 내용을 더 자세히 설명하겠습니다.

6. 유효 범위(Scope)

C 언어와 JavaScript의 변수의 유효 범위(Scope)에는 중요한 차이가 있습니다.

6.1 C 언어에서의 Scope: Block-level Scope (블록 레벨 스코프)

C 언어에서 변수의 유효 범위는 주로 중괄호 {}로 둘러싸인 코드 블록 내부에 제한됩니다. 이것을 “블록 레벨 스코프”라고 합니다. 즉, 변수가 선언된 중괄호 내에서만 유효하며, 중괄호를 벗어나면 변수에 접근할 수 없습니다.

예:

{
    int x = 10;
    // x는 이 블록 내에서만 유효
}
// 여기서 x에 접근할 수 없음

6.2 JavaScript에서의 Scope: Function-level Scope (함수 레벨 스코프)

JavaScript에서 변수의 유효 범위는 함수 내에서 제한됩니다. 이것을 “함수 레벨 스코프”라고 합니다. 함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없습니다.

ES6 (ECMAScript 2015)부터는 constlet 키워드를 사용하여 블록 레벨 스코프도 지원합니다.

예:

function example() {
    var y = 20;
    // y는 이 함수 내에서만 유효
}
// 여기서 y에 접근할 수 없음

6.3 블록 레벨 스코프 (ES6 이후)

ES6에서는 constlet을 사용하여 변수를 선언하면 해당 변수의 유효 범위가 블록 레벨 스코프로 제한됩니다. 이것은 중괄호 {}로 둘러싸인 코드 블록 내에서 변수가 유효하게 만들어 줍니다.

예:

{
    let z = 30;
    // z는 이 블록 내에서만 유효
}
// 여기서 z에 접근할 수 없음

7. 콘솔에서 값 입력(argv)

JavaScript에서 콘솔에서 값 입력을 처리하려면 process.argv를 사용할 수 있습니다. 이 배열은 콘솔에서 실행한 스크립트에 전달된 인자들을 저장합니다.

예:

var args = process.argv;

console.log(args);
console.log(args[2]);

콘솔에서 스크립트를 실행할 때 입력된 값들은 process.argv 배열의 형태로 저장됩니다. process.argv[0]에는 Node.js 실행 파일의 경로, process.argv[1]에는 실행한 JavaScript 파일의 경로가 저장되며, 입력된 값들은 process.argv[2]부터 저장됩니다.

C 언어의 argcargv와 유사한 역할을 합니다.

이렇게 JavaScript에서도 콘솔에서 값을 입력받을 수 있으며, process.argv를 통해 이 값을 사용할 수 있습니다.