ice rabbit programming

[JS] JS의 간략한 소개와 데이터 타입(1) 본문

Development/JavaScript

[JS] JS의 간략한 소개와 데이터 타입(1)

판교토끼 2020. 5. 4. 01:42

JavaScript는 원래 브라우저 등에 이용되는 스크립트 언어였으나, 요즘에는 IoT, 서버(Node.js) 등 광범위하게 쓰이고 있고, 사용 언어 순위에도 꾸준히 등장하고 있다. 요즘 개발자라면 웹은 거의 필수적으로 다루고, 관련 없는 개발을 하더라도 발은 한 번씩 담가보기 때문에 자바스크립트를 다들 조금씩은 해보게 된다. (자바와는 다르다)

필자는 학부 시절(이라 해봐야 2년 전) vue.js와 node.js를 이용한 웹 페이지를 제작할 때 좀 다루어 보았다. 다만 그 때는 여느 학생이 그렇듯이, 구현을 하는 것에 큰 목적을 두었어서 틈틈이 언어에 대해서 알아보기는 했으나 차근차근 공부하지는 못했었다. 그러다 이번 기회에 JavaScript 강의를 접하게 되어, 필자가 듣고 정리하며 이 글을 보는 여러분들에게 공유해보려 한다.

가장 큰 특징은 비동기라는 점이다. 원래 웹 브라우저와 같은 곳에서 사용했기 때문에, 동기로 동작하게 되면 수행하는 동안 웹 페이지가 멈추는 불상사가 발생한다. 그래서 태생적으로 비동기라는 특징을 가지게 되는데, 이러한 점이 처음에 언어를 배울 때 나름 장벽으로 작용하는 것 같다. 아마 아예 프로그래밍을 모르면 몰라도, 다른 언어들을 배우고 들어와서 생기는 장벽인 것 같다.

그러면, 시작해보자 JS


자바 스크립트는 주로 배우는 C/C++/Java 등과 다르게 변수를 생성할 때 타입을 명시하지 않는다.

var str = "Hello World!"; // string이 str에 담긴다.
var str2; // 아직 type이 정해지지 않은 변수
str2 = "Got JS"; // 이제 type이 string이 된다.

이런 식으로 모든 변수에는 var라는 키워드를 사용한다. 키워드는 사용하지 않지만 타입을 명시하지 않는 Python과 비슷하게 사용된다. 단 이 때 var는 C#의 var와는 다르다. C#의 var는 프로그래머가 명시하지 않아도 RValue의 값으로 변수를 쓰는 것이고 자바 스크립트의 var는 변수를 생성하는 것이다. 그래서 C#에서는 var str2;와 같은 구문은 성립하지 않는다. 자세한 내용은 C# 데이터 타입 참조.

각설하고, 그렇다고 데이터 타입이 없는 것은 아니다.
String, Number, Function, Array, Object, Boolean, null, undefined의 데이터 타입이 있다. Function과 undefined가 좀 특이한 개념이라고 볼 수 있다. 계속해서 타입을 다뤄 가면서 소개하도록 하겠다.

첫 번째로는 String 타입을 보자. String 타입은 큰 따옴표와 작은 따옴표를 사용할 수 있는데, Python과 같은 방식이다. 무슨 말이냐면, 큰 따옴표 내에 작은 따옴표가 들어가면 문자로 인식한다는 뜻이다.

var str3 = "she's girl"; // 큰 따옴표 안의 작은 따옴표는 가능
var str4 = 'she\'s girl'; // \n과 같은 용법

두 번째로는 Number 타입이다. Number 타입은 넣는 값에 따라 자동적으로 정수형과 실수형으로 정해 진다. 다만 사칙연산을 할 경우에는 손실이 없는 방향(정수->실수)으로 자동으로 연산이 이루어진다. 캐스팅이 필요한 C#이나 Java보다 좀 더 자유롭다고 볼 수 있다.

var n1 = 10;
var n2 = 10.5;

console.log(n1+n2); // 가능

세 번째는 Functionn 타입이다. type에 웬 Function? 이라고 생각할 수도 있겠는데, 함수를 변수에 담을 수 있는 것이다. C#의 Delegate 개념과 유사하다.

function sum(num1, num2) {
  return num + num2;
}

var result = sum(10, 20);

function multiple(num3, num4) {
  return num3*num4;
}

console.log(multiple(10,20));

함수 생성은 위의 두 가지 방법이 있다. 그래서 위에서 생성한 func1, func2을 인자로 넘겨줄 수도 있다! 익명 함수라는 개념도 있는데, 이는 콜백에서 자주 사용되는데, 이는 비동기와 관련된 이슈이니 추후에 다시 다루도록 하겠다.