Table of Contents
- ์ผ๋ฐ์ ์ธ ๊ฒ๋ค
- ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ
- ๋ธ๋ก ์์์ ๋ณ์ ์ ์ธ
- ์ ์ง์ ํฅ์๋ฒ(Progressive enhancement)๊ณผ ์ฐ์ํ ์ฑ๋ฅ์ ํ๋ฒ(Graceful degradation)
- FOUC(Flash Of Unstyled Content)
- ARIA(Accessible Rich Internet Applications)์ ์คํฌ๋ฆฐ๋ฆฌ๋
- CSS ์ ๋๋ฉ์ด์ ๊ณผ Javascript ์ ๋๋ฉ์ด์ ์ ์ฐจ์ด
- ๋์ผ์ถ์ฒ์ ์ฑ (Same-origin policy)๊ณผ CORS(Cross-origin resource sharing)
- ์ฝ๋ ์์กด์ฑ๊ณผ DRY์์น
- HTML
- CSS
- CSS ์ ์ฒ๋ฆฌ๊ธฐ
- Javascript
- ์ถ์์ ๊ฐ์ ๋น๊ต(Abstract equality comparison)์ ์๊ฒฉํ ๊ฐ์ ๋น๊ต(Strict equality comparison)
- ๊ณ ๊ธ ์์ธ์ฒ๋ฆฌ(Advanced exception handling)
- Event delegation
- Prototype ๊ธฐ๋ฐ ์์
- null, undefined, undeclared์ ์ฐจ์ด
- ํด๋ก์ (Closure)
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํจํด(Module pattern)
- ๋ค์ดํฐ๋ธ ๊ฐ์ฒด(Native object), ํธ์คํธ ๊ฐ์ฒด(Host object), Built-in ๊ฐ์ฒด
- ๊ธฐ๋ฅ ๊ฒ์ถ(Feature detection)๊ณผ ๊ธฐ๋ฅ ์ถ๋ก (Feature inference)
- ํธ์ด์คํ (Hoisting)
- ์ด๋ฒคํธ ํ๋ฆ(Event flow)
- document load event์ DOMContentLoaded event
- ์กฐ๊ฑด๋ถ ์ผํญ ์ฐ์ฐ์(Conditional ternary operator)
- use strict
- Call stack๊ณผ Task queue
ํ๋ก์ ํธํ๋ฉด์ ์๊ฒ ๋ ๊ฒ๋ค๊ณผ ์ฝ๋ฉํ ์คํธ๋ฅผ ํตํด ๋ฐฐ์ด ๊ฒ๋ค, ์๋ฐ์คํฌ๋ฆฝํธ&์ ์ด์ฟผ๋ฆฌ: ์ธํฐ๋ํฐ๋ธ ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ ๊ต๊ณผ์(Jon Duckett)์ JavaScript: The Good Parts(Douglas Crockford)๋ฅผ ํตํด ๊ณต๋ถํ ๊ฒ๋ค, ๊ทธ๋ฆฌ๊ณ Front-end Job Interview Questions์ ๋์์๋ ์ง๋ฌธ๋ค์ ๋ํ ๋๋ต์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๋ค.
์ผ๋ฐ์ ์ธ ๊ฒ๋ค
ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ
๋ณ์ ์ด๋ฆ์ ๋ฐ์ดํฐ ํ์
์ ์ ๋์ด๋ก ๋ถ์ด๋ ํ๊ธฐ๋ฒ์ด๋ค. ์ซ์๋ผ๋ฉด nVar
, ๋ฐฐ์ด์ด๋ผ๋ฉด aVar
์ด๋ฐ ์์ผ๋ก ๋ถ์ธ๋ค. 2015๋
๋ค์ด๋ฒ์์ ์ธํด์ญ์ ํ ๋ ์ฝ๋ฉ์ปจ๋ฒค์
์ด ํ๊ฐ๋ฆฌ์ธ ํ๊ธฐ๋ฒ + ์บ๋ฉ์ผ์ด์ค์ฌ์ ๊ทธ๋ ์ฒ์ ์ ํ๊ณ ์ฌ์ฉํ๊ธฐ ์์ํ๋๋ฐ, ์์ฆ์๋ ํ๊ฐ๋ฆฌ์ธ ํ๊ธฐ๋ฒ์ ์ง์ํ๋ค๊ณ ํ๋ค. ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์ ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค๊ณ . (์ฐธ๊ณ )
๋ธ๋ก ์์์ ๋ณ์ ์ ์ธ
Java์ ๊ฒฝ์ฐ ํ ๋ธ๋ก ์์์๋ง ์ฐ์ด๋ ๋ณ์๋ฅผ ์ฝ๋ ์์ชฝ์ ์ ์ธํ์ง ์๊ณ ๋ธ๋ก ์์ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ฝ๋๋ฅผ ํ์
ํ๊ธฐ ๋์ฑ ์ฌ์์ง๊ณ , ์ค์ฝํ๋ฅผ ์ ํํ ์ ์์ด ์์ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ var
ํ์
์ ๋ธ๋ก ์ค์ฝํ๊ฐ ์๋ ํจ์ ์ค์ฝํ๋ฅผ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋์ ์ ์ธํ๋ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์๋ค. ํ์ง๋ง let
์ด๋ const
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค. ์ด ๋์ ๋ธ๋ก ์ค์ฝํ์ด๋ค. (์ฐธ๊ณ )
์ ์ง์ ํฅ์๋ฒ(Progressive enhancement)๊ณผ ์ฐ์ํ ์ฑ๋ฅ์ ํ๋ฒ(Graceful degradation)
์ฌ์ฉ์๊ฐ ํญ์ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง๋ ์๋๋ค. ํนํ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ๋๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ตฌ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ชจ๋ ์ ๊ฒฝ์จ์ผ ํ๋ค. ์ ์ง์ ํฅ์๋ฒ๊ณผ ์ฐ์ํ ์ฑ๋ฅ์ ํ๋ฒ์ ์ต์ ๊ณผ ๊ตฌ์์ ๋์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋งํ๋ค. (์ฐธ๊ณ )
์ ์ง์ ํฅ์๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ ๊ธฐ์ ํ๊ฒฝ์์ ๋์ํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์์๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ ์ต์ ๊ธฐ์ ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฆ, ๊ตฌ์ ํ๊ฒฝ์์๋ ์ถฉ๋ถํ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ต์ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ ๋์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ๊ตฌ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ 100๋งํผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ๋ 130์ ๋์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ์น์ฌ์ดํธ๋ฅผ ๋ง๋ ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ฐ์ํ ์ฑ๋ฅ์ ํ๋ฒ์ ์ ์ง์ ํฅ์๋ฒ๊ณผ ๋ฐ๋์ด๋ค. ์ด๋ ์ต์ ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค, ๊ตฌํ ๊ธฐ์ ์ ๊ธฐ๋ฐํ ํ๊ฒฝ์์๋ ์ ์ฌํ๊ฒ ๋์ํ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ 100๋งํผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ๊ตฌ์ ๋ธ๋ผ์ฐ์ ์์๋ 50์ ๋์ ๊ธฐ๋ฅ๋ง์ ์ ๊ณตํ๊ฒ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. img ํ๊ทธ์ alt ์์ฑ์ ์ง์ ํจ์ผ๋ก์จ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ์ง ๋ชปํ๋ ํ๊ฒฝ์์ ์ด๋ฏธ์ง๋ฅผ ํ ์คํธ๋ก ๋์ฒดํ๋ ๊ฒ์ด ๋ํ์ ์ธ ์์๋ค.
FOUC(Flash Of Unstyled Content)
FOUC๋ ์ธ๋ถ์ CSS ์ฝ๋๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ ์คํ์ผ์ด ์ ์ฉ๋์ง ์์ ํ์ด์ง๊ฐ ์ ์ ๋ํ๋๋ ํ์์ด๋ค. ํนํ IE์์ ์์ฃผ ๋ฐ์ํ๋ ํ์์ผ๋ก, ์ฌ์น์ ๊ฒฝํ์ ์ ํํ๋ ์์ธ์ด ๋๋ค. FOUC๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋งํฌ์ ์ ์ฐธ์กฐ๋ ํ์ผ๋ค์ ๋ชจ์ DOM์ ์์ฑํ ๋ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ถ์ํ ์ ์๋ ๋ถ๋ถ(HTML)์ ๋จผ์ ํ๋ฉด์ ํ์ํ ๋ค, ํ๋ฉด์ ์ถ๋ ฅ๋ ๋งํฌ์ ์์์ ๋ฐ๋ผ ์คํ์ผ(CSS)์ ์ ์ฉํ๊ณ ์คํฌ๋ฆฝํธ(Javascript)๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ด๋ค.
FOUC๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ head ํ๊ทธ ์์ CSS๋ฅผ ๋งํฌํ๊ณ , @import
์ ์ฌ์ฉ์ ์์ ํด์ผ ํ๋ค. ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ head ํ๊ทธ ์์์ ๋ก๋ํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ๋ ์ ์๋ค. (ํ์ง๋ง ๋ณ๋ก ์ถ์ฒํ์ง ์๋๋ค.) ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ํด๊ฒฐ๋์ง ์๋๋ค๋ฉด FOUC๊ฐ ๋ฐ์ํ๋ ๊ตฌ์ญ์ ์จ๊ฒผ๋ค๊ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค๋น๋์ ๋ ๋ค์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. (์ฐธ๊ณ )
ARIA(Accessible Rich Internet Applications)์ ์คํฌ๋ฆฐ๋ฆฌ๋
ARIA๋ ์ ๊ทผ๊ฐ๋ฅํ ์ธํฐ๋ท ์ดํ๋ฆฌ์ผ์ด์
์ ์๋ฏธํ๋ค. ์ด๋ ์น ์ฝํ
์ธ ๋ฅผ ๊ฐ๋ฐํ ๋ ์ฅ์ ์ธ์ ์ํ ์ ๊ทผ์ฑ ํฅ์ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ARIA๋ฅผ ์ฌ์ฉํด ์น์ฌ์ดํธ์ฌ๋ฌ ๊ณณ์ ์ ๊ทผ์ฑ์ ํฅ์ํ ์ ์๋ค. ARIA๋ <html>
ํ๊ทธ์ role
์์ฑ์ ์ง์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋ฆฐ๋ฆฌ๋๊ฐ ARIA๋ฅผ ์ง์ํ๊ณ ์๋ค. ์คํฌ๋ฆฐ๋ฆฌ๋๋ ์น์ฌ์ดํธ์ ๊ตฌ์ฑ ์์๋ค์ ์ฝ์ด์ฃผ๋ ํ๋ก๊ทธ๋จ์ผ๋ก, ์๊ฐ์ฅ์ ๋ฅผ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ปดํจํฐ ํ๋ฉด์ ๋ฌด์์ด ์๋์ง ์ธ์งํ ์ ์๊ฒ ๋๋๋ค. (์ฐธ๊ณ )
CSS ์ ๋๋ฉ์ด์ ๊ณผ Javascript ์ ๋๋ฉ์ด์ ์ ์ฐจ์ด
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฉ์ธ ์ฐ๋ ๋๊ฐ ๋ฌด๊ฑฐ์ด ์์ ์ ํ๊ณ ์์ ๋ ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ์ ์ฐ์ ์์๋ฅผ ๋ฏธ๋ค๋๋ ๋ฐ๋ฉด CSS๋ ๋ ๋ฆฝ์ ์ธ ์ฐ๋ ๋๊ฐ ์ ๋๋ฉ์ด์ ์ ์ฒ๋ฆฌํด์ค๋ค. ๋๋ฌธ์ CSS ์ ๋๋ฉ์ด์ ์ ์ต์ ํ๊ฐ ์ฝ๋ค. ํ์ง๋ง ํญ์ CSS ์ ๋๋ฉ์ด์ ์ด ์ฐ์ํ ๊ฒ์ ์๋๋ค. UI ์์๊ฐ ์์ ๊ฒฝ์ฐ CSS๋ฅผ ์ฌ์ฉํ๊ณ , ์ ๋๋ฉ์ด์ ์ ์ธ๋ฐํ๊ฒ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. (์ฐธ๊ณ 1) (์ฐธ๊ณ 2)
๋์ผ์ถ์ฒ์ ์ฑ (Same-origin policy)๊ณผ CORS(Cross-origin resource sharing)
๋์ผ์ถ์ฒ์ ์ฑ ์ ํ ์ถ์ฒ์ ๋ฌธ์๊ฐ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฌธ์์ ์ํธ์์ฉํ์ง ๋ชปํ๋๋กํ๋ ์ ์ฑ ์ด๋ค. ๋ ๋ฌธ์์ ํ๋กํ ์ฝ, ํฌํธ, ํธ์คํธ๊ฐ ๊ฐ์ผ๋ฉด ๋์ผ์ถ์ฒ๋ผ๊ณ ํ๋ค. CORS๋ ์ด๋ค ์นํ์ด์ง์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํด๋น ๋๋ฉ์ธ์ด ์๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ XMLHttpRequests ์์ฒญ์ ํ์ฉํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ํต์ ํ ๋๋ง๋ค ์๋ก์ ๋ํ ์ ๋ณด๋ฅผ HTTP ํค๋๋ฅผ ์ด์ฉํด ์ ๋ฌํ๋ค. CORS๋ HTTP ํค๋์ ์ ๋ณด๋ฅผ ์ถ๊ฐํด ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์๋ก ํต์ ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ํ๋ค. CORS๋ฅผ ํตํ์ง ์์ ๊ฒฝ์ฐ, Cross-domain ์์ฒญ์ ๋์ผ์ถ์ฒ์ ์ฑ ์ ์ํด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธ์งํ๋ค. CORS๋ ๋ค๋ฅธ ์ถ์ฒ์์ ์จ ์์ฒญ์ ํ์ฉํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์ํธ๊ต๋ฅํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฒ์ด๋ค. CORS๋ W3C ๋ช ์ธ์ ํฌํจ๋์ด ์์ง๋ง IE์ ๊ฒฝ์ฐ์๋ ๋นํ์ค XDomainRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ CORS ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. (์ฐธ๊ณ 1) (์ฐธ๊ณ 2)
์ฝ๋ ์์กด์ฑ๊ณผ DRY์์น
์ด๋ค ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ์ถ๊ฐ์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ํ์๋ก ํ๊ธฐ๋ ํ๋ค. ์ด๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์์กดํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋ ํด๋น ์คํฌ๋ฆฝํธ์ ์์กด์ฑ์ด ์๋ค๊ณ ํํํ๋ค. jQuery๋ฅผ ํ์ฉํ๋ ์คํฌ๋ฆฝํธ๋ ์์กด์ฑ์ด ์๋ค๊ณ ํ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ฃผ์์ ํตํด ์์กด์ฑ์ ๋ช ์ํ๋ ๊ฒ์ด ์ข๋ค.
DRY์์น์ Donโt Repeat Yourself์ ์ค์๋ง๋ก, ์ํํธ์จ์ด ๊ฐ๋ฐ ์์น์ ๋งํ๋ค. ํ๊ตญ์ด๋ก๋ ์ค๋ณต๋ฐฐ์ ๋ผ๊ณ ํ๋ค. ๊ฐ์ ์์ ์ ์ํํ๋ ์ฝ๋๋ฅผ ๋ ๋ฒ ์์ฑํ๋ค๋ ์ด๋ฅผ ์ฝ๋ ์ค๋ณต์ด๋ผ๊ณ ํ๋๋ฐ, DRY์์น์ ์ด๋ฌํ ์ฝ๋ ์ค๋ณต์ ์ง์ํ์๋ ์์น์ด๋ค. ์ฝ๋ ์ค๋ณต์ ๋ฐ๋ ๊ฐ๋ ์ผ๋ก๋ ์ฝ๋ ์ฌ์ฌ์ฉ(Code reuse)์ด ์๋ค. ์ฝ๋ ์ฌ์ฌ์ฉ์ ๊ฐ์ ์ฝ๋๊ฐ ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ ๊ณณ์์ ํ ๋ฒ ์ด์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋งํ๋ค. ํจ์๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ข์ ์๋ก, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์๋ฅผ ํฌํผ ํจ์(Helper function)๋ผ๊ณ ํ๋ค. ์ฝ๋ ์ฌ์ฌ์ฉ์ ๊ถ์ฅํ๊ธฐ ์ํด ๊ฐ๋ฐ์๋ค์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋๋ฌธ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ฝ๋ ์ฌ์ด์ ๋ ๋ง์ ์์กด์ฑ์ ๋ง๋ ๋ค.
HTML
DOCTYPE
DOCTYPE์ ๋ฌธ์ํ์ ๋งํ๋ฉฐ, ํด๋น ๋ฌธ์๊ฐ ์ด๋ค ๋ฒ์ ์ ์ด๋ค ๋งํฌ์
์ธ์ด๋ก ๊ตฌ์ฑ๋์ด์๋์ง๋ฅผ ์๋ฏธํ๋ค. DOCTYPE์ ์ ์ธํ๋ ๊ฒ์ DTD(Dodumenttation Type Declaration)๋ผ๊ณ ํ๋ค. DTD๋ ๊ฐ ๋งํฌ์
์ ๊ฐ ๋ฒ์ ์์ ์ฌ์ฉ๊ฐ๋ฅํ ํ๊ทธ๋ ์์ฑ ๋ฑ์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ ์ต์๋จ์ ์์นํด์ผ ํ๋ค. HTML5 ์ด์ ๋ฒ์ ์ SGML(Standard Generalized Markup Language)์ ๊ธฐ๋ฐํ๊ธฐ ๋๋ฌธ์ DTD ์ฐธ์กฐ๊ฐ ํ์์ ์ด์๋ค. HTML5๋ DTD ์ฐธ์กฐ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ, ํ์ ํธํ์ ์ํด <!DOCTYPE html>
๋ง์ผ๋ก ์ ์ธํ๋ค. (์ฐธ๊ณ )
ํ์ค๋ชจ๋(Standard mode)์ ํธํ๋ชจ๋(Quirks mode)
ํ์ค๋ชจ๋์ ํธํ๋ชจ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง ๋ ๊ฐ์ง ๋ ๋๋ง ๋ชจ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ DTD์ ๋ฐ๋ผ ๋ ๋๋งํ ๋ชจ๋๋ฅผ ์ ํํ๋๋ฐ, ์ด ๊ณผ์ ์ Doctype sniffing๋๋ Doctype switching์ด๋ผ๊ณ ํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฌธ์๊ฐ ์ต์ ์ด๋ผ๋ฉด W3C๋ IETF์ ํ์ค์ ์๊ฒฉํ ์ค์ํ๋ ํ์ค๋ชจ๋๋ก ๋ ๋๋ง์ ํ๋ค. ๋ฐ๋ฉด ๋ฌธ์๊ฐ ์ค๋๋ ๋ฒ์ ์ด๋ผ๋ฉด ํธํ๋ชจ๋๋ก ๋ ๋๋งํ๋ค. ํธํ๋ชจ๋๋ ์ด์ ์ธ๋์ ๋ธ๋ผ์ฐ์ ์ ๋ง๋ ๋นํ์ค ๊ท์น์ ๋ฌธ์์ ์ ์ฉํด ์ค๋๋ ์นํ์ด์ง๋ค์ด ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๊นจ์ ธ๋ณด์ด์ง ์๊ฒ ํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ฌธ์๊ฐ ์ต์ ์ธ์ง ์๋์ง๋ฅผ DTD๋ก ํ๋จํ๋ค. ๋ง์ฝ DTD๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ ์ผ๋ถ๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ ํธํ๋ชจ๋๋ก ๋ฌธ์๋ฅผ ํด์ํ๋ค. ๋ํ IE์ ๊ฒฝ์ฐ DTD ์์ ์ฃผ์์ด๋ ๋ค๋ฅธ ๋ฌธ์๊ฐ ๋ค์ด๊ฐ์ ๋๋ ๋ฌธ์๋ฅผ ํธํ๋ชจ๋๋ก ํด์ํ๋ค. (์ฐธ๊ณ )
XML๊ณผ XHTML
XML๊ณผ XHTML๋ชจ๋ ์น ๋ฌธ์ ๊ท๊ฒฉ์ด๋ค. XML์ W3C์์ ์ฌ๋ฌ ํน์ ๋ชฉ์ ์ ๋งํฌ์ ์ธ์ด๋ฅผ ๋ง๋๋ ์ฉ๋์์ ๊ถ์ฅ๋๋ ๋ค๋ชฉ์ ๋งํฌ์ ์ธ์ด๋ค. XML์ ๋ฌธ์ ์์ ๋ฐ์ดํฐ ์ด๋ฆ๊ณผ ๊ฐ ๋ฑ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋๋ฐ, XML์ SGML(์ฐธ๊ณ ๋ก SGML์ ์ธํฐ๋ท์ด ๋ฑ์ฅํ๊ธฐ ์ด์ ์ ๋ง๋ค์ด์ก๋ค.)์ ๊ธฐ๋ฐ์ผ๋กํ HTML์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ์ฌ XHTML์ ์ด๋์๋ค. XML์ ๊ธฐ๋ฐ์ผ๋ก ํ HTML์ ๋ง๋ ์ ์ด๋ค. XHTML์ XML์ ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋ฉฐ, HTML ๋ฌธ๋ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ์ง๋ง ๋ ์๊ฒฉํ๋ค.
XHTML์ด ๋ ํ์ค์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค ๊ทธ๋ ๊ฒ ๊ถ์ฅํ์ง ์๋ ์ฌ๋๋ค๋ ์๋ค. ์ผ๋จ HTML์ ํธํ์ฑ์ด ๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค. XHTML์ 1.1๋ฒ์ ๋ถํฐ ๋นํ์ค์ด๋ ๋น๊ถ์ฅ ํ๊ทธ๋ฅผ ํธํํ์ง ๋ชปํ๊ฒ ๋๋ฉด์ ์ง๋์น๊ฒ ์๊ฒฉํ๋ค๋๋ ๋นํ์ ๋ฐ์๋ค. IE๊ฐ XHTML์ ํด์ํ์ง ๋ชปํ๋ ๊ฒ ์ญ์ XHTML์ ํธํ์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ ์์ธ์ด ๋๋ค. ๋ํ XHTML๊ณผ HTML์ ์์์ ์์ฑ์๋ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์๋ค. ๋จ์ง HTML์์๋ <br>
๋ก ์จ๋ ๋์ง๋ง XHTML์์๋ ๋ฐ๋์ <br/>
๋ก ์จ์ผํ๋ค๋ ์ ๋์ ๋ฌธ๋ฒ์ด ๋ค๋ฅผ ๋ฟ์ด๋ค. ์ด๋ฐ ์ ์์ ๊ตณ์ด XHTML์ ์จ์ผํ ๊ธฐ์ ์ ์ด์ ๋ ์๋ค๋ ๊ฒ์ด๋ค. ํํธ HTML5๊ฐ ๋ฐํ๋๋ฉด์ XHTML์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๊ณ ์๋ค. (์ฐธ๊ณ )
data-* ์์ฑ
HTML5์์ ์๋ก ์ถ๊ฐ๋ data- ์์ฑ์ ์ปค์คํ
๋ฐ์ดํฐ ์์ฑ์ผ๋ก, ๊ฐ๋ฐ์๊ฐ ์์๋ก ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ ์์ฑ์ด๋ค. data- ์์ฑ์ <html>
ํ๊ทธ ์์์ ๋ณ๋ค๋ฅธ ์์ฉ์ ํ์ง ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฑฐ๋ ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด์ผ ํ ๋ ์ฌ์ฉ๋๋ค. (์ฐธ๊ณ )
Cookie, sessionStorage, localStorage
์ฟ ํค(Cookie), ์ธ์ ์ ์ฅ์(sessionStorage), ๋ก์ปฌ ์ ์ฅ์(localStorage)๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ณต๊ฐ๋ค์ด๋ค. HTML5 ์ด์ ์๋ ์ฟ ํค๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ํ์ง๋ง ์ฟ ํค๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ณ , ๋์ผํ ๋๋ฉ์ธ์ ํ์ด์ง๋ฅผ ์์ฒญํ ๋๋ง๋ค ์๋ฒ๋ก ํจ๊ป ์ ์ก๋๋ฉฐ, ๋ณ์กฐ๊ฐ ์ฌ์ ๋ณด์์ด ์ทจ์ฝํด์ง๋ค. ๊ทธ๋์ HTML5๋ถํฐ๋ ์ ์ฅ์ ๊ฐ์ฒด(Storage object)๋ฅผ ์ ์ํ๊ณ ์๋ค. ์ ์ฅ์ ๊ฐ์ฒด๋ ์ธ์ ์ ์ฅ์์ ๋ก์ปฌ ์ ์ฅ์ ๋ ๊ฐ์ง๋ฅผ ์ ๊ณตํ๋ค. ๋ก์ปฌ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฅํ๋ฉด ์ฐฝ์ด๋ ํญ์ ๋ซ์์ ์ธ์ ์ด ์ข ๋ฃ๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์กด๋๊ณ , ์ด๋ ค ์๋ ๋ชจ๋ ์ฐฝ์ด๋ ํญ์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค. ์ธ์ ์ ์ฅ์๋ ๋ฐ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ์ ์ฅ์์ 5mb ์ ๋์ ๊ณต๊ฐ์ ํ ๋นํ๋ฉฐ, ๋ฐ์ดํฐ๋ ํค-๊ฐ ์(KVP; Key-Value Pair)์ ์ด์ฉํ๋ ์ ์ฅ์ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ์ ์ฅ๋๋ค. ๋ํ ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋์ผ์ถ์ฒ์ ์ฑ ์ ์๊ฑฐ, ์๋ก ๋ค๋ฅธ ํ์ด์ง๋ ๊ฐ์ ๋๋ฉ์ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ์ ํํ๊ณ ์๋ค. (์ฐธ๊ณ 1) (์ฐธ๊ณ 2) (์ฐธ๊ณ 3)
script ํ๊ทธ์ async์ defer
<script>
ํ๊ทธ์ async
์์ฑ๊ณผ defer
์์ฑ์ด ์ถ๊ฐ๋ ๊ฒ์ HTML5๋ถํฐ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์น ๋ฌธ์์์ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ค๋ <script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ๋ด๋ ค๋ฐ์ ํด์ํ๊ณ ์คํํ ๋๊น์ง HTML ์ฝ๋ ํ์ฑ ์์
์ ๋ค๋ก ๋ฏธ๋ฃฌ๋ค. ๊ทธ๋์ ๋ฌด๊ฑฐ์ด ์คํฌ๋ฆฝํธ ๋ฌธ์๋ฅผ ํด์ํ ๋๋ ํ์ด์ง ์ ์ฒด๊ฐ ๋๋ ค์ง๋ ํ์์ด ๋ฐ์ํ๋ค. ๊ทธ๋ฐ๋ฐ <script>
ํ๊ทธ์ async
๋ defer
์์ฑ์ ์ง์ ํ๋ฉด ๋งํฌ์
์ฝ๋ ์์
์ ์ค๋จํ์ง ์๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๋์์ ๋ด๋ ค๋ฐ๊ฒ ๋๋ค. defer
๋ ๋งํฌ์
ํ์ฑ์ ๋ง์น ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉฐ, async
๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ด๋ ค๋ฐ๋ ์ฆ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค. (์ฐธ๊ณ )
Progressive rendering
Progressive rendering์ ์ฝํ ์ธ ๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ฉด์ ๋ ๋๋งํ๋ ๊ธฐ๋ฒ์ด๋ค. ๋ธ๋ก๋๋ฐด๋ ์ธํฐ๋ท์ด ๋ฑ์ฅํ๊ธฐ ์ ์ ๋งค์ฐ ์ค์ํ ๊ธฐ์ ์ด์๊ณ , ๋ชจ๋ฐ์ผ ํ๋ซํผ์ ๊ณ ๋ คํ๋ค๋ฉด ์ฌ์ ํ ๋ฌด์ํ ์ ์๋ ๋ถ๋ถ์ด๋ค. ๊ฐ์์์ญ์ ์ด๋ฏธ์ง๋ง ๋ก๋ฉํด์ฃผ๋ jQuery ํ๋ฌ๊ทธ์ธ Lazy loading์ด ์ข์ ์๋ค. (์ฐธ๊ณ )
CSS
Reset CSS
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ํต์ผ๋ ํ๋ฉด์ ๋ณผ ์ ์๋๋ก CSS์ ๊ธฐ๋ณธ๊ฐ์ ์ด๊ธฐํํ๋ ๊ฒ์ ๋งํ๋ค. Eric Meyerโs Reset๊ณผ Normalize.css๊ฐ ์ฃผ๋ก ์ฐ์ธ๋ค.
BFC(Block Formatting Context)์ IFC(Inline Formatting Context)
๋ชจ๋ HTML ์์๋ ์ฌ๊ฐํ ๋ฐ์ค ํํ๋ฅผ ์ทจํ๊ณ ์๋ค. ๋ฐ์ค๋ Box-model์ด๋ผ๋ ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์๋ค. CSS์์์๋ display
๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๋ ๋ธ๋ก(Block)๊ณผ ์ธ๋ผ์ธ(Inline) ๋ ๊ฐ์ง ๊ฐ์ ๊ฐ์ง ์ ์๋ค. block
์ ๋ธ๋ก ๋ ๋ฒจ ์์(Block-level elements)๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ธ๋ก ๋ ๋ฒจ ์์๋ BFC์ ์ํ๋ ๋ฐ์ค์ด๋ค. ๋ธ๋ก ๋ ๋ฒจ ์์ ๋ฐ์ค๋ ์์ง์ผ๋ก ๊ณ์ ์์ธ๋ค. inline
์ ์ธ๋ผ์ธ ๋ ๋ฒจ ์์(Inline-level elements)๋ฅผ ์๋ฏธํ๋ค. ์ธ๋ผ์ธ ๋ ๋ฒจ ์์๋ ์ธ๋ผ์ธ ๋ ๋ฒจ ๋ฐ์ค๋ฅผ ์์ฑํ๋ฉฐ, ์ด๋ IFC์ ์ํ๋ค. ์ธ๋ผ์ธ ๋ ๋ฒจ ์์ ๋ฐ์ค๋ ์ํ์ผ๋ก ๊ณ์ ์์ธ๋ค. ๋ํ ์ธ๋ผ์ธ ๋ ๋ฒจ ๋ฐ์ค์ border
๋ padding
์ด ๋์ ๋ณด์ด๋๋ผ๋ ์ฌ์ค์ line-height
์ ์ํด ๋์ด๊ฐ ์กฐ์ ๋๋ค. inline-block
์ ํน์ดํ๋ฐ, ์ด ์์๋ ์ธ๋ผ์ธ ์์์ฒ๋ผ ์ํ์ผ๋ก ์์ด์ง๋ง ๋ธ๋ก ๋ ๋ฒจ ์์์ ๋ฐ์ค์ฒ๋ผ ๋์ด๋ฅผ ๊ณ์ฐํ๋ค. ์ฆ line-height
์ ์์กดํ์ง ์๋๋ค. (์ฐธ๊ณ )
ํด๋ฆฌ์ด๋ง(Clearing) ๊ธฐ์
ํด๋ฆฌ์ด๋ง์ float
์์ฑ์ด ์ฃผ๋ณ ์์์ ๋ฐฐ์น์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋กํ๋ ๊ฒ์ด๋ค. float
์์ฑ์ ๊ฐ์ง ์์๋ ์์ ์ ์์น๋ฅผ ์ฃผ๋ณ ์ฝํ
์ธ ๋ก๋ถํฐ ์๋์ ์ผ๋ก ๋ฐฐ์นํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฝํ
์ธ ๊ฐ ๊ทธ ์ฃผ์๋ก ํ๋ฅด๊ฒ ๋๋ค. ํด๋ฆฌ์ด๋ง๋ฅผ ํตํด ์ด๋ฅผ ๋ฐฉ์งํ ์ ์๋๋ฐ, ์ฌ๊ธฐ์๋ 4๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
์ฒซ ๋ฒ์งธ๋ float
์ float
์ผ๋ก ๋์ํ๋ ๊ฒ์ด๋ค. ์์ ์์ ๋ฟ๋ง ์๋๋ผ ๋ถ๋ชจ ์์์๊ฒ๋ float
์์ฑ์ ์ง์ ํ๋ฉด ๋ถ๋ชจ ์์๊ฐ ์์ ์์์ ๋์ด๋ฅผ ๋ฐ์ํ๋ค. ๋จ, ์ด๋ ๊ฒ ํ๋ฉด ๋ถ๋ชจ ์์์ ๋๋น๊ฐ ์์ ์์๋ฅผ ๋ด์ ์ ๋๋ก ์ค์ด๋ ๋ค.
๋ ๋ฒ์งธ๋ float
์ overflow
์์ฑ์ผ๋ก ๋์ํ๋ ๊ฒ์ด๋ค. ์์ ์์์ ๋์ด๋ฅผ ๋ถ๋ชจ์๊ฒ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ถ๋ชจ ์์์ overflow
์์ฑ์ auto
๋๋ hidden
๊ฐ์ ๋ถ์ฌํ๋ค. ํ์ง๋ง auto
๊ฐ์ ๊ฒฝ์ฐ ์์ ์์๊ฐ ๋ถ๋ชจ ์์๋ณด๋ค ํด ๋ ์คํฌ๋กค๋ฐ๊ฐ ์๊ธฐ๋ฉฐ, hidden
๊ฐ์ ๊ฒฝ์ฐ ๋์น๋ ๋ถ๋ถ์ด ์๋ ค๋ฒ๋ฆฐ๋ค.
์ธ ๋ฒ์งธ๋ก float
์ ๋น ์๋ฆฌ๋จผํธ๋ก ํด๋ฆฌ์ด๋งํ ์๋ ์๋ค. float
์ด ์ง์ ๋ ์์ ๋ค์ ๋น ์์๋ฅผ ์ถ๊ฐํ๊ณ ๋น ์์์ clear
์์ฑ์ both
๊ฐ์ ๋ถ์ฌํ๋ ๊ฒ์ธ๋ฐ, ์๋ฏธ์๋ ์์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๊ถ์ฅํ์ง ์๋๋ค.
๋ง์ง๋ง์ผ๋ก float
์ ๊ฐ์ ์ ํ์ :after
๋ก ํด๋ฆฌ์ด๋งํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๊ฐ์ ์ ํ์๋ ๊ฐ์ ํด๋์ค(pseudo-class)์ ๊ฐ์ ์์(pseudo-element)๋ก ๋๋๋ค. ๊ฐ์ ํด๋์ค๋ ํน์ ์์์ ์๋ฌด๋ฐ class๋ฅผ ๋ถ์ฌํ์ง ์์์ง๋ง ๋ง์น class๋ฅผ ๋ณ๊ฒฝํ ๊ฒ๊ณผ ๊ฐ์ ์ญ๋์ ์ธ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ ๊ฒ๋ค์ด๋ค. :hover
, :active
, :focus
๋ฑ์ด ์ฌ๊ธฐ์ ์ํ๋ค. ๊ฐ์ ์์๋ ์กด์ฌํ์ง ์๋ ์์๋ฅผ ๊ฐ์์ผ๋ก ์์ฑํ๋ ์ ํ์๋ค. :first-line
, :before
, :after
๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค. ๊ฐ์ ์์๋ HTML ๋ฌธ์์ ์กด์ฌํ์ง ์๋ ์ฝํ
์ธ ๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ ํ๋ค. ์ด๋ ๊ฒ ๊ฐ์ ์์๋ฅผ ์์ฑํ ๋ค์ display: block; clear: both;
์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๊น๋ํ๊ฒ ํด๋ฆฌ์ด๋ง์ ํ ์ ์๋ค. ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Image Replacement
์์๋ฅผ ์ด๋ฏธ์ง๋ก ๊ต์ฒดํ๋ ๊ธฐ๋ฒ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๋๋ค:
.elements {
background-image: url("image.png");
}
๊ทธ๋ฆฌ๊ณ A History of CSS Image Replacement์์ ๋ ๋ง์ ์์๋ฅผ ๋ณผ ์ ์๋ค.
IE box model๊ณผ W3C box model์ ์ฐจ์ด
๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ๋ฐ์ค ๋ชจ๋ธ์ด ๋ฌ๋ผ ์์์ ์ง์ ๋ ๋๋น์ ๋์ด๊ฐ ๊ฐ์๋ ์๋ก ๋ค๋ฅด๊ฒ ๋ ๋๋ง๋๋ค. ๋ฐ์ค ๋ชจ๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก margin
, border
, padding
, content
๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
W3C์ ํ์ค ๋ฐ์ค ๋ชจ๋ธ์ ์ฝํ
์ธ ์ ๋๋น, ๋์ด๋ง์ width
์ height
๋ก ๊ณ์ฐํ๋ ๋ฐ๋ฉด, IE์ ๋ฐ์ค ๋ชจ๋ธ์ ์ฝํ
์ธ ์ padding
, border
๋ฅผ ํฌํจํ ๋๋น์ ๋์ด๋ฅผ width
, height
๋ก ๊ณ์ฐํ๋ค. ์ด๋ฅผ ์ํ ํด๊ฒฐ์ฑ
์ (1)DTD๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฟฝ์ค ๋ชจ๋๋ก ๋์ํ์ง ์๋๋ก ํ๊ฑฐ๋ (2)wrapper ์์๋ฅผ ์ฌ์ฉํด wrapper ์์์ width
, height
๊ฐ์ ํ ๋นํ๊ณ ๋ด๋ถ ์๋ฆฌ๋จผํธ์ padding
, border
๊ฐ์ ํ ๋นํ๊ฑฐ๋ (3)Conditional comment๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ (3)css hack์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. (์ฐธ๊ณ )
๊ทธ๋ฆฌ๋ ์์คํ (Grid system)
๋ฐ์ํ ์นํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์์ฃผ ์ฐ์ด๋ ๊ธฐ์ ์ด๋ค. ํ์ด์ง ์์ ๊ฒฉ์๋ฅผ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ์์๋ฅผ ๊ทธ ์์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ธฐ์ ์ ์ธ ์ด์ ๋ง์ด ์๋๋ผ ๋์์ธ์ ์ธ ์ด์ ๋ก๋ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๋ ๋ ์ด์์์ CSS๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์๋ค. ์ฝ๊ฒ ๊ทธ๋ฆฌ๋ ์์คํ ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ถํธ์คํธ๋ฉ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
CSS ์ ์ฒ๋ฆฌ๊ธฐ
CSS ๋ฌธ์๊ฐ ๋ฐฉ๋ํด์ง์ ๋ฐ๋ผ ์์ ํจ์จ์ ๋์ด๊ธฐ ์ํด ๋ฑ์ฅํ ๊ธฐ์ ์ด๋ค. ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด CSS ์์ ๋ฐ๋ณต์ ์ธ ๋ถ๋ถ์ ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ก ์ฒ๋ฆฌํ ์ ์๊ณ , ๋ค์ํ ์ฐ์ฐ์ด ๊ฐ๋ฅํด์ง๋ค. Less๋ Sass๊ฐ ๋ํ์ ์ธ CSS ์ ์ฒ๋ฆฌ๊ธฐ์ด๋ค.
@bgColor: #DFDFDF;
body {
background-color: @bgColor;
}
์๋ Less์ ์์๋ค. ์ปดํ์ผ์ ํ๋ฉด body
์ background-color
๊ฐ์ด #DFDFDF
๋ก ์นํ๋ CSS ์ฝ๋๋ฅผ ์ป์ ์ ์๋ค.
๋ฐ์ํ ๋์์ธ(Responsive design)๊ณผ ์ ์ํ ๋์์ธ(Adaptive design)
๋ฐ์ํ ๋์์ธ์ ๋์คํ๋ ์ด์ ๋๋น์ ๋ฐ๋ผ ๋ ์ด์์์ ๋ณํ์ํค๊ณ , ์ ์ํ ๋์์ธ์ ๊ณ ์ ์ ๋ ์ด์์์ ๊ฐ์ง๋ค. ๋ฐ์ํ ์น์ด ๋ฏธ๋์ด์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์คํ์ผ ๋ถ๊ธฐ๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ด๋ผ๋ฉด ์ ์ํ ์น์ ๋๋ฐ์ด์ค๋ฅผ ์ฒดํฌํด ๊ทธ ๋๋ฐ์ด์ค์ ์ต์ ํ๋ ๋งํฌ์ ์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ด๋ค. (์ฐธ๊ณ )
Javascript
์ถ์์ ๊ฐ์ ๋น๊ต(Abstract equality comparison)์ ์๊ฒฉํ ๊ฐ์ ๋น๊ต(Strict equality comparison)
์ถ์์ ๊ฐ์ ๋น๊ต(==
)๋ ๋ ๋ณ์๋ฅผ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ผ๋ก ๋ณํํ ๋ค์ ๊ฐ์ ๋น๊ตํ๋ ๋ฐ๋ฉด, ์๊ฒฉํ ๊ฐ์ ๋น๊ต(===
)๋ ๋ ๋ณ์์ ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์
์ ํจ๊ป ๋น๊ตํ๋ค. ๋ฐ๋ผ์ ๊ฐ๊ณผ ํ์
์ด ์์ ํ ์ผ์นํด์ผ true
๋ฅผ ๋ฐํํ๋ค. ์๊ฒฉํ ๊ฐ์ ๋น๊ต๋ฅผ ์ฌ์ฉํ ๋น๊ต ๊ฒฐ๊ณผ๋ ์์ธก์ด ์ฝ๊ณ ํ์
๊ฐ์ ๊ฐ ์ผ์ด๋์ง ์๊ธฐ ๋๋ฌธ์ ์ถ์์ ๊ฐ์ ๋น๊ต๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ซ๋ค. (์ฐธ๊ณ )
๊ณ ๊ธ ์์ธ์ฒ๋ฆฌ(Advanced exception handling)
try...catch
์ throw
๋ก ๊ณ ๊ธ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ํ๋ ์ค๋ฅ๋ ์์ธ(Exception)์ด๋ผ๊ณ ํ๋ฉฐ, ์ฝ๋์ ๋ฌธ๋ฒ์ ์ค๋ฅ๋ ์๋ฌ(Error)๋ผ๊ณ ํ๋ค. try...catch
๋ ๊ตฌ๋ ์ค ์ฝ๋์์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ค์ ์ก์์ค๋ค.
try {
// try ๋ธ๋ก์ ์์ธ๊ฐ ๋ฐ์ํ ์๋ ์๋ ๋ถ๋ถ
} catch(e) {
// catch ๋ธ๋ก์ try ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋๋ ๋ถ๋ถ
// ๊ฐ์ฒด e๋ name๊ณผ message ์์ฑ์ ๊ฐ์ง
} finally {
// ์ ํ์ ์ผ๋ก finally ๋ธ๋ก์ ์ถ๊ฐํ ์ ์์
// ์์ธ ๋ฐ์ ์ฌ๋ถ๋ฅผ ๋ ๋ ๋ฌด์กฐ๊ฑด ์คํ๋์ด์ผ ํ ๋ถ๋ถ
}
throw
๋ฌธ์ ๊ฐ์ ๋ก ์์ธ๋ฅผ ๋ฐ์์ํฌ ๋ ์ฌ์ฉํ๋ค. throw
์ ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค:
throw expression;
ํํ์์ ๊ฐ์ ์ซ์, ๋ฌธ์ ๋ฑ ์ด๋ค ๊ฒ์ด๋ ์๊ด์๋ค. throw
๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด catch
๋ธ๋ก์ผ๋ก ์ด๋ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค:
try {
if(a > 100) {
throw "Value too high";
}
} catch(e) {
alert(e);
}
Event delegation
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ DOM ์ ์ฅ์์๋ ๋ถ๋ด์ค๋ฌ์ด ์ผ์ด๋ฉฐ, ๋ฆฌ์์ค๋ฅผ ์๋นํ ์ก์๋จน๋ ์์ ์ด๋ค. ๊ทธ๋์ ์์ ํ๋ํ๋์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ ๋์ ์์์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค. ์์ ์์๋ค์ ๊ฐ์ผ ๋ถ๋ชจ ์์์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํด ์ด๋ฒคํธ๋ฅผ ์์ํ๋ฉด ๊ฐ๊ฐ์ ์์ ์์๋ค์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค. ์ด๋ฒคํธ๋ฅผ ์์ํ๋ฉด ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ ์ ์์ ๋ฟ๋ง ์๋๋ผ DOM ํธ๋ฆฌ์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ์ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ด์ง๊ณ , ์ฝ๋์ ์์ ์ค์ผ ์๋ ์๋ค. ๋ค์์ ul ์์์ ์์ ์์์ธ li ์์๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น li ์์๊ฐ ์ฌ๋ผ์ง๋ ์ฝ๋์ด๋ค.
<ul id="todoList">
<li>TODO: A</li>
<li>TODO: B</li>
<li>TODO: C</li>
</ul>
์์ฃผ ํ๋ฒํ ๋ฆฌ์คํธ์ด๋ค.
function getTarget(e) {
if(!e) { // event ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด
e = window.event; // IE์ event ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
}
return e.target || e.srcElement; // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ฅผ ๊ฐ์ ธ์ด
}
function itemDone(e) {
var elTarget, elParent;
elTarget = getTarget(e); // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์ ๊ฐ์ ธ์ด (li)
elParent = target.parentNode; // ํด๋น ์์์ ๋ถ๋ชจ ์์๋ฅผ ๊ฐ์ ธ์ด (ul)
elParent.removeChild(elTarget); // ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ฅผ ์ ๊ฑฐํจ (li)
}
(function(){
var el = document.getElementById('todoList');
if(el.addEventListener) { // ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ง์๋๋ฉด
el.addEventListener('click', function(e) { // ํด๋ฆญ ์ด๋ฒคํธ์ ๋ฆฌ์ค๋๋ฅผ ์ง์
itemDone(e);
}, false); // ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ฌ์ฉ
} else { // ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ง์๋์ง ์์ผ๋ฉด
el.attachEvent('onclick', function(e) { // IE์ onclick ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉ
itemDone(e);
}
});
})();
IE๊น์ง ๊ณ ๋ คํ ์ฝ๋๋ค. ํ๋์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ์์ 3๊ฐ๋ฅผ ์ ์ดํ๊ณ ์๋ค๋ค. jQuery๋ ๋ณด๋ค ํธํ๊ฒ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์๋๋ก .delegate()
๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
Prototype ๊ธฐ๋ฐ ์์
์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋์ค๋ผ๋ ๊ฐ๋ ์ด ์๊ธฐ ๋๋ฌธ์ ํ๋กํ ํ์ (Prototype)์ด ํด๋์ค๋ฅผ ๋์ ํด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์ ๋งก๋๋ค. ๋ค๋ง ES6๋ถํฐ ํด๋์ค ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ํ๋กํ ํ์ ์ ์ง์ ์ ๊ทผํ ํ์๊ฐ ์์ด์ก๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ OOP๋ ์ง์ ํ OOP๊ฐ ์๋๊ฐ?๋ฅผ ์ฐธ๊ณ ํด๋ณด์. ๊ทธ๋๋ ํํ ๋กํ์ ์ ์ฌ์ ํ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ์์๋๋ ๊ฒ์ด ์ข๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด ํ๋กํ ํ์ ์ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด์งํฅ ์ธ์ด์์ ์ฐ์ด๋ ํด๋์ค๋ฅผ ๊ตฌํํ ์ ์๋ค.
function Player() {
this.hp = 100;
this.mp = 50;
}
var kim = new Player();
var park = new Player();
console.log(kim.hp); // 100
console.log(kim.mp); // 50
console.log(park.hp); // 100
console.log(park.mp); // 50
kim
๊ณผ park
์ hp
์ mp
๋ฅผ ๊ฐ๊ฐ 100, 50์ฉ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ฝ ๊ฐ์ฒด๋ฅผ 100๊ฐ ๋ง๋ค๋ฉด 200๊ฐ์ ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค. ํ๋กํ ํ์
์ ํ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์ ์๋ค.
function Player() {}
Player.prototype.hp = 100;
Player.prototype.mp = 50;
var kim = new Player();
var park = new Player();
kim
๊ณผ park
์ ํ๋กํ ํ์
์ ์ฐ๊ฒฐ๋ Player
๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค. hp
์ mp
๋ฅผ kim
๊ณผ park
์ด ๊ณต์ ํ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋งค์ปค๋์ฆ์ผ๋ก ํ๋กํ ํ์
์ ์ด์ฉํด ์์์ ๊ตฌํํ ์ ์๋ค. (์ฐธ๊ณ 1) (์ฐธ๊ณ 2)
null, undefined, undeclared์ ์ฐจ์ด
์ด๊ฑด ์ข
์ข
ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. null
์ ์ด๋ ํ ๊ฐ๋ ๊ฐ๋ฆฌํค์ง ์๋๋ค๋ ์๋ฏธ์ ์์๊ฐ์ด๋ค. ๋ณ์๋ฅผ ์ ์ธํ๊ณ null
์ ํ ๋นํ ๊ฒฝ์ฐ ํด๋น ๋ณ์๊ฐ ์ด๋ ํ ๊ฐ๋ ๊ฐ์ง์ง ์์๋ค๋ ์๋ฏธ๊ฐ ๋๋ค. undefined
๋ ๋ณ์๊ฐ ์ ์ธ๋์ง๋ง ๊ฐ์ด ํ ๋น๋์ง ์์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฐ์ด๋ค. ์ฆ, null
์ ๊ฐ๋ฐ์๋ก๋ถํฐ ํ ๋น๋๋ ๊ฐ์ด๊ณ , undefined
๋ ์์ ํ ๋น์ ํ์ง ์์ ์ํ๋ค. undeclared
๋ ๋ณ์ ์์ฒด๊ฐ ์ ์ธ๋์ง ์์๋ค๋ ์๋ฏธ๋ค. ์ฝ์์์๋ undefined
์ ๋๊ฐ์ด ํ๊ธฐ๋๊ธฐ ๋๋ฌธ์ ๋ณ์๊ฐ ์ด๊ธฐํ๋์ง ์์๋ค๋ ๊ฒ์ธ์ง, ์์ ์ ์ธ๋์ง ์์๋ค๋ ๊ฒ์ธ์ง ํ์ธํ ํ์๊ฐ ์๋ค.
ํด๋ก์ (Closure)
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์ ์์ ๋ ๋ค๋ฅธ ํจ์๋ฅผ ์ ์ธํ ์ ์๋๋ฐ, ํจ์ ์์ ํจ์์ธ ๋ด๋ถํจ์(inner function)๋ ์ธ๋ถํจ์(outer function)์ ์ง์ญ๋ณ์์ ์ ๊ทผํ ์ ์๋ค. ์ธ๋ถํจ์์ ์คํ์ด ๋๋์ ์ธ๋ถํจ์๊ฐ ์๋ฉธ๋ ์ดํ์๋ ๋ด๋ถํจ์๋ ์ธ๋ถํจ์์ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ํด๋ก์ ๋ผ๊ณ ํ๋ค. MDN์ ํด๋ก์ ๋ฅผ ํ์ฉํ ์ฌ๋ฐ๋ ์์ ๊ฐ ์๋ค:
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
์ฌ๊ธฐ์ makeAdder(x)
๋ x
๋ฅผ ์ธ์๋ก ๋ฐ์์ ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐํ๋๋ ๋ด๋ถ ํจ์๋ y
๋ฅผ ์ธ์๋ก ๋ฐ์ x + y
๋ฅผ ๋ฐํํ๋ค. (์ฐธ๊ณ 1) (์ฐธ๊ณ 2)
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ํจํด(Module pattern)
๋ชจ๋ ํจํด(Module pattern)์ ์ฝ๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ๋งํ๋ค. ์ฌ๊ธฐ์๋ ๊ฐ์ฒด๋ฅผ public๊ณผ private์ผ๋ก ๋๋๋ ์บก์ํ๊ฐ ํต์ฌ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ public์ด๋ private์ ๊ฐ์ ์ ๊ทผ ์ ํ์๋ฅผ ์ ๊ณตํ์ง ์์ง๋ง, ํด๋ก์ ๋ฅผ ์ด์ฉํด ๊ตฌํํ ์ ์๋ค. private method๋ ์ฝ๋ ์ ๊ทผ์ ์ ํํ ์ ์์๋ฟ๋ง ์๋๋ผ ์ถ๊ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ด๋ฆ์ด ์ถฉ๋ํ๋ ๊ฒ์ ๋ง์ ์ ์๋ค. ๋งค์ฐ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ต๋ช ํจ์ ์์ ์ง์ด๋ฃ์ด private ์ค์ฝํ๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ๋ถํธํด์ง๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ค์์คํ์ด์ค๋ฅผ ์ ์ฉํด์ผ ํ๋ค. (์ฐธ๊ณ 1)
๋ค์ดํฐ๋ธ ๊ฐ์ฒด(Native object), ํธ์คํธ ๊ฐ์ฒด(Host object), Built-in ๊ฐ์ฒด
๊ฐ์ฒด๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค. ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ ECMAScript ๋ช
์ธ์ ์ ์๋ ๊ฐ์ฒด๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์ง์ ๊ตฌํ๋ ํ์ค๊ฐ์ฒด์ด๋ค. BOM(Browser Object Model)๊ณผ DOM ๋ฑ์ ๋ชจ๋ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌ๋ํ๋ ์ธก์์ ๋น๋๋๋ ๊ฐ์ฒด์ด๋ค. ํธ์คํธ ๊ฐ์ฒด๋ ๊ฐ๋ฐ์๊ฐ ์ ์ํ ๊ฐ์ฒด์ด๋ค. ๋ง์ง๋ง์ผ๋ก Built-in ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ๊ฐ์ฒด๋ค์ ํฌํจํ๋ค. Number
, String
, Array
, Date
๋ฑ์ ๋ด์ฅ๊ฐ์ฒด๋ค์ด ์๋ค. (์ฐธ๊ณ )
๊ธฐ๋ฅ ๊ฒ์ถ(Feature detection)๊ณผ ๊ธฐ๋ฅ ์ถ๋ก (Feature inference)
๊ธฐ๋ฅ ๊ฒ์ถ์ด๋ ์คํฌ๋ฆฝํธ๊ฐ ํธ์ถํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋์ง ์ฒดํฌํ๋ ๊ฒ์ ๋งํ๋ค. ๋ค์์ ๋ธ๋ผ์ฐ์ ๊ฐ GPS๋ฅผ ์ง์ํ๋์ง ํ์ธํ๋ ์ฝ๋๋ค.
if(navigator.geolocation) {...}
๊ธฐ๋ฅ ์ถ๋ก ๋ ๊ธฐ๋ฅ ๊ฒ์ถ์ฒ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ํน์ ๊ธฐ๋ฅ์ ์ง์ํ๋์ง ์ฒดํฌํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง 'A๊ธฐ๋ฅ์ ์ง์ํ๋ฉด B๊ธฐ๋ฅ๋ ์ง์ํ ๊ฒ์ด๋ค.'๋ผ๋ ์ถ๋ก ์ด ๋ฐํ์ด ๋๋ค. ๋ณ๋ก ์ข์ง ์์ ๋ฐฉ๋ฒ์ด๋ค. (์ฐธ๊ณ )
ํธ์ด์คํ (Hoisting)
ํธ์ด์คํ ์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ ๋, ๋ณ์์ ์ ์๊ฐ ์ค์ฝํ์ ๋ฐ๋ผ ์ ์ธ๊ณผ ํ ๋น์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ ์ธ์ ํญ์ ์ปจํ ์คํธ์ ์ต์์๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ๋ณ์๋ฅผ ์ด๋์์ ์ ์ธํ๋ ์ธํฐํ๋ฆฌํฐ๋ ์ต์๋จ์์ ์ ์ธํ ๊ฒ์ผ๋ก ํด์ํ๋ค. ์ด๋ ๋ณ์ ๋ฟ ์๋๋ผ ํจ์์๋ ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ ์๋จ์์ ํจ์๋ฅผ ํธ์ถํ๊ณ , ํ๋จ์์ ํจ์๋ฅผ ์ ์ํด๋ ๊ธฐ๋ฅ์ ์ธ ๋ฌธ์ ๋ ์๋ค. (์ฐธ๊ณ )
์ด๋ฒคํธ ํ๋ฆ(Event flow)
HTML ์์๊ฐ ๋ค๋ฅธ ์์์ ๋ด๋ถ์ ์ค์ฒฉ๋์ด ์์ ๋ ์์ ์์๋ฅผ ํด๋ฆญํ๋ฉด ๋ถ๋ชจ ์์๋ฅผ ํด๋ฆญํ ์ ์ด ๋๋ค. ์ด์ฒ๋ผ ์ด๋ฒคํธ๋ ํ๋ฆ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๊ฒ์ ์ด๋ฒคํธ ํ๋ฆ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ฒคํธ ํ๋ฆ์๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค. ๋จผ์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง(Event bubbling)์ ์ด๋ฒคํธ๊ฐ ์ง์ ์ ์ผ๋ก ๋ฐ์ํ ๋ ธ๋๋ก๋ถํฐ ์์ํด ๋ฐ๊นฅ ๋ ธ๋๋ก ์ด๋ฒคํธ๊ฐ ํผ์ ธ ๋๊ฐ๋ ๋ฐฉ์์ ๋งํ๋ค. ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฐฉ์์ ์ง์ํ๋ค. ๋ฐ๋๋ก ์ด๋ฒคํธ ์บก์ณ๋ง(Event capturing)์ ๋ฐ๊นฅ ๋ ธ๋๋ถํฐ ์์ํด์ ์์ชฝ์ผ๋ก ํผ์ง๋ ๋ฐฉ์์ด๋ค. IE8 ํน์ ๊ทธ ์ด์ ๋ฒ์ ์์๋ ์ง์๋์ง ์๋๋ค.
document load event์ DOMContentLoaded event
DOM์ ์ ์ดํ๋ ์คํฌ๋ฆฝํธ๋ ๋งํฌ์
์ ๋ชจ๋ ์์์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋๋ ๋ค์ ๋ก๋๋์ด์ผ ํ๋ค. ๊ทธ๋์ ๋ณดํต <body>
ํ๊ทธ ์ตํ๋จ์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ค๋๋กํ๋ค. ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ด๋ฒคํธ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. document load event๋ ํ์ด์ง์ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ๋ก๋๋ ์ดํ์ ์คํ๋๋ค. ๋๋ฌธ์ ๊ตฌ๋์ด ์ง์ฐ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํํ ์ ์๋ค. ๋ฐ๋ฉด DOMContentLoaded event๋ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ๋ง์น๊ณ ์คํ์ด ๊ฐ๋ฅํ ์์ ์ ๋ฐ๋ก ์คํ๋๋ค. (์ฐธ๊ณ )
์กฐ๊ฑด๋ถ ์ผํญ ์ฐ์ฐ์(Conditional ternary operator)
๋ณดํต ๊ทธ๋ฅ '์ผํญ ์ฐ์ฐ์โ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. if๋ฌธ์ ์ถ์ฝํด์ ์ธ ์ ์๋ ์ ์ฉํ ์ฐ์ฐ์์ด์ง๋ง, ๊ณผํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค.
var a = 1, b = 2;
console.log(a < b ? "True" : "False"); // "True"
console.log(a > b ? "True" : "False"); // "False"
a < b ? (
console.log("True");
alert("True");
) : (
console.log("False");
alert("False");
); // "True"
์กฐ๊ฑด์ด true
๋ฉด ์ ์์ ๊ฐ์ ๋ฐํํ๊ณ , false
๋ฉด ํ์์ ๊ฐ์ ๋ฐํํ๋ค.
use strict
ES6์์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก, ์คํฌ๋ฆฝํธ์ "use strict;"
๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ฉด strict mode์์ ์คํํ๊ฒ ๋๋ค. strict mode๋ ์ฝ๋ฉ ์ค์๋ฅผ ์ฐพ์ ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ , ์ ์ญ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ํํ ์ก์
์ ๋ง๋๋ค. ์คํฌ๋ฆฝํธ ์ ์ฒด์ ์ ์ฉํ ์๋ ์๊ณ ํน์ ํจ์์๋ง ์ ์ฉํ ์๋ ์๋ค. (์ฐธ๊ณ )
Call stack๊ณผ Task queue
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์์ฒญ์ ์์ฐจ์ ์ผ๋ก call stack์ ๋ด์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ค. call stack์ ํ๋๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ฒญ๋ ํ๋์ฉ๋ง ์ฒ๋ฆฌํ ์ ๋ฐ์ ์๋ค. task queue๋ ์ฒ๋ฆฌํด์ผ ํ๋ task๋ฅผ ์์๋ก ์ ์ฅํด๋๋ ํ๋ค. call stack์ด ๋น์์ง๋ฉด task queue์ ์๋ task๋ค์ด ์์๋๋ก call stack์ push๋๋ค. ๊ฐ๋ น setTimeout()
ํจ์๋ก 10์ด์ ๋๋ ์ด๋ฅผ ๋๋ค๋ฉด, ๊ทธ๋์ setTimeout()
์ด ์ฒ๋ฆฌํ task๋ task queue์ ์์ด๊ณ ๋ค๋ฅธ ๋ถ๋ถ์ ์คํฌ๋ฆฝํธ๋ค์ด ์คํ๋๋ค. ๋ฐ๋ผ์ ๋๋ ์ด๋ฅผ 0์ผ๋ก ์ค๋ setTimeout()
์ task๋ ๋ค๋ฅธ ๊ฒ๋ค๋ณด๋ค ๋์ค์ ์ฒ๋ฆฌ๋๋ค. (์ฐธ๊ณ )