1) JavaScript
1-1. 자바스크립트를 왜 쓰는가?
요즘 추구하는 웹사이트의 특성 : seamless
=> 서비스들의 연결부위가 보이지 않게끔 하는 -> 매끄러운 유저경험을 만들어주는 앱
이것을 위해서는 반드시 자바스크립트를 익혀야함.
1-2. 자바스크립트는 이상하다
-
자바스크립트는 공식문서가 있을 수 없다.
- 버전이 통일되어 있지 않기 때문, 자바스크립트를 정확히 관리하는 주체가 없다.
- 주체가 없다면?
- 예전 코드가 돌아갈 수 있도록 업데이트하는게 매우 중요함.
- backward-compatability가 중요하기 때문에 파이썬 2에서 파이썬 3으로 넘어가듯이 엄청난 변화를 일으키는게 힘들기 때문에 지저분한 기능들이 많음.
-
자바스크립트의 역사
-
자바스크립트는 Netscape Browser로부터 시작함.
=> 그 안에서 브라우저를 조작할 수 있도록 하는 언어를 만들었음.
-
1차 브라우저 전쟁 : 마소가 IE가 내장된 Window OS를 공짜로 풀어버리면서 웹브라우저의 암흑기가 생김
-
- Chrome의 등장
-
크롬이 점유율이 높아지면서 자바스크립트를 표준화시키고자하는 움직임이 시작됨.
-
-
자바스크립트의 여러 표현체(엔진)가 있음 (기본적으로 브라우저를 기반으로 만들어짐.)
엔진은 컴파일러라고 생각하면 됨
- 크롬 : V8
- Firefox : SpiderMonkey
- Safari(애플) : JavaScriptCore
- IE, edge(마소) : Chakra
-
지금은 ECMA가 자바스크립트의 표준을 관리함.
=> ECMA에서 브라우저를 조작할 수 있도록 자바스크립트의 표준 규약을 만드는데,
요즘에는 크롬 V8엔진이 이러한 표준을 잘 제안하고, 여러 브라우저에서 돌아갈 수 있도록 안정화되어 있기 때문에 표준을 잘 따른다고 보면 됨.
1-3. 자바스크립트란?
-
프로그래밍 언어 : 컴퓨터를 조작하기 위한 언어
컴퓨터 : 저장과 연산을 잘하는 도구
-
자바스크립트 : 컴퓨터의 아주 일부분인 브라우저를 조작하기 위한 언어
브라우저 : 서버가 전달한 HTML로 만들어진 문서를 잘 표현해주기 위한 프로그램들.
2) JavaScript 실습
2-1. Console에서 실행해보기
-
이제는 Chrome 베이스로 자바스크립트를 생각해도 웬만한 것은 커버가 됨.
-
자바스크립트는 브라우저를 조작하는 언어이다.
-
기본값으로 웹사이트를 window라는 변수로 지칭함.
-
- 자바스크립트 : 강력한 객체지향 언어
-
window라는 변수의 정보와 메서드를 가져와서 조작할 수 있다.
ex)
window.print() // 인쇄창을 띄워줌 window.innerWidth // 실제로 가로축 길이
=> 브라우저를 객체화시켜서 조작하므로 BOM(Browser object model) 이라고도 불림.
-
물론 브라우저는 HTML문서를 잘 표현해주는 프로그램이기때문에,
브라우저 정보에는 HTML문서도 있고, window객체를 통해 조작할 수 있다.
window.document.title // title 태그의 내용을 가져옴. "JavaScript 안내서 - JavaScript | MDN" window.document.title = "이제 곧 점심시간" // 실제로 바뀜.
=> HTML문서를 객체화시키므로 DOM(Document object model) 이라고도 불림.
-
2-2. Local에서 실행해보기
-
로컬에서 자바스크립트를 실행 하려면?
=> Node라는 것을 통해서 동작시켜야한다는데.. 브라우저를 조작하기 위한 자바스크립트 문법과 크게 다르지 않다.
일단 실행은 둘째치고 작성하는법은 매우 간단하다.
<script> alert('이제 JS 공부 시작!') console.log('이건 콘솔로그') </script>
console.log라고 하면 실제로 브라우저 콘솔에 보여진다.
-
물론 HTML에 쓰는것도 가능하다!
<script> document.write('<h1>아몰랑</h1>') document.write('아몰랑') </script>
html파서는 HTML파일을 보다가 script 태그가 있으면 script를 실행해서 DOM을 변화시키거나 어떤 실행 결과를 보여준다.
2-3. HTML 문서 조작해보기
-
- document.write
-
실제로 HTML에 해당하는 문자열을 작성함.
-
document.querySelector(HTML 태그의 이름)
<script> document.write('<h1>아몰랑</h1>') document.write('<p>아몰랑</p>') ptag = document.querySelector('p') console.log(ptag) ptag.innerText = '몰랑몰랑' </script>
신기하다! 왜 몰랑몰랑이라고 바꾸기 전에 프린트를 시도했는데 몰랑몰랑이라고 프린트가 될까?
아무튼 document.querySelector는 해당하는 태그를 선택하고, innerText를 통해 태그 안쪽의 텍스트를 바꿀 수 있다.
3) 자바스크립트의 기본 문법
프로그래밍 언어에 대해서 알기 위해서는 이것들을 아는게 중요하다.
- 저장
- 무엇을(Data Type), 어디에(자료구조), 어떻게(=)
- 조작
- 조건
- 반복
3-1. 무엇을 : Data Types
-
Primitive types
-
string, number, boolean, null, undefined, symbol(이건 안다룰거임)
ex) String
const lastName = "Kim"; const firstName = "Youngrim"; const fullName = firstName + lastName let introduction = `안녕하세요 저는 ${fullName} 입니다.` // console.log(introduction) >> 안녕하세요 저는 YoungrimKim 입니다.
-
typeof로 볼 수 있다. null 타입은 예전에 없었기때문에 이상한 예외도 있다.
console.log(typeof(undefined)) >> object
-
하지만 자바스크립트는 상당히 일관적인 편이다!
파이썬에서는 원시 자료형과 사용자 정의 자료형(리스트, tuple, string…)들이 일관적이지 않는데,
자바스크립트에는 원시 자료형은 전부 immutable, 사용자 정의 자료형(object)는 전부 mutable이다!
-
-
사용자 정의 자료형(Object)
-
Object, Array, Function
이런것들 전부 다 Object이다!
-
자바스크립트에서는 Primitive types을 제외하고는 전부 Object이다!
-
3-2. 어디에
-
변수
3-2-1. 변수의 scope
기본적으로 ptag = document.querySelector(‘p’) 라고 썼는데 이건 별로 추천하지 않는다.
왜냐하면 이렇게 선언된 ptag라는 변수는 global scope를 가지기 때문이다.
-
var : functional scope
var ptag = document.querySelector('p')
예시 ) var의 문제점
var이라는 선언자로 변수를 선언하게 되면, for문이 끝나고도 i라는 변수가 살아있게됨.
=> var은 block scope가 아니기 때문에 for문 block이 끝나도 변수가 남아있어서 혼란을 일으킬 수 있다.
-
const, let : block scope
-
const : 다시 설정이 필요하지 않을 때(재사용 용이하게끔)
-
let : 다시 설정이 필요할 때
let은 var과는 달리 for문이 끝나면 변수가 사라지게 된다.
-
-
-
배열(Array)
- 자바스크립트의 메서드는 destructive하다!
reverse() 라는 메서드가 그대로 names라는 배열 원본 그자체를 바꿔줌.
- 그 외에도 push, pop, shift(맨 왼쪽꺼를 꺼냄), unshift(맨 왼쪽에 집어넣음)이라는 메서드도 있음.
- 자바스크립트는 파이썬과 달리 join을 리스트의 메서드로 지원한다.
-
Object : 파이썬의 딕셔너리와 유사함.
특이하게도, Object의 key값을 변수같이 써도 자바스크립트에서는 허용이 된다.
JSON(javascript object notation) 파일도 이름 그대로 Object와 유사하기 때문에 json parser가 이런 json파일을 object로 잘 바꿔준다.
역시 객체는 mutable이기 때문에 새롭게 key-value값을 집어넣을 수 있다!
3-3. 반복
파이썬처럼 iterator를 통해서 반복해서 원소들을 가져오는 기능은 없다고 함. 그냥 if랑 while
-
For
-
While
이렇게 while문을 쓰면 당연히 무한루프가 되는데, 이 while문이 도는 동안에는 아무런 행동도 하지 못한다.
왜냐하면 자바스크립트는 synchronous하게 작동하기 때문이다.
=> 만약 HTML페이지에 이런 이상한 코드를 적은 페이지를 고객에게 보여준다면, 고객의 사이트를 마비시킬 수 있는데, 이것을 막기 위해서 asynchronous한 자바스크립트가 개발되어있다고 한다.
3-4. 조건
if, else, else if 문으로 할 수 있다.
if (age > 30) {
console.log("아재네");
} else if (age > 20) {
console.log("어리네");
} else {
console.log("매우 어리네");
}
이런 if문에는 세미콜론은 넣어도 되고 안넣어도 되지만, 파서들이 세미콜론을 기준으로 파싱하는 경우가 많기 때문에 세미콜론을 넣는 습관을 들이는게 좋다.
3-5. 함수
함수라는 것도 뭐 특별한게 아니라, 그냥 어딘가에 저장되어있는 값(혹은 자료형)이라고 생각하면 된다.
=> 변수에 넣어서 사용가능함.
-
정식으로 호출하기
function sum(a, b) { return a + b }
이상하게도 한줄로 리턴할때는 세미콜론을 쓰지 않는게 관례라고 함.
-
익명함수를 만들어서 어느 변수에 넣어서 사용.
const sum = function(a, b) { return a + b }
-
Conventions
- 함수를 변수로 만들어서 사용하는것을 권장함.
- 변수이름은 camelCase를 선호함. (클래스를 만들때는 PascalCase를 쓰는게 좋음.)