자바스크립트의 데이터 타입 개발자로서의 Berry


  이 글을 읽는 분들을 저는 자바스크립트는 잘 모르는 개발자라고 맘대로 정했기 때문에 여러분께서는 C나 C++, 자바와 같은 언어를 이미 접해보신겁니다. 이러한 언어들은 몇가지 데이터 타입을 제공합니다. 정수integer, 실수float-double, 문자character, 불린boolean...  어떤 언어는 정수를 갖고 불린을 표현하기도 하죠. 이렇게 언어상에서 처리하는 최소한의 밑바닥이되는 데이터 타입을 기본타입primitive-type 이라 부르며, 이들이 조합되어 언어상에서 제공되거나 사용자가 임의로 생성한 타입을 복합 타입composite-type 혹은 객체 타입object-type 이라고 부릅니다. 문자열string, 날짜date 등 언어에서 제공하는 타입들과 사용자 정의 타입 이에해당 되는 복합, 객체타입인 겁니다. C에서는 구조체가 있고 C++, 자바에서는 클래스가 있는거 다 아시죠? 이처럼 자바도 기본 타입과 객체 타입을 지원합니다. 뿐만 아니라 자바스크립트는 형 강도type strength가 낮은 고수준의 언어이므로 변수를 선언할 때 별다른 데이터 타입을 지정하지 않습니다. 즉 자바스크립트의 변수는 모든 데이터 타입을 담을 수 있죠! 바로 이점이 비 개발자들도 쉽게 자바스크립트를 접할 수 있는 이유 중 하나입니다.


데이터 타입의 종류


  자바스크립트의 주요 데이터 타입은 다음과 같습니다.

  • 숫자 Number
  • 문자열 String
  • 불린 Boolean
  • 함수 Function
  • 객체 Object
  • 배열 Array
  • 비어있음 null
  • 정의되지 않음 undefined






숫자 Number

  자바스크립트는 고 수준의 언어로 정수와 실수를 구별하지 않습니다. 단지 숫자라는 타입을 가질 뿐이며 이 숫자는 실수로 처리됩니다. 단, 자바스크립트의 숫자는 특수한 값들이 있습니다. 사용가능한 최대의 숫자를 넘는 값을 무한을 의미하는 Infinity, 정의되지 않은 값 (divide by zero와 같은) 을 의미하는 NaN이 있습니다.




문자열 String

 
  자바스크립트는 고 수준의 언어로(자꾸 반복하는 거 같은데?) 문자와 문자열을 구별하지 않습니다.(자꾸 반복하는 거 맞군요) 문자와 문자열을 구별하지 않는 다는 것은 'A'와 같이 한글자만으로 이루어지는 타입이 없다는 의미입니다. C언어에서는 알파벳과 같이 1바이트의 문자를 담을 수 있는 char라는 데이터 타입이 있지만 자바스크립트의 문자는 곧 문자열에 포함되어 문자와 문자열에 대한 데이터타입이 따로 취급되지 않습니다. 즉 문자는 곧 길이가 1인 문자열입니다.

  자바스크립트에문자열은 따옴표나 쌍따옴표를 통해 표현합니다. 이를테면 이런거죠.


"자바스크립트는 고수준의 언어입니다"
'
문자와 문자열을 구별하지 않습니다'



  그러나 아래의 문장은 잘못되었습니다.

"자바스크립트는 고수준의 언어입니다'

  쌍따옴표로 시작했으면 당연히 쌍따옴표로 마쳐야 합니다.



  그러므로 아래와 같은 문장은 옳은 문장입니다.

"자바스크립트는 '정말' 고수준의 언어입니다"

  위와 같은 경우 정말이라는 단어를 감싸는 따옴표는 문자로 취급됩니다.



  따옴표나 쌍따옴표 어느쪽이나 문자열을 나타내므로 HTML과 함께 사용할 때 더욱 빛을 발합니다. HTML 태그에서도 속성 값을 지정할 때 따옴표나 쌍 따옴표를 모두 이용할 수 있으며 자바스크립트를 HTML 엘리먼트에 인라인으로 삽입할 경우 서로의 문자열의 경계를 다른 따옴표로 나타냄으로서 쉽게 삽입할 수 있습니다.

<a href="#" onclick="alert('경고창이 떴습니다')">경고창</a>



 뿐만아니라 문자열은 객체 타입이므로 다양한 메서드를 지원합니다. 이에 관한 부분은 나중에 설명하도록 하겠습니다.




불린 Boolean

  불린 (혹은 불리언이라 불리는) 타입은 별다른 새로운 점이 없습니다. true와 false만를 나타내는 메모리가 아까운 녀석이죠. 덕분에 C에서는 메모리를 과다 사용하는 불린을 따로 만들지 않고 정수에 위임했습니다.  아무튼 자바스크립트의 불린은 true와 false 값을 가지는 여타 언어와 다를 바 없는 데이터 타입입니다. 굳이 특성을 말하자면 불린 타입을 프린트 할 경우 문자열로 전환된다던지, C언어와 비슷하게 0을 false로 그외의 숫자를 true로 취급할 수도 있다는 정도입니다.





함수 function

  드디어 재미있는 게 나왔습니다! 거기 계신 똑똑이 분들은 대체 함수가 데이터 타입이라니 제정신이야? 라고 말하고 계실겁니다. 좀 더 스마트 하신 분들은 C언어의 함수 포인터와 비슷한 것인가? 라고 생각하실지도 모르죠. 자바스크립트는 고수준의 언어이므로(이젠 세뇌 당하실 듯 싶군요) 함수 또한 데이터처럼 취급할 수 있습니다. 사실 함수라는 것은 정해진 문장statement의 연속sequence으로 C나 C++(여기서는 멤버함수), Java(여기서는 field)에서는 한 번 정의하고 재 사용되는 코드 덩어리 입니다. 하지만 자바스크립트는 이 덩어리 함수를 데이터 타입처럼 취급하여 놀라운 행위를 할 수 있습니다.


(1)
function sum(x, y) { return x + y; }

위 문장은 평범한 덧셈을 하는 함수입니다.


(2)
var sum = function(x, y) { return x + y; }

  이것은 뭔가 이상한데요? 여타 언어에서 우리가 알던 익숙한 표현은 아닌 것 같군요. 자세히 보니 sum 이라는 변수에 무명함수anonymous function를 할당하는 듯 합니다. 자바스크립트는 이와같이 함수를 리터럴로서 변수에 할당할 수 있습니다. 이렇게 할당된 함수는 앞서 정의된 함수(1)과 똑같이 사용이 가능합니다.



  이러한 표현을 처음 보는 분들은 대체 이 요상망측한 것이 어디 쓰이는지 궁금하실 겁니다. 그러나 자바스크립트에서 이를 이용한 구조는 상당히 흔한데 주기적 호출이 필요할 경우 사용되는 setTimeout, setInterval 함수의 경우에도 함수 데이터를 파라미터로 넘기게 됩니다. 함수가 데이터타입이니까 리턴을 할 수도 있겠네요! 쿨한 AJAX의 request 변수에도 이렇게 데이터화 된 함수를 사용하게 되죠. 이러한 데이터 타입 함수의 심도있는 용도는 천천히 알아보도록 하겠습니다.




객체 object

  엄밀히 말해 현재의 자바스크립트(버전 1.5)는 올바른 객체지향을 지원하지 않습니다. 하지만 객체는 존재합니다. 만들수도 있죠. 대체 객체지향을 지원하지 않는다면서 객체가 존재한다니 무슨소리냐고 할 분도 계실겁니다. 그런데 어쩌나요. 자바스크립트는 객체지향 언어라고 하기엔 무리가 있지만 객체는 있습니다. 객체의 정의가 상태(state)와 행위(behavior)를 가지는 하나의 데이터 타입이라고 할 때 자바스크립트는 객체를 분명 가지고 있죠! 그러나 객체지향(OOP)의 근간인 캡슐화 다형성과 같은 요소는 사실상 언어에서 지원해주지 않으므로 객체지향 언어라고는 하기 힘든 면이 있습니다. 그러나 자바스크립트에서 지원해주는 또다른 무기(클로져와 같은)로 객체지향과 유사한 효과를 낼 수 있죠! 이런 부분은 다소 복잡하기에 천천히 알아볼 것입니다. 오늘은 전반적인 데이터 타입에 대한 소개의 시간이거든요.

  자바스크립트에서 객체를 생성할 때는 아래와 같은 방법을 이용합니다.

  (1) 리터럴을 통한 생성
  var object = { x:100, y:200 } // x와 y 멤버 변수를 가지는 객체 생성
  

  (2) 리터럴을 통한 또다른 생성
  var object = {
"x" : 100,
"y" : 200
  }



  (3) 생성자를 이용한 방법
  function myObject(x, y) {
this.x = x;
this.y = y;
  }

 var obj = new myObject(100, 200);


  자바스크립트에서 함수는 데이터 타입의 일종이기 때문에 멤버함수를 정의할 때도 멤버변수를 정의하듯이 똑같이 함수 리터럴로 정의 하면 됩니다. 이에 대한 설명은 추가로 하지 않겠습니다.

  객체에서 프로퍼티(혹은 멤버함수, 필드)들에 대한 접근은 일반적인 멤버호출연산자 .(마침표) 외에도 연관배열associative array과 같이 호출할 수 있습니다. 이를테면

name = dog.name;
age = dog.age;


과 같은 호출은 아래와 같습니다.

name = dog['name'];
age = dog['age'];






배열 Arrray




  자바스크립트의 배열은 인덱스를 통해 각 엘리먼트에 접근한다는 점이 여타 언어의 배열과 크게 다를바가 없습니다. 하지만 배열의 생성과 배열이 가지고 있는 멤버함수는 자바와 특히 유사합니다. 자바스크립트에서 배열은 다음과 같이 생성합니다.

var arr = new Array();





비어있음 null


널 이라는 값은 그 어떠한 값도 아닌 특수한 값입니다. 특정 변수가 아무것도 담고 있지 않을 때 주로 나타납니다.



정의되지 않음 undefined

정의되지 않은 값(undefined)은 null과는 다른 특수한 값입니다. 이는 아직 선언은 되었으나 할당된 적이 없는 변수에 값을 읽을 때 반환되는 값입니다. 널과 정의되지 않음은 서로 다른 값이지만 동등연산자(==)의 비교시에는 둘을 같은 값으로 간주합니다. 만약 이를 구별하고 싶다면 일치연산자(===)를 이용합니다.




  자바스크립트의 데이터 타입은 위와 같이 존재합니다. 자바스크립트 변수에는 어떠한 타입도 담을 수 있으므로 개발자는 데이터 타입에 크게 신경쓰지 않아도 됩니다. 하지만 일류 프로그래머라 되려면 이런 밑바닥을 차근차근 밟아 올라가야겟죠? 오늘은 타입들에 대한 소개로 마칩니다만 일부 중요한 타입들 이를테면 객체, 함수, 배열과 같은 친구들은 좀 더 자세히 다룰 겁니다. 조금만 기다려주세요!




THinkBerry의 생각열매를 함께 나눠요. ThinkBerry.co.kr
TAG

Leave Comments


profileThinkberry에 오신것을 환영해요~ 

Recent Trackback

오늘:
267
어제:
317
전체:
76,325