모든 저작권은 <생활코딩>의 생산자인 <egoing>님에게 있습니다.
문제시, 비공개로 전환하겠습니다.
<실행방법과 실습환경>
실행환경
1. Text Editor
2. 크롬 개발자 도구 (자바스크립트 콘솔) - 작성한 코드안에 console.log('Hello World');를 넣으면 콘솔창에 Hello World가 뜨게된다.
3. Sublime Text
*IDE - 통합개발토구, 개발에 필요한 모든 도구 및 기능이 총집합된 것
JavaScript는 HTML 위에서 동작한다.
<script>...</script> 부분
<숫자와 문자>
프로그래밍 입문자에게 가장 익숙한 데이터 형(data type)은 숫자와 문자일 것이다.
이번 시간에는 실제로 가장 많이 사용되는 데이터 형인 문자와 숫자를 프로그래밍에서는 어떻게 표현하고 연산하는지 알아보자.
숫자 |
자바스크립트에서는 큰따옴표나 작은따옴표가 붙지 않은 숫자는 숫자로 인식한다. alert(1+1); --> 2 반올림 Math.round(10.6); // 11 10.6을 반올림 올림 Math.ceil(10.2); // 11, 10.2를 올림 내림 Math.floor(10.6); // 10, 10.6을 내림 제곱근 Math.sqrt(9); //3, 3의 제곱근 0부터 1.0사이의 난수 Math.random(); |
문자 |
문자는 "(큰 따옴표) 혹은 '(작은 따옴표) 중의 하나로 감싸야 한다. alert("coding everybody"); alert('coding everybody'); 숫자를 따옴표로 감싸면 문자가 된다. 아래는 문자다. typeof는 값의 데이터 형을 알려주는 기능이다. |
<변수>
변수(Variable)는 (문자나 숫자 같은) 값을 담는 컨테이너로 값을 유지할 필요가 있을 때 사용한다.
여기에 담겨진 값은 다른 값으로 바꿀 수 있다. 변수는 마치 (사람이 쓰는 언어인) 자연어에서 대명사와 비슷한 역할을 한다.
변수 |
JavaScript에서 변수는 var로 시작한다. var은 변수를 선언하겠다는 것을 의미한다.
alert (a+1); //2 var a=2; alert(a+1); //3 |
<주석>
// 뒤에 나오는 내용은 주석으로 처리됨
<줄바꿈과 여백>
; --> 명령이 삭제되었다는 명시적 표기
JavaScript는 줄이바뀌면 명령이 끝난것으로 인식한다. 때문에 ; 를 생략할수도 있다. 하지만 왠만하면 쓰자.
<비교>
연산자 |
연산자란 값에 대해서 어떤 작업을 컴퓨터에게 지시하기 위한 기호인데 우리는 이미 연산자를 사용했다. |
비교 연산자 |
프로그래밍에서 비교란 주어진 값들이 같은지, 다른지, 큰지, 작은지를 구분하는 것을 의미한다. == --> equal operator alert(null == undefined); //true |
조건문 |
Boolean else else if |
변수와 비교연산자 |
앞서 배운 변수와 비교연산자 그리고 조건문을 결합해보자. ID의 값으로 egoing을 입력해보고, 다른 값도 입력해보자. |
조건문의 중첩 |
위의 예제에서 아이디와 비밀번호를 모두 검증해야 한다면 어떻게 하면 될까? 다음 예제를 보자. |
논리 연산자 |
&& 좌항과 우항이 모두 참(true)일 때 참이된다. 다음 예제를 보자. 결과는 1이다. &&의 좌우항이 모두 true인 것은 첫번째 조건문 밖에 없기 때문이다. 이러한 논리 연산자를 and 연산자라고 한다. if(true && true){ alert(1); } if(true && false){ alert(2); } if(false && true){ alert(3); } if(false && false){ alert(4); } || '||'는 '||'의 좌우항 중에 하나라도 true라면 true가 되는 논리 연산자다. |기호는 통상 엔터키 위에 있는 원화표시 키를 쉬프트와 함께 누르면 입력된다. or 연산자라고 부른다. 다음 예를 보자. 결과는 1,2,3이 출력된다. 마지막 조건문의 '||'는 좌항과 우항이 모두 false이기 때문에 false가 된다. if(true || true){ alert(1); } if(true || false){ alert(2); } if(false || true){ alert(3); } if(false || false){ alert(4); } ! '!'는 부정의 의미로, Boolean의 값을 역전시킨다. true를 false로 false를 true로 만든다. not 연산자라고 부른다. 아래의 결과는 4다. if(!true && !true){ alert(1); } if(!false && !true){ alert(2); } if(!true && !false){ alert(3); } if(!false && !false){ alert(4); } |
Boolean의 대체제 |
0과 1 |
반복문의 문법 |
while 반복해서 실행할 코드 } document.write('coding everybody <br />'); } var i = 0; // 종료조건으로 i의 값이 10보다 작다면 true, 같거나 크다면 false가 된다. while(i < 10){ // 반복이 실행될 때마다 coding everybody <br />이 출력된다. <br /> 줄바꿈을 의미하는 HTML 태그 document.write('coding everybody <br />'); // i의 값이 1씩 증가한다. i++ } |
for for(초기화; 반복조건; 반복이 될 때마다 실행되는 코드){ 반복해서 실행될 코드 } for(var i = 0; i < 10; i++){ document.write('coding everybody'+i+'<br />'); } for문은 제일 먼저 '초기화'를 한다. 위의 예제에서 초기화는 var i = 0;이다. |
반복문의 제어 |
break if(i === 5) { break; } document.write('coding everybody'+i+'<br />'); } coding everybody 0 coding everybody 1 coding everybody 2 coding everybody 3 coding everybody 4 for(var i = 0; i < 10; i++){ if(i === 5) { continue; } document.write('coding everybody'+i+'<br />'); } coding everybody 0 coding everybody 1 coding everybody 2 coding everybody 3 coding everybody 4 coding everybody 6 coding everybody 7 coding everybody 8 coding everybody 9 |
반복문의 중첩 |
반복문 안에는 다시 반복문이 나타날 수 있다. 다음 예제를 보자. // 0부터 9까지 변수 i에 순차적으로 값을 할당 for(var i = 0; i < 10; i++){ // 0부터 9까지의 변수를 j의 값에 순차적으로 할당 for(var j = 0; j < 10; j++){ // i와 j의 값을 더한 후에 출력 // String은 숫자인 i와 j의 데이터 타입을 문자로 형태를 변환하는 명령이다. // String()을 제거하고 실행해보면 의미가 좀 더 분명하게 드러날 것이다. document.write(String(i)+String(j)+'<br />'); } } 단순히 글자를 반복적으로 출력하기 위해서 반복문을 사용한다고 생각 할 수도 있다. |
함수의형식 |
함수(function)란 하나의 로직을 재실행 할 수 있도록 하는 것으로 코드의 재사용성을 높여준다. 코드 return 반환값 } 함수의 정의와 호출 다음 예제를 보자. 이 함수의 이름은 numbering이고, 내용은 0부터 9까지를 화면에 출력한다. i = 0; while(i < 10){ document.write(i); i += 1; } } numbering(); |
함수의 입력과 출력 |
함수의 핵심은 입력과 출력이다. 입력된 값을 연산해서 출력하는 것이 함수의 기본적인 역할이다. function get_member1(){ return 'egoing'; }
function get_member2(){ return 'k8805'; }
alert(get_member1()); alert(get_member2());
return 'egoing'; return 'k8805'; return 'sorialgi'; } alert(get_member()); |
인자 |
인자(argument)는 함수로 유입되는 입력 값을 의미하는데, 어떤 값을 인자로 전달하느냐에 function get_argument(arg){ return arg; }
alert(get_argument(1)); alert(get_argument(2)); 5행의 get_argument(1)은 1행에서 3행 사이에 정의된 함수를 실행하는 구문이다. 복수의 인자 function get_arguments(arg1, arg2){ return arg1 + arg2 }
alert(get_arguments(10, 20)); alert(get_arguments(20, 30)); |
함수를 정의하는 다른 방법 |
자바스크립트는 함수를 정의하는 또 다른 방법을 제공한다. 다음 예제를 보자. 아래 방법은 함수를 정의 하는 또 다른 방법이다. var numbering = function (){ i = 0; while(i < 10){ document.write(i); i += 1; } } numbering(); 위의 내용은 이전 예제와 동일 하지만 함수를 정의 하는 방법을 달리한 것이다. |
배열 alert(name); 배열의 생성 alert(member[0]); alert(member[1]); alert(member[2]); 결과는 아래의 문자열을 차례로 경고창으로 출력 할 것이다. egoing k8805 sorialgi 배열의 사용 function get_members(){ return ['egoing', 'k8805', 'sorialgi']; } members = get_members(); // members.length는 배열에 담긴 값의 숫자를 알려준다. for(i = 0; i < members.length; i++){ // members[i].toUpperCase()는 members[i]에 담긴 문자를 대문자로 변환해준다. document.write(members[i].toUpperCase()); document.write('<br />'); } egoing k8805 sorialgi 위의 예제에서 주목해야 할 것은 반복문과 배열을 결합한 부분이다. |
배열의 제어 |
배열의 크기 alert(arr.length); |
배열의 조작 (추가) |
다음은 배열의 끝에 원소를 추가하는 방법이다. var li = ['a', 'b', 'c', 'd', 'e']; li.push('f'); alert(li); li = li.concat(['f', 'g']); alert(li); li.unshift('z'); alert(li); li.splice(2, 0, 'B'); alert(li); |
배열의 조작(제거) |
다음은 배열의 첫번째 원소를 제거하는 방법이다. shift를 사용하면 된다. 아래 결과는 b, c, d, e 다. li.shift(); alert(li);
li.pop(); alert(li); |
배열의 조작(정렬) |
다음은 정렬하는 방법이다. 결과는 a, b, c, d, e 다. li.sort(); alert(li); var li = ['c', 'e', 'a', 'b', 'd']; li.reverse(); alert(li); |
객체의 생성 |
지금까지 살펴본 배열은 아이템에 대한 식별자로 숫자를 사용했다. var grades = {}; grades['egoing'] = 10; grades['k8805'] = 6; grades['sorialgi'] = 80; alert(grades['sorialgi']); 다음 방법으로도 객체의 속성에 접근 할 수 있다. for(key in grades) { document.write("key : "+key+" value : "+grades[key]+"<br />"); } key : egoing value : 10 key : k8805 value : 6 key : sorialgi value : 80 'list': {'egoing': 10, 'k8805': 6, 'sorialgi': 80}, 'show' : function(){ for(var name in this.list){ document.write(name+':'+this.list[name]+"<br />"); } } }; grades.show(); |
모듈이란? |
프로그램은 작고 단순한 것에서 크고 복잡한 것으로 진화한다. (브라우저에서만 해당)
|
모듈이 없다면 |
우선 모듈이 없는 애플리케이션을 하나 만들어보자. 파일의 이름은 main.html 이다. <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> <body> <script> function welcome(){ return 'Hello world' } alert(welcome()); </script> </body> </html> |
모듈의 사용 |
새로운 파일을 만든다. 이름은 greeting.js 다. 자바스크립트 파일은 확장자로 js를 사용한다. function welcome(){ return 'Hello world'; } <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script src="greeting.js"></script> </head> <body> <script> alert(welcome()); </script> </body> </html> 이전 예제와 비교했을 때 결과는 같다. 하지만 함수 welcome을 main.html의 외부 파일로 분리했다. 다음은 위의 코드에 대한 분석이다. |
Node.js에서의 모듈의 로드 |
본 수업은 Node.js를 위한 수업이 아니기 때문에 Node.js를 실행하는 방법은 다루지 않는다. var PI = Math.PI; exports.area = function (r) { return PI * r * r; }; exports.circumference = function (r) { return 2 * PI * r; }; var circle = require('./node.circle.js'); console.log( 'The area of a circle of radius 4 is ' + circle.area(4)); 아래는 실행방법과 실행 결과다. |
라이브러리 |
라이브러리는 모듈과 비슷한 개념이다. 1. jQuery는 $로 시작한다. <!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-1.11.0.min.js"></script> </head> <body> <ul id="list"> <li>empty</li> <li>empty</li> <li>empty</li> <li>empty</li> </ul> <input id="execute_btn" type="button" value="execute" /> <script type="text/javascript"> $('#execute_btn').click(function(){ $('#list li').text('coding everybody'); }) </script> </body> </html> <!DOCTYPE html> <html> <body> <ul id="list"> <li>empty</li> <li>empty</li> <li>empty</li> <li>empty</li> </ul> <input id="execute_btn" type="button" value="execute" /> <script type="text/javascript"> function addEvent(target, eventType,eventHandler, useCapture) { if (target.addEventListener) { // W3C DOM target.addEventListener(eventType,eventHandler,useCapture?useCapture:false); } else if (target.attachEvent) { // IE DOM var r = target.attachEvent("on"+eventType, eventHandler); } } function clickHandler(event) { var nav = document.getElementById('list'); for(var i = 0; i < nav.childNodes.length; i++) { var child = nav.childNodes[i]; if(child.nodeType==3 continue; child.innerText = 'Coding everybody'; } } addEvent(document.getElementById('execute_btn'), 'click', clickHandler); </script> </body> </html> |
<UI와 API 그리고 문서보는 법>
API란? |
UI 프로그래밍을 공부하기 위한 자료는 크게 레퍼런스(reference)와 tutorial(안내서)가 있다. |
<정규표현식>
정규표현식(regular expression)은 문자열에서 특정한 문자를 찾아내는 도구다. 정규표현식은 하나의 언어라고 할 수 있다. |
정규표현식 생성 |
정규표현식은 두가지 단계로 이루어진다. 하나는 컴파일(compile) 다른 하나는 실행(execution)이다. 우선 컴파일부터 알아보자. |
컴파일 |
컴파일은 검출하고자 하는 패턴을 만드는 일이다. 우선 정규표현식 객체를 만들어야 한다. |
정규표현식 메소드 실행 |
정규표현식을 컴파일해서 객체를 만들었다면 이제 문자열에서 원하는 문자를 찾아내야 한다. RegExp.exec() console.log(pattern.exec('bcdefg')); // null var pattern = /a./; --- |
문자열 메소드 실행 |
문자열 객체의 몇몇 메소드는 정규표현식을 사용할 수 있다. var pattern = /a/; //undefined |
<옵션>
정규표현식 패턴을 만들 때 옵션을 설정할 수 있다. 옵션에 따라서 검출되는 데이터가 달라진다. i - i를 붙이면 대소문자를 구분하지 않는다. var xi = /a/; console.log("Abcde".match(xi)); // null var oi = /a/i; console.log("Abcde".match(oi)); // ["A"]; g - g를 붙이면 검색된 모든 결과를 리턴한다. var xg = /a/; console.log("abcdea".match(xg)); var og = /a/g; console.log("abcdea".match(og)); |
<사례>
캡쳐 - 괄호안의 패턴은 마치 변수처럼 재사용할 수 있다. 이 때 기호 $를 사용하는데 아래 코드는 coding과 everyday의 순서를 역전시킨다. var pattern = /(\w+)\s(\w+)/; var str = "coding everybody"; var result = str.replace(pattern, "$2, $1"); // $2후에 ,를 찍고(공백)후에 $1가 나온다. console.log(result); 1. ( )은 정규표현식에서 group을 의미한다. 치환 - 아래 코드는 본문 중의 url을 링크 html 태그로 교체한다. var urlPattern = /\b(?:https?):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*/gim; var content = '생활코딩 : http://opentutorials.org/course/1 입니다. 네이버 : http://naver.com 입니다. '; var result = content.replace(urlPattern, function(url){ return '<a href="'+url+'">'+url+'</a>'; }); console.log(result); 결과는 아래와 같다. 생활코딩 : <a href="http://opentutorials.org/course/1">http://opentutorials.org/course/1</a> 입니다. 네이버 : <a href="http://naver.com">http://naver.com</a> 입니다. |
정규표현식 시각화 - https://regexper.com/
정규표현식 빌더 - https://regexr.com/
댓글