이번 시간에는... 지난 시간까지 2회차에 걸쳐 WML의 택스트 포맷, 이미지 처리, 페이지 이동, 태스크 수행과 이벤트 처리 및 WML 사용자 Input 처리 태그 등, WML 개발에 대해서 알아보았습니다. 이번 시간에는 2회차에 걸쳐, WML 스크립트 개발에 대해서 학습해 보도록 하겠습니다.
학습 목표 WMLScript 개발 - I 17 회차 강의에서 다루게 되는 내용은 다음과 같습니다. 이번 장의 학습 목표 WMLScript 첫번째 예제를 통해 WML 스크립트 개발의 개념을 알 수 있다. WMLScript의 문법에 대해 알 수 있다. 17 회차 강의에서는 2회차에 걸쳐 WML 스크립트 개발에 대해 학습해 보도로 하겠습니다. WML 스크립트 개발 첫번째 시간으로, WML 스크립트의 사용 용도와 구성, 및 간단한 WML 스크립트 소개와 WML 스크립트 사용 문법에 대해서 학습할 것입니다. 이번 강의를 통해 여러분은 WML 스크립트 문서를 보고 이해할 수 있는 기본 지식을 습득하게 될 것입니다.
WMLScript 소개 WMLScript WMLScript 정의 WMLScript는 JavaScript의 표준판인 ECMA Script에 기반을 둔, WAP 컨텐츠 개발 용 순수 Client Script 언어로, 제한된 사용성을 가지고 있는 WML 에 프로그래밍적 컴퓨팅 기능을 추가하여 동적 (Dynamic) 컨텐츠 개발과 컨텐츠 이용성(Usability) 향상 WMLScript 구성 Procedural Logic WMLScript는 컴퓨팅 기능을 지원하기 위해 절차적 프로그래밍 언어 지원 Script Library 다양한 기능을 Library 호출만으로 사용할 수 있도록 각종 기능 Library의 API (Application Programming Interface) 지원 Crypto Library WMLScript로 구현 가능한 보안 기능 중 하나로, 데이터의 암호화 기능을 가진 Library 제공 WMLScript 동작 WAP 게이트웨이는 먼저 WMLScript를 기계어 Byte-Code로 컴파일한 후, WAP 브라우저로 전송 WAP 브라우저는 WMLScript 실행용 애플리케이션(VM)을 포함하고 있으며, WMLScript VM에서 기계어로 컴파일된 WMLScript를 변환없이 직접 실행 WML 스크립트는 자바 스크립트에 기반한 WAP 컨텐츠 개발용 순수 클라이언트 스크립트 언어 입니다. WML 스크립트는 WML만으로는 구현하기 힘든 컴퓨팅 기능을 추가함으로써, WML 스크립트의 사용으로 다이나믹 컨텐츠의 개발과 컨텐츠의 사용 이용성을 향상시킬 수 있습니다. WML 스크립트는 절차적 프로그래밍 언어이며, 다양한 프로그램 라이브러리를 지원합니다. WML 스크립트가 지원하는 라이브러리는 계산 기능, 문자 처리 기능, 브라우저 연동 기능 등, 단순 호출만으로 그 기능을 사용할 수 있는 API 를 제공합니다. WML 스크립트는 WAP 게이트웨이에 의해 기계어로 컴파일되어 WAP 브라우저로 전송되며, WAP 브라우저는 기계어로 컴파일된 WML 스크립트를 변환없이 직접 실행함으로, 유선에 비해 적은 컴퓨팅 리소스를 가지고 있는 무선 단말기 및 무선 네트워크 환경에 적합한 무선 인터넷 스크립트 방식을 제공합니다. 문서로 작성된WMLScript 전달 WMLScript 문서를 기계어(Byte-Code)로 컴파일 WMLScript Byte-Code 전송 WAP 브라우저 기능인 WMLScript VM에서 Byte-Code 실행 컨텐츠서버 WAP GW 무선 망 WAP 브라우저
Dynamic Interactive Content WMLScript 소개 WMLScript WMLScript 사용 목적 컨텐츠 관점 일반 프로그래밍 처럼 Procedural Logic 지원 이벤트 기반(Event-Based)으로 사용자, WAP 단말, 컨텐츠 서버로 부터의 이벤트에 대응하여 이용성(Usability)을 가진 동적인 (Dynamic) 컨텐츠 개발 가능 확장된 JavaScript의 Subset으로 개발자에게 익숙하여 개발 용이 및 Cost 절감 네트워크 관점 WAP 게이트웨이는 WMLScript를 컴파일 하여, Byte-code를 WAP 브라우저에 전송 WAP 클라이언트는 기계어 실행만 하면 되고 서버에 대한 부담을 줄여, 불필요한 통신을 줄여 유선에 상대적으로 작은 Bandwidth를 가지는 모바일에 적합 단말기 관점 WAP 브라우저에서 실행 가능하므로, 별도의 애플리케이션이나 환경 불필요 브라우저만으로도 다양한 기능 제공이 가능하며, 단말기의 소프트웨어 변경 없이 단말기 기능 확장 가능 WML 스크립트의 사용 목적을 세가지 관점으로 살펴 보도록 하겠습니다. 컨텐츠에서의 WML 스크립트 사용 목적은 정적인 WML 마크업 언어에 프로그래밍적 요소를 추가할 수 있어, 사용성이 뛰어난 동적 컨텐츠 개발이 가능해 집니다. 네트워크 관점에서의 WML 스크립트는 WAP 게이트웨이에 의해 기계어 바이트 코드로 컴파일되어 단말기로 전송되므로, 불필요한 통신을 줄여, 유선에 상대적으로 적은 Bandwidth를 가진 무선 통신 환경에 적합한 이점이 있습니다. 마지막으로 단말기 관점에서는 단말기 자체의 소프트웨어 변경 없이 단말 기능을 확장할 수 있는 장점을 가지고 있습니다. WML 스크립트를 사용하는 가장 큰 장점은 유선 인터넷에서 자바 스크립트를 사용하는 것과 같이 컴퓨팅 요소를 WML 문서에 추가하여 조금 더 동적인 컨텐츠를 개발할 수 있다는 점 입니다. WML Display WMLScript Computing Dynamic Interactive Content
WMLScript 구성 WMLScript 사용 구성 User.wml My_Script.wmls Result.wml WMLScript 문서는 WML 문서와 분리하여 작성하고, “.wmls” 파일로 저장 WMLScript는 특정 컴퓨팅 작업을 수행할 함수들의 집합으로 구성 WML 문서는 WMLScript로 작성한 기능 함수들을 호출하여 사용 WML 코드에서 WMLScript에 정의한 함수 호출 예 : <a href = “My_Script.wmls#function_name_calculate(5)”> User.wml 사용자 Input A=5 A 입력값 검증 A 제곱근=? My_Script.wmls A 제곱근 계산 Result.wml 결과 값 수신 결과 값 표시 A 제곱근 = 2.2360679775 My_Script.wmls 호출 결과값 전달 WMLScript Lang Library 호출 WMLScript Library Crypto Lib Dialogs Lib Browser Lib URL Lib Float Lib Lang Lib String Lib Script Library 호출 Float Library 호출 A는 숫자? A 루트는? WML 스크립트를 작성할 때에는 WML 문서와 분리하여 “.wmls” 파일 형태로 저장하여 사용합니다. WML 스크립트를 사용함으로써, WML 스크립트에는 각종 컴퓨팅 기능을 구현하고, WML 문서에는 사용자와의 UI, 사용자 인터페이스만 구현하여, 컴퓨팅 요소와 UI 요소를 분리할 수있게 됩니다. 즉, WML 스크립트에 구현할 사항은 각종 컴퓨팅 기능을 수행하는 함수를 구현합니다. 이때, WML 문서는 WML 스크립트에 구현한 함수를 링크 방식으로 호출하여 사용하게 됩니다.
WMLScript 사용 예 WMLScript 처음 보기 Square_Number.wmls 사용자 입력 숫자 값을 받아, 입력 값의 제곱을 계산하는 함수 count()를 가진 WMLScript와 count() 함수를 호출하는 WML 문서 예제 // Square_Number.wmls // Programmer defined functions extern function count() { // prompt for user input var inputNumber = Dialogs.prompt( "계산 숫자 입력", "" ); // call function square and pass it inputNumber var numberSquared = square( Lang.parseInt( inputNumber ) ); // create output message var outputSquare = inputNumber + " 의 제곱은 " + numberSquared; WMLBrowser.setVar( "display_result", outputSquare ); WMLBrowser.go( "#result_page" ); } // variable y gets value of inputNumber function square( y ) { return ( y * y ); } <wml> <card id="input_page" title="Input_Page"> <do type="accept" label="OK"> <go href="Square_Number.wmls#count()"/> </do> <p> Square Number 계산 </p> </card> <card id="result_page" title="Result_Page"> <do type = "accept" label = "Home" > <prev /> </do> <p> <!-- display result of calculation --> $Display_result </p> </card> </wml> Square_Number.wmls Square_Display.wml 이제 본격적으로 WML 스크립트 개발에 대해 학습해보겠습니다. 먼저 그 첫번째 예제로, 그림은 간단한 WML 스크립트 예제입니다. 각 번호에 해당하는 자세한 설명은 다음장에 있습니다.
WMLScript 사용 예 WMLScript 처음 보기 사용자의 WAP 브라우저에서 Square_Display.wml 문서의 input_page WML Card가 실행되고, 휴대폰 액정 화면에 “Square Number 계산” 이 출력 되며, 사용자가 확인 버튼을 누르면, Square_Number.wmls WMLScript 문서의 count() 함수가 호출된다. 이때 함수 호출 문법은 <go href="Square_Number.wmls#count()"/> 과 같이, “WMLScript 문서명 + 점(.) + 함수명” 으로 구성된다. WMLScript 에서 변수 사용이 가능하며 변수 선언은 “var”로 시작하고, 변수의 타입은 따로 정의하지 않으며 대신 선언한 변수의 입력 값으로 자동 결정된다. 휴대폰 Interface 기능을 제공하는 WMLScript Library인 Dialog Library의 prompt() 함수 호출 Dialog Library prompt(message) : 사용자 단말기의 액정에 message 출력 함수 WMLScript의 Script 기본 기능을 제공하는 Lang Library의 parseInt() 함수 호출 Lang Library parseInt(value) : 문자로써 value 값을 받아 숫자로 바꾸는 기능 함수 Square_Number.wmls 의 square() 함수 호출 WMLScript의 WAP 브라우저 연동 기능을 제공하는 WMLBrowser Library의 setVar() 함수 호출 WMLBrowser Library setVar(A, B) : B 변수 값을 A 변수에 할당하는 함수 WMLBrowser Library의 go() 함수 호출 WMLBrowser Library go(url) : 현재 페이지에서 url 에 명시한 링크로의 이동 기능 제공 WMLBrowser Library go() 함수 호출로, Square_Display.wml 문서의 두번째 WML Card인 result_page로 이동 스텝 (7)의 WMLBrowser Library setVar()에 의해 그 값을 설정한 변수 display_result 출력 <실습 예이므로, 나레이션 불필요>
WMLScript 문법 WMLScript 문법 일반 사항 WMLScript 작성은 JavaScript, 또는 ASP, JSP 등, 일반 유선 웹 사이트용 스크립트 페이지 작성과 유사하며, 이들과 유사한 문법으로 작성 WMLScript 문법 규칙 Space는 어느 길이의 Space라도 하나로 간주, Space, Tab, New Line 캐릭터 (CR+LF) 은 무시 됨 WMLScript의 한 문장은 ; 으로 끝남 var inputNumber = 3; Block은 { }로 처리함 – Block : 절차 언어(Procedural Language)인 WMLScript 내 하나의 함수 범위 function square( y ) { return ( y * y ); } WMLScript는 대문자와 소문자 구별 – 예문의 변수 NUMBER와 number는 각기 독립적인 다른 변수 임 WML 스크립트 작성 방법은 자바 스크립트나 ASP 등 일반 유선 인터넷에서 사용하는 스크립트의 개발과 유사하며, 이들과 유사한 문법을 가지고 있습니다. <실습 예이므로, 나레이션 불필요> var NUMBER = 5; var number = 15; 한 Step의 코멘트는 // 사용, 여러줄의 코멘트는 /* 내용 */ // 한 Step Comment /* 여러줄 코멘트 ... 코멘트 ... ... */
WMLScript 문법 WMLScript 변수 Block1 범위 Block2 범위 WMLScript의 변수 선언은 var 로 선언하며, 프로그래밍 언어가 지원하는 모든 변수 타입 지원 WMLScript 지원 변수 Boolean : TRUE 또는 FALSE 값 String : 문자 Integer : 정수 숫자 범위 -2147483648 ~ 2147483647 Float : 부동 소수 숫자 범위 1.17E(-38) ~ 3.40E(+38) Invalid : 함수 내에서 변수로 사용하지 않을 값 var num_byunsu = 5; // Integer var float_byunsu = 3.14; // Float var string_byunsu = “Hi~~”; // String var boolean_byunsu = true; // Boolean // 변수 타입은 마지막에 설정한 값의 변수 Type으로 변경된다. // Integer에서 String으로 변수 Type 및 변수 값 변경됨 Num_byunsu = “Variable Type Changed”; <실습 예이므로, 나레이션 불필요> WMLScript 변수의 범위 예문에서 변수 A 는 블록 1 및 블록 2에 모두 적용, 변수 B는 블록 2에서만 사용 가능 { // block1 var var1; { // block2 var var2; } Block1 범위 Block2 범위
WMLScript 문법 WMLScript 연산자 WMLScript는 일반 프로그래밍 언어가 지원하는 대부분의 연산자(Operator) 기능 지원 WMLScript Operator 대입 (Assignment) 연산자 : = 연산 기호로 앞의 값에 뒤의 값 대입 var x = 3; // x 값을 정수 3 으로 지정 산술 (Arithmetic) 연산자 : +, -, *, /, div, %(나머지) 와 같은 산술 계산 연산 var x = 5 / 2; // x 값은 2.5 var y = 5 div 2; // x 값은 2 (div 경우, 값 truncating) var z+=5; z++; ++z; // 모든 프로그래밍 산술식 가능 논리(logical) 연산자 <실습 예이므로, 나레이션 불필요> operator 의미 && And || Or ! Not var x = true; // x 값은 참 (true) var y = !x; // y 값은 거짓 (false)
WMLScript 문법 WMLScript 연산자 WMLScript Operator 문자열 결합 : + 연산기호 사용 var msg = "Hello~~~"; // msg 값은 “Hello~~~” msg = msg + ' Worlds!'; // msg 값은 “Hello~~~ Worlds!” 비교 (Comparison) 연산자 : 결과 값은 true 또는 false operator 의미 == 같다 != 같지 않다 > ~보다 큰 >= ~보다 크거나 같은 < ~보다 작은 <= ~보다 작거나 같은 <실습 예이므로, 나레이션 불필요> var x = (18 > 19); // 18은 19보다 작으므로 x 값은 false 콤마(comma) 연산자 var z = x + 12, 3 + y; // z 에는 (3+y)의 값이 저장됨
WMLScript 문법 WMLScript 연산자 WMLScript Operator typeof 연산자 : 값으로 Return 되는 변수 Type에 따라 다음 표 값을 지정 형식 값 Integer Float 1 String 2 Boolean 3 Invalid 4 var y = 1.3432 var z = typeof y; // z 1 (y의 타입은 Integer) z = typeof (1/0); // z 4 (y의 타입은 Invalid // : 숫자는 0으로 나눌 수 없다 isvalid 연산자 : 변수의 유효성 검사, 결과는 true or false의 Boolean 타입 Return <실습 예이므로, 나레이션 불필요> var x = “hello”; var y = isvalid x; // x는 유효한 String 타입, y = true var z = isvalid (1/0); // (1/0)은 invalid, z = false 조건(conditional) 연산자 : result = 조건식 ? ex1 : ex2 (만약 조건식이 true면 result = ex1, false면, result = ex2) var x = (5 > 9) 4 : 6; // (5>9)가 false 이므로 x 값은 6
WMLScript 문법 WMLScript 제어문 WMLScript는 조건식 구문인 if~else 문과 for, while의 Loop 문 지원 WMLScript 조건식 구문 if ~ else WMLScript는 If ~ else 문 지원 (elseif, endif 는 지원하지 않음) 다음 예제는, 만약 사용자가 입력한 나이가 19보다 클 경우, allow_adult_page로 이동하고, 그렇지 않을 경우, deny_adult_page로 이동하는 예제 사용자 입장 허용 / 불가 등, 조건식에 사용 var age = Dialogs.prompt("나이입력", ""); if (age > 19) { WMLBrowser.go(“#allow_adult_page”); visit_counter++; } else WMLBrowser.go(“#deny_adult_page”); WMLBrowser.go()는 WMLBrowser Library의 go(URL) 함수 호출로, URL로 이동 기능 제공 WMLScript Library는 다음 강좌 WMLScript-II 참조 WMLScript Loop 구문 while while(조건식)의 값이 true일 동한 while()의 { } 블록 내 구문을 연속 실행 <실습 예이므로, 나레이션 불필요> var counter = 0; var total = 0; while (counter < 3) { // counter값이 3보다 클때까지 연속실행 counter++; total += c; }; // while loop 실행이 끝나면 total 값은 1+2+3인 6이 된다 var x = 2; while (x>=1) { x += 1; } 이 경우 휴대폰을 사용할 수 없게 됨 무한 Loop
WMLScript 문법 WMLScript 제어문 WMLScript Loop 구문 for WMLScript For Loop 구문은 for(초기값; 조건식;증가값) { do_something }의 초기 변수값이 조건식을 만족할 때까지 {} 블록 내 구문을 연속 실행 다음 예제는, WAP의 WTAI Library 중 전화걸기 기능인 makeCall() 함수를 이용하여 전화가 걸릴때까지 전화걸기 시도를 다섯번 반복하는 for Loop 예제 var call_not_made = 1; for (var index = 0; index < 5; index++) { count += index; if (call_not_made != 0) call_not_made = WTAPublic.makeCall("0115554367"); else break; // for loop 종료, 더이상 전화걸기 시도 안함 }; 5번 동안 전화걸기 시도 후, 전화 걸기 실패 시에는 for loop 종료 전화걸기 성공시, break 문에 의해 for loop 종료 WTAI Library는 WTAI 강좌 참조 <실습 예이므로, 나레이션 불필요> 그 밖의 WMLScript 제어문 : break, continue, return break : while 및 for Loop의 반복 루틴을 종료 continue : while 및 for Loop에서 continue 구문이 사용된 이하 루틴을 실행하지 않고 건너 뛰기 return : WMLScript 함수에서 return 값을 정하기 위해 사용 (if no return문, NULL 값 return)
요약 정리 이번 시간에 소개했던 내용을 정리해 봅시다. WMLScript의 사용 용도와 구성에 대해 알아 보았습니다. WMLScript 첫번째 예제를 통해 WML 스크립트 개발의 기본을 알아보았습니다. WMLScript의 문법에 대해 자세히 학습하였습니다. 다음 시간에는 WMLScript 개발 – II에 대하여 학습하시게 될 것입니다.
평가 하기 문제1 WMLScript의 사용 목적은 무었입니까? 정답은 다음과 같습니다. 사용성이 뛰어난 동적 컨텐츠 개발을 위해 사용 해설내용: WMLScript를 사용하는 가장 큰 장점은 유선 인터넷에서 자바 스크립트를 사용하는 것과 같이 컴퓨팅 요소를 WML 문서에 추가하여 조금 더 동적인 컨텐츠를 개발할 수 있다는 점입니다. 문제2 WML 문서에서 WMLScript에 구현한 함수 이용 방법을 말해보시오 정답은 다음과 같습니다. WMLScript 함수를 WML 링크로 연결하여 사용 해설내용: WMLScript 에는 각종 컴퓨팅 기능을 수행하는 함수를 구현하며, WML 문서는 WMLScript에 구현한 함수를 링크 방식으로 호출하여 사용하게 됩니다.
평가 하기 문제3 WMLScript가 지원하는 변수 타입에 대해서 말해 보시오 정답은 다음과 같습니다. Boolean, String, Integer, Float, Invalid 변수 타입 지원 해설내용: WMLScript가 지원하는 변수 타입은 Boolean 타입, 문자 String, 정수 숫자 및 부동 소수 숫자 (Integer & Float), 그리고 사용 불가능한 변수를 지칭하는 Invalid 변수를 지원합니다.