JavaScript 는 웹 브라우저에서 사용하기 위하여 만들어진 프로그래밍 언어입니다. 이 언어는 90년대부터 주로 웹 브라우저 상에서 UI 를 동적으로 보여주기 위하여 사용을 해왔습니다. 기존에는 브라우저에서만 사용해왔던 언어인데, 이제는 단순히 웹페이지에서만 국한되지 않고 Node.js 런타임을 통하여 서버 쪽에서도 사용을 할 수 있게 되었습니다. Show 추가적으로, NW.js, Electron 등의 도구를 사용하여 데스크탑 앱을 만들 수도 있고, react-native, NativeScript 등의 도구를 사용하여 모바일 앱도 만들 수 있습니다. 그리고 하드웨어에서도 Node.js 를 통하여 JavaScript 를 사용 할 수 있기 때문에 IoT 진영에서도 사용 될 수도 있죠. JavaScript 는 나날히 발전해 가고 있고, 매년마다 새로운 문법들도 나오고 있습니다. 이 강의에서는 모든 문법들을 다루지는 않습니다. 하지만, 알아두면 개발하는데 충분히 쓸모있는 만큼 학습하게 됩니다. 이번 강좌에서는 자바스크립트의 기본 문법을 배우게 됩니다. 변수 사용에서 부터 함수와 객체 까지 기본적인 문법과 최신 자바스크립트인 ES6에 포함된 새로운 문법들도 살펴보게 됩니다. 이 강의를 통해 자바스크립트 기본문법을 이해하고 간단한 프로그램을 작성 할 수 있습니다. Youtube 에서 동영상 강좌 보기 - Part1 Youtube 에서 동영상 강좌 보기 - Part2 01: 소스코드위치자바스크립트는 기본적으로 HTML 문서의 4 사이에 위치 합니다. 그러나 그 외 위치에 둘수도 있고 외부파일이나 다른 서버를 통해 참조하는 방식으로도 사용할 수 있습니다.여기서는 자바스크립트의 소스가 위치하는 몇몇 유형에 대해 살펴 봅니다. 1) 내부 자바스크립트HTML 문서 내부에 자바스크립트 소스코드를 두는 유형 입니다. 4 혹은 6 에 둘 수 있으며 양쪽에 모두 있어도 상관 없습니다.
2) 외부 JavaScriptHTML 문서 외부에 별도의 파일을 생성하고 HTML 에서 불러와 사용하는 방식 입니다. 이때 자바스크립트 파일의 위치는 HTML과 동일한 서버 혹은 외부 서버일수도 있습니다.
3) 소스파일 위치 결정브라우저는 HTML의 구조와 CSS 스타일을 렌더링하는 도중 자바스크립트를 만나게 되면 이에 대한 해석과 구현이 완료될때까지 브라우저 렌더링을 멈추게 됩니다. 즉, 자바스크립트의 삽입 위치에 따라 스크립트 실행순서와 브라우저 렌더링에 영향을 미치기 때문에 다음 사항을 고려해 적절한 위치선정이 필요 합니다. <head></head>
<body></body>
내부 자바스크립트 VS 외부 자바스크립트
02: 변수와 자료형자바스크립트는 다른 언어들과 달리 자료형이 고정되어 있지 않은 동적타입 언어 입니다. 따라서 변수를 선언할때 별도의 자료형을 명시하지 않아도 됩니다. 1) 자료형내부적으로는 Primitive(기본형)과 Object(객체형)이 있으며 각각 다음과 같습니다. Primitive
Object
Object 에 대해서는 06.함수와 객체 에서 자세히 살펴봅니다. 2) 변수 선언
var, let, const
다음은 var 를 이용한 변수선언 예 입니다.
다음은 2과 3 예 입니다.
hoisting
자바스크립트 변수에 있어 변수의 선언이 위치와 상관없이 최상위 레벨로 끌어올려진다고 이해할 수 있습니다.
경우에 따라 호이스팅은 사소한 문제를 일으키지 않아 유용할수 있으나 복잡한 코드에서는 오류 가능성이 높으므로 변수 선언시에는 var, let, const 등을 명확히 구분해서 사용하는 것이 좋다. String 변수일반적인 프로그램언어들은 문자열을 표현할때 0 를 사용하는데 반해 자바스크립트는 1 를 모두 사용할 수 있습니다.
03: 출력문자바스크립트는 HTML 문서를 통해 웹브라우저에서 출력되므로 따로 출력문이 존재한다기 보다는 HTML 문서의 구성요소에 동적으로 출력하거나 웹브라우저의 경고창을 이용해 출력하는 형태가 출력문으로 볼 수 있습니다. 물론 웹 브라우저의 콘솔창을 통해 특정 메시지를 출력할수도 있습니다. 1) HTML 문서에 출력
다음 예제는 5+6 의 연산결과를 웹브라우저에 출력 합니다.
2) HTML 문서의 특정부분에 출력
다음 예제는 앞의 예제와 비슷하지만 기존 HTML 소스를 유지하고 부분적으로 변경 됩니다. 03) Alert 창을 이용한 출력
14) 브라우저 콘솔창을 이용한 출력
보통 프로그램언어의 출력문과 가장 비슷한 경우 입니다. console.log()를 사용하며 결과 확인은 웹브라우저의 콘솔창에 나타나게 됩니다. 204: 연산자와 제어문일반적인 프로그램언어와 같이 자바스크립트도 다양한 연산자와 2 와 같은 제어문을 가지고 있습니다.1) 연산자기본적으로 다른 프로그램언어들과 유사 합니다. 비교 연산자연산자연산자 설명==값이 같은지 비교===값과 타입이 모두 같은지 비교!=같지 않음!==값이나 타입이 같지 않음>크다<작다>=같거나 크다<=작거나 크다?3항연산 (조건)? 참인경우 수행 : 거짓인경우 수행비교 연산자 목록 논리 연산자연산자연산자 설명&&AND 연산자||OR 연산자!NOT 연산자논리 연산자 목록2) 조건문C, 자바와 매우 유사합니다. if, else, switch 등이 있습니다. if, else if
3
switch
43) 반복문반복문 역시 C, 자바와 매우 유사합니다. for, while, forEach, for-in, for-of-for 등이 있습니다. for
5while
6forEach
7ES6 에서는 arrow 연산자를 통해 다음과 같이 간결하게 사용할수 있습니다. 8for-in, for-of
9 4
5
05: 배열과 자료구조기본적인 개념은 다른언어와 동일하지만 1는 다소 2가 있습니다.1) 배열배열의 선언은 3 나 4 로 생성하고 크기의 제약이 없으며 하나의 배열에 서로 다른 타입의 변수가 들어갈 수 있습니다.다음은 다양한 배열 선언 예 입니다. 0아직 자바스크립트 객체를 배우기 전이지만 배열에 5를 넣을 수 있습니다. 이를 이용하면 JSON 데이터의 집합을 만들 수 있으며 서버와의 데이터 교환에 사용할 수 있는 구조가 됩니다. 1배열의 주요 메서드
6
3
7
2) Map, SetES6 에서 새롭게 추가된 자료 구조 입니다. 기존 자바스크립트는 배열 이외의 자료구조가 따로 없었으나 이제 다른 언어들 처럼 다양한 자료구조를 사용할 수 있게 되었습니다. Map과 Set 의 기본적인 개념은 기존언어들과 동일하며 일반적인 자료구조에 대해서는 공통기초->프로그래밍언어개요 를 참고하기 바랍니다. Map
자바스크립트의 Map 은 Key:Value 쌍으로 구성된 Object와 비슷한 구조로 볼 수 있지만 다음과 같은 차이가 있습니다.
언제 Object 혹은 Map을 사용할까? 다음은 여러 유형의 Map 사용 예 입니다. 2
Set
배열과 유사하지만 다음과 같은 차이가 있습니다.
3Set 은 배열로 배열은 Set 으로 변경이 가능합니다. 배열에서 Set 으로 변환될 경우 중복된 값은 제거 됩니다. 406: 함수(Function)함수의 개념은 대부분의 프로그램 언어에서 존재하지만 특히 자바스크립트는 함수를 변수에 할당 할수 있으며 인자로 함수를 전달하거나 콜백함수를 구현하는 형태등 다양한 함수 활용을 보여주고 있습니다. 이러한 특징들과 함께 최근의 함수형 프로그래밍(FP: Functional Programming) 개념도 자바스크립트에서 지원되고 있습니다. 함수선언
5First Class Object
익명함수(Anonymous Function)
6콜백함수(Callback Function)
다음은 제곱을 구하는 함수에서 콜백함수를 호출하는 예 입니다. 콜백함수의 기능은 단순히 값을 콘솔에 출력하고 있습니다. setTimeout 함수는 일정시간 후에 동작을 정의합니다. 여기서는 200밀리초 이후 callback을 호출 하며 파라미터로 제곱값을 전달하게 되어 있습니다. 7자료구조의 값에 함수 사용
807: 객체와 클래스1) 객체(Object)
객체 리터럴을 이용한 객체 생성(JSON)
자바스크립트 객체를 단순화 해서 표현하면 6 형태의 일종의 맵 혹은 딕셔너리형태라고 할 수 있습니다. 앞에서 언급한것 처럼 객체의 값으로 함수를 사용할 수 있기 때문에 클래스와 유사한 형태가 되는 것입니다. 객체 이니셜라이저(Object Initializer)라고도 합니다.다음은 자바스크립트 객체의 사용 예 입니다. 9생성자를 이용한 객체 생성만일 클래스와 같이 구체적인 값을 가지지 않는 형태를 미리 선언하고 객체를 생성하려면 다음과 같이 생성자 함수를 정의하고 사용할 수 있습니다. 02) 클래스(Class)ES6에서 부터 지원되기 시작했으며 좀 더 객체지향 개념에 가까운 객체 사용을 가능하게 합니다. 앞에서 생성자 기반의 객체 선언을 살펴 보았는데 객체의 함수를 7 와 같이 정의 하는 방법은 사실 좋은 방법이 아닙니다.이유는 객체를 생성할때마다 동일한 함수도 매번 생성되기 때문으로 이를 효과적으로 처리하려면 함수의 경우 8 처럼 정의해 주어야 합니다만 이경우 객체 선언부와 함수 선언부가 분리 되어 코드 관리가 불편하게 됩니다.당연히 클래스를 사용하면 이런 문제점들을 해결할 수 있습니다. 클래스 구조
1다음은 클래스 문법에 따른 클래스 사용 예 입니다. 2
getter, setter
|