"생각의 웹"입니다.


현재, 대디스랩에서 대여 받은 Arduino Nano board와 Raspberry Pi board을 연결해 간단한 IoT 기기 프로토타이핑을 하고 있습니다만 제게 과거 인텔에서 갈릴레오 보드를 무료로 뿌릴 때 지원했다가 떨어지고 대신 받은 레퍼런스 pdf 문서가 있어 이 포스팅을 통해 공유하려 합니다.


레퍼런스 문서 다운로드


추가로, 갈릴레오 보드에 대해 간단히 설명드리면, 

인텔이 Maker 운동에 새로운 기회가 있음을 직감하고 아두이노 호환이 되면서 보다 강력한 성능을 지닌 자체 프로세서(Quark)를 만들어 보급한 것으로 보시면 됩니다.


보다 자세한 내용이 궁금하시면 정식 사이트를 방문하시기 바랍니다.


감사합니다.

안녕하세요. "생각의 웹"입니다.


지난 포스트에서 말씀드린 바와 같이 이번 글에서는 객체에 의미를 부여하기 위해 객체 정의 이후 객체의 속성과 메소드를 추가하는 법에 대해 설명드리려고 하는데, 이에 앞서 지난 번에 생략하고 지나간 Web IDL에서 제공하는 형(type)들에 대해 먼저 언급하고자 합니다.


1. Web IDL 의 기본 형들 (types)

이런 글을 읽는 분이라면 이 형이 동네에서 노는 형들을 의미하는 것이 아닌 것은 아시리라 믿지만 왕초보자를 위해 프로그래밍 언어의 가장 기초적인 내용을 말씀드리죠. 


컴퓨터는 0 과 1 외에는 알지 못하지만 수 많은 0과 1을 (2진수라고 합니다.) 엄청나게 빠른 시간 내에 처리할 수 있는 능력을 지녔습니다. 하지만 컴퓨터에게 일을 시키는 역할을 하는 프로그램을 짜는 건 사람이다 보니 2진수보다 10진수로 표기되는 정수(integer)와 실수(float point number) 그리고 문자열(string) 등에 익숙합니다. 따라서 대부분의 프로그래밍 언어는 이런 형들을 지정해주면 컴퓨터가 이해할 수 있는 2진수로 변환해 주는 기능을 합니다. 더욱이 자바스크립트 언어는 타입이 없는 (untyped language) 언어라고 불리는 데 특별히 형을 지정해 주지 않아도 값을 통해 형을 유추하는 기능을 제공한다는 의미로 보면 됩니다.


뻔한 이야기를 다시 하는 이유는 자바스크립트에서는 형을 지정해 줄 필요가 없더라도 API 입장에서 보면 상황이 다릅니다. API를 사용하고자 하는 프로그래머에게 호출하고자 하는 대상에 전달할 값의 형을 알려주어야 하기 때문입니다. 자바스크립트에서는 필요에 따라 암묵적으로 형 변환 (implicit type conversion)이 일어나지만 종종 의도치 않는 변환이 일어날 수 있기에 주의해야 합니다.


다시 기본 제공하는 형들 (primitive types)의 예약어들(reserved keywords)를 보편적으로 많이 쓰는 C/C++/Java를 기준으로 나열해 보면,


  • 참/거짓 형: bool
  • 정수 형: { signed | unsigned } short, int, long
  • 실수 형: { signed | unsigned } float, double
  • 문자 형: char, char[], char*, String
정수 형이나 실수 형은 +/- 부호 유무와 숫자를 담을 수 있는 크기 (16 bytes, 32 bytes, 64 bytes)에 따라, 문자 형은 문자의 인코딩(encoding) 방식과 문자열의 길이 등에 따라 각기 다른 형을 지정해 주고 사용해야 합니다.

Web IDL에서는 이와 유사하게 다음과 같은 예약어들을 사용합니다.

  • 참/거짓 형: boolean
  • 정수 형: byte, {unsigned} short, long
  • 실수 형: {unsigned} float, double
  • 문자 형: DOMString
  • 객체 형: object  

이외에 임의의 형 (any) 등도 있으니 자세한 사항은 Web IDL spec.를 확인하시기 바라며, int 가 예약어가 아니라는 점 유의하시면 좋을 것 같습니다.

2. 속성 정의하기

형들에 대해 이해하셨다면 이런 형들을 가진 속성들(attributes)을 객체에 추가해 보기로 하죠. 지난 글에서 작성했던 Web IDL 설계를 다시 기재하겠습니다.

[Constructor]

[Constructor(DOMString model)]

interface ArduinoBoard {


};


이제 생성자에서 받은 model이라는 parameter를 속성으로 객체에 저장하기 위해 model attribute를 추가해 봅시다.


속성을 설계하는 문법은 다음과 같습니다.


interface 인터페이스_이름 {

attribute 속성의_형 속성의_이름;

};



[Constructor]

[Constructor(DOMString model)]

interface ArduinoBoard {


attribute DOMString modelName;

};

간단하죠? 이로써 멍텅구리 객체가 정보를 갖는 객체로 진화했습니다. ;-)



3. 메소드 정의하기


객체가 속성만을 지니고 있다면 소극적인 느낌이죠. 이번에는 객체에 행위를 부여하기 위해 메소드를 추가해 봅니다.


메소드는 메소드 이름, 메소드의 인자들(parameters), 메소드의 반환 형 (return type)으로 구성되어 있고 문법은 다음과 같습니다.


interface 인터페이스_이름 {

    반환_형 메소드_이름(인자_형 인자_이름, ...);

};


유념할 사항 중 하나는 설계 시, 메소드 오버로딩(method overloading) 기법을 사용하게 되면 의도치 않은 오류를 일으킬 수 있다는 점인데, 이는 자바스크립트에서는 자동 형 변환이 일어나기 때문입니다. 


백문불여일견이니 예시로 문자열을 전송하는 쓰기 메소드를 설계해 보죠.


[Constructor]

[Constructor(DOMString model)]

interface ArduinoBoard {


attribute DOMString modelName;

void write(DOMString msg);

};

이 메소드는 메세지를 쓰고 결과를 반환하지 않도록 (void) 설계했습니다. 


지금까지 객체에 속성과 메소드를 정의하는 법을 설명드렸습니다. 여기까지 설명드린 것으로도 간단한 자바스크립트 API를 설계하실 수 있게 되었습니다. 축하드립니다!


하지만, 자바스크립트는 생각하는 것보다 만만치 않은 언어입니다. 조금 더 공부해 보시면 아마 곧 깨닫게 되실 겁니다. 따라서 다음 포스팅은 자바스크립트 언어의 특징을 살려서 API를 보다 상세히 설명하는 내용으로 준비해 보려고 합니다.


긴 글 읽어주셔서 감사드리며 궁금한 점 댓글로 남겨주시면 성실히 답변드리도록 하겠습니다. 행복한 하루 되시길!!!

 


"생각의 웹"입니다.


지난 7월 ICT DIY Forum에서 발표된 내용 중 한국 전자 부품 연구원 (KETI)에서 준비한 모비우스 플랫폼에 대해 소개하고자 합니다. (아래 PDF 참조)



6-2.김재호_KETI 모비우스.pdf



제가 이 플랫폼을 주목하는 이유는 개방형으로 제공하는 데다가 어느 정도 사용해 볼 수 있는 수준의 품질을 확보한 것으로 보이기 때문입니다. 


 보다 자세한 내용은 아래 링크를 확인하시기 바랍니다.


http://open-iot.net/


또 흥미로운 점은 이 플랫폼을 이용한 센서 및 기기들은 아래 사이트에서 open API를 사용하여 손쉽게 응용을 구현할 수 있다는 것입니다.


http://programmable-things.net/


현재 여기서 제공하는 API는 플랫폼 API, 디바이스 API, 메쉬업 API 세 범주로 나뉘어 있고 각각 인증 및 보안을 위한 기본 기능, 디바이스 별 기능 제어 그리고 기능들을 묶어 새로운 기능으로 엮는 역할을 제공하게 됩니다.


결국, 플랫폼이란 플레이어 (개발자, 수요자)들에게 얼마나 편리한 기능들을 손쉽게 그리고 빠르게 사용할 수 있도록 제공하는가에 대한 문제로 귀결되기에 국책 연구소 주도로 이렇게 개방형 IoT 기술을 제공하는 시도가 의미있어 보입니다.


좀 더 상세히 살펴 본 이후 현재 제공하는 API에 대한 내용에 대해 포스팅으로 다룰 예정이니 많은 관심 바랍니다.


감사합니다.

+ Recent posts