์ค๋์ JavaScript ๋ง์ง๋ง ํํธ์ ๋๋ค. JavaScript์ ํจ์์ ๋ํ์ฌ ์์๋ณด๊ฒ ์ต๋๋ค.
ํ์ต ๋ชฉํ
- JavaScript์ ๊ธฐ๋ณธ๋ฌธ๋ฒ์ ์ดํดํ๋ค.
- DOM, Browser Event, Ajax์ด ๊ฐ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๊ณ , ์ด๋ฅผ ํ์ฉํด ์นํ๋ฉด์ ์ ์ดํ ์ ์๋ค.
- JSP์ ๋ผ์ดํ์ฌ์ดํด์ ์ดํดํ๊ณ redirect & forward ์ scope๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
- JSTL๊ณผ EL์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ๊ณ ๊ฐ๋จํ SQL์ ์ฌ์ฉํ ์ ์๋ค.
- Maven์ ์ดํดํ๊ณ Maven์ ์ด์ฉํ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๋ค.
- JDBC ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
- Web API๋ฅผ ์ดํดํ๋ค.
๊ฐ์ ๋งํฌ๐
๋ชฉ์ฐจ
- ํจ์ ์ ์ธ์
- ํจ์ ํํ์
- ํธ์ด์คํ
- ๋ฐํ๊ฐ
- arguments
- Arrow function
- ํธ์ถ ์คํ
1. ํจ์ ์ ์ธ์(Function Declarations)
ํจ์๋ ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ํ๋ผ๋ฏธํฐ์ ๊ฐ์์ ์ธ์์ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์๋ ์ค๋ฅ๊ฐ ๋์ง ์์ต๋๋ค.
๋ง์ฝ, ํ๋ผ๋ฏธํฐ 1๊ฐ๊ฐ ์ ์๋ ํจ์๋ฅผ ๋ถ๋ฅผ ๋, ์ธ์์ ๊ฐ์๋ฅผ 0๊ฐ๋ง ๋ฃ์ด ์คํํ๋ฉด, ์ด๋ฏธ ์ ์๋ ํ๋ผ๋ฏธํฐ(๋งค๊ฐ๋ณ์)๋ undefined์ด๋ผ๋ ๊ฐ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ณ์๋ ์ด๊ธฐํ๋์ง๋ง, ๊ฐ์ด ํ ๋น๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋์ ๊ฐ์ ํ์์ ํจ์ ์ ์ธ์ฝ๋๋ฅผ ํจ์์ ์ธ๋ฌธ์ด๋ผ๊ณ ํฉ๋๋ค.
1
2
3
|
function declaration() {
return 'function decalrations';
}
|
cs |
2. ํจ์ ํํ์(Function Expressions)
๋ณ์ซ๊ฐ์ ํจ์ ํํ์์ ๋ด์ ๋์ ๊ฒ์ ํจ์ ํํ์์ด๋ผ๊ณ ๋งํฉ๋๋ค. ํจ์์ ์ธ๋ฌธ๊ณผ ๋ฌ๋ฆฌ ์ ์ธ๊ณผ ํธ์ถ์์์ ๋ฐ๋ผ์ ์ ์์ ์ผ๋ก ํจ์๊ฐ ์คํ๋์ง ์์ ์ ์์ต๋๋ค.
ํจ์ ํํ์๋ณด๋ค ํจ์ ์ ์ธ๋ฌธ์ ๋ ์์ฃผ ์ฌ์ฉํ์ง๋ง, ์ด๋ค ์ฝ๋ฉ์ปจ๋ฒค์ ์์๋ ํจ์ ํํ์์ ๊ถ์ฅํ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ค ์ปจ๋ฒค์ ์ ๊ฐ๋์ง ํ๊ฐ์ง๋ง ์ ํด์ ์ฌ์ฉํ๋ ๊ฒ ์ข์ต๋๋ค.
1
2
3
4
|
var expresstion = function () {
return 'function expresstions';
}
|
cs |
3. ํํ์๊ณผ ํธ์ด์คํ
์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์คํ๋๊ธฐ ์ ์ ํจ์ ์์ ํ์ํ ๋ณ์๊ฐ๋ค์ ๋ฏธ๋ฆฌ ๋ค ๋ชจ์์ ์ ์ธํฉ๋๋ค.
ํจ์ ์์ ์๋ ๋ณ์๋ค์ ๋ชจ๋ ๋์ด์ฌ๋ ค์ ์ ์ธํ๋ค๊ณ ํด์, ์ด๋ฅผ hoisting์ด๋ผ๊ณ ํฉ๋๋ค.
(์ค์ ๋ก ์ฝ๋๊ฐ ๋์ด์ฌ๋ ค์ง๋ ๊ฑด ์๋๋ฉฐ<์ด ๊ณผ์ ์ด ๋์ ๋ณด์ด๋ ๊ฒ ์๋์ฃ >, ์๋ฐ์คํฌ๋ฆฝํธ ๋ด๋ถ์ ์ผ๋ก ๊ทธ๋ ๊ฒ ๋์ด์ฌ๋ ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์
๋๋ค)
ํจ์ ์ ์ธ์๊ณผ ํํ์์ ์ฐจ์ด์
ํจ์ ์ ์ธ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง๋ง, ํจ์ ํํ์์ ํธ์ด์คํ ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
ํจ์ ์ ์ธ์์ ์ฝ๋๋ฅผ ๊ตฌํํ ์์น์ ๊ด๊ณ์์ด ์๋ฐ์คํฌ๋ฆฝํธ ํน์ง์ธ ํธ์ด์คํ ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ ๋ ๋งจ ์๋ก ๋์ด ์ฌ๋ ค์ง๋๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์คํ๋๋ฉด
1
2
3
4
5
6
7
8
9
10
11
|
console.log(declaration());
console.log(expresstion());
function declaration() {
return 'function decalrations';
}
var expresstion = function () {
return 'function expresstions';
}
|
cs |
ํธ์ด์คํ ์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ํด์๊ธฐ๋ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์ธ์ํ๊ธฐ ๋๋ฌธ์
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function declaration() {
return 'function decalrations';
}
var expresstion;
console.log(declaration());
console.log(expresstion());
expresstion = function () {
return 'function expresstions';
};
|
cs |
์ด๋ฐ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ํ๋ด๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์
ํจ์ ์ ์ธ์์ ์ฝ๋๋ฅผ ๊ตฌํํ ์์น์ ๊ด๊ณ์์ด ์๋ฐ์คํฌ๋ฆฝํธ ํน์ง์ธ ํธ์ด์คํ ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ ๋ ๋งจ ์๋ก ๋์ด ์ฌ๋ ค์ง๊ณ ,
ํจ์ ํํ์์ ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ์ ๋ฐ๋ผ ๋ณ์๊ฐ ๋์ด์ฌ๋ ค์ง๋ ํํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ํจ์๊ฐ ์๋ ๋ณ์๋ก ์ธ์ํ์ฌ ํจ์์ ์ธ๋ฌธ๊ณผ ๋ฌ๋ฆฌ ์ ์ธ๊ณผ ํธ์ถ์์์ ๋ฐ๋ผ์ ์ ์์ ์ผ๋ก ํจ์๊ฐ ์คํ๋์ง ์์ ์ ์์ต๋๋ค.
ํธ์ด์คํ ์ ์ ๋๋ก ๋ชจ๋ฅด๋๋ผ๋ ํจ์์ ๋ณ์๋ฅผ ๊ฐ๊ธ์ ์ฝ๋ ์๋จ๋ถ์ ์ ์ธํ๋ฉด, ํธ์ด์คํ ์ผ๋ก ์ธํ ์ค์ฝํ ๊ผฌ์ ํ์์ ๋ฐฉ์งํ ์ ์๋ค.
4. ๋ฐํ๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋ฐ๋์ return๊ฐ์ด ์กด์ฌํ๋ฉฐ, ์์ ๋๋ ๊ธฐ๋ณธ ๋ฐํ๊ฐ์ธ 'undefined'๊ฐ ๋ฐํ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ void ํ์ ์ด ์์ต๋๋ค.
1
2
3
4
5
6
|
function printName(firstname) {
var myname = "jisu";
var result = myname + " " + firstname;
}
console.log(printName());
|
cs |
undefined
์์ ์ฝ๋์ ๋ฐํ๊ฐ์ undefined ์ ๋๋ค.
5. arguments
ํจ์๊ฐ ์คํ๋๋ฉด ๊ทธ ์์๋ arguments๋ผ๋ ํน๋ณํ ์ง์ญ๋ณ์๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. arguments์ ํ์ ์ ๊ฐ์ฒด์ ๋๋ค.(console.log( typeof arguments) ๋ก ํ์ธํด๋ณด์ธ์!)
- ์ ์๋ ์ธ์๋ณด๋ค ์ ๊ฒ ํจ์๋ฅผ ํธ์ถํ์ ๊ฒฝ์ฐ, ๋๊ฒจ์ฃผ์ง ์์ ์ธ์์๋ ํน๋ณํ ๊ฐ undefined๊ฐ ํ ๋น๋๋ค.
- ๋ฐ๋๋ก ์ ์๋ ์ธ์๋ณด๋ค ๋ง๊ฒ ํจ์๋ฅผ ํธ์ถํ์ ๊ฒฝ์ฐ, ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ด๊ณผ๋ ์ธ์๋ ๋ฌด์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ์ ์ธํ ํ๋ผ๋ฏธํฐ๋ณด๋ค ๋ ๋ง์ ์ธ์๋ฅผ ๋ณด๋ผ ์๋ ์์ต๋๋ค. ์ด๋ ๋์ด์จ ์ธ์๋ฅผ arguments๋ก ๋ฐฐ์ด์ ํํ(์ซ์๋ก ์ธ๋ฑ์ฑ๋ ํ๋กํผํฐ)๋ก ํ๋์ฉ ์ ๊ทผํ ์๊ฐ ์์ต๋๋ค. ํ์ง๋ง arguments๋ ๋ฐฐ์ดํ์ ์ ์๋๊ธฐ๋๋ฌธ์ ๋ฐฐ์ด์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๊ฐ ์๊ณ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ ํจ์ ์ฝ๋๋ฅผ ์์ฑํ ๋, ๋ฐํ์ ์ ํธ์ถ๋ ์ธ์์ ๊ฐ์๋ฅผ ํ์ธํ๊ณ ์ด์ ๋ฐ๋ผ ๋์์ ๋ค๋ฅด๊ฒ ํด์ค ์ ์์ต๋๋ค.
6. Arrow function
ES2015 = ES6
ํ์ดํ ํจ์(Arrow function)๋ function ํค์๋ ๋์ ํ์ดํ(=>)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด๋ค ๊ฐ๋ตํ ๋ฐฉ๋ฒ์ผ๋ก ํจ์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฒฝ์ฐ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ํ์ดํ ํจ์์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// ๋งค๊ฐ๋ณ์ ์ง์ ๋ฐฉ๋ฒ
() => { ... } // ๋งค๊ฐ๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ
x => { ... } // ๋งค๊ฐ๋ณ์๊ฐ ํ ๊ฐ์ธ ๊ฒฝ์ฐ, ์๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
(x, y) => { ... } // ๋งค๊ฐ๋ณ์๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ, ์๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
// ํจ์ ๋ชธ์ฒด ์ง์ ๋ฐฉ๋ฒ
x => { return x * x } // single line block
x => x * x // ํจ์ ๋ชธ์ฒด๊ฐ ํ์ค์ ๊ตฌ๋ฌธ์ด๋ผ๋ฉด ์ค๊ดํธ๋ฅผ ์๋ตํ ์ ์์ผ๋ฉฐ ์๋ฌต์ ์ผ๋ก return๋๋ค. ์ ํํ๊ณผ ๋์ผํ๋ค.
() => { return { a: 1 }; }
() => ({ a: 1 }) // ์ ํํ๊ณผ ๋์ผํ๋ค. ๊ฐ์ฒด ๋ฐํ์ ์๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
() => { // multi line block.
const x = 10;
return x * x;
};
|
cs |
ํ์ดํ ํจ์๋ ์ต๋ช ํจ์๋ก๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ดํ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ ํจ์ ํํ์์ ์ฌ์ฉํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ ์ ์ ๋ฆฌ๋ ๊ธ์ด ์์ผ๋ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
7. ํธ์ถ ์คํ(Call Stack)
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ฏ๋ก, ๋จ์ผ ํธ์ถ ์คํ์ด ์์ต๋๋ค. ๋จ์ผ ํธ์ถ ์คํ์ด ์๋ค๋ ๋ป์ ํ ๋ฒ์ ํ๋์ ์ผ(Task)๋ง ์ฒ๋ฆฌํ ์ ์๋ค๋ ๋ป์ ๋๋ค.
stack์ด๋ ํ๋ก๊ทธ๋จ์์ ์ฐ๋ฆฌ๊ฐ ์ด๋์ ์๋์ง๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋กํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ ์ ํ์ถ์ ๋๋ค. ํ๋ง๊ธ์ค ๊ณผ์๋ฅผ ๋จน์ ๋ ์ฒ๋ผ ๊ฐ์ฅ ๋จผ์ ๋ฃ์ด์ ธ ๋งจ ์๋ ๊น๋ ค์ง ๊ฐ์์นฉ์ ๋งจ ๋ง์ง๋ง์ ๋จน์ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
|
function foo(b){
var a = 5;
return a * b + 10;
}
function bar(x){
var y = 3;
return foo(x * y);
}
console.log(bar(6));
|
cs |
์์ ๊ฐ์ ์ฝ๋๊ฐ ์คํ๋๋ฉด
์ฒ์์ 11๋ฒ์งธ ์ค console.log(bar(6))์ด call stack์ ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ bar()ํจ์๊ฐ ๊ทธ ์์ ์์ด๊ณ , foo()๊ฐ ์์ด๊ฒ ๋ฉ๋๋ค. foo()ํจ์๊ฐ ๋ชจ๋ ๋์์ ๋๋ด๊ณ return ๋์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ฆ, call stack ์์ ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ bar๋ ๋ฐ์์จ ๊ฐ์ผ๋ก ๋ง์ ๋์์ ๋ค ๋๋ธ๋ค์ return ๋๊ณ , call tack์์ ์ฌ๋ผ์ง๊ณ , console.log()๊น์ง ์คํ๋๊ณ call stack์ด ๋น์ด์ง๋ฉด ํ๋ก๊ทธ๋จ์ด ๋๋๊ฒ ๋ฉ๋๋ค.
call stack์ ์ด๋ ๊ฒ ๋์ํ์ง๋ง, ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ๊ณ์ ํธ์ถํ๋ฉด call stack์ด ๊ฝ ์ฐจ๋ฒ๋ฆฌ๋ฉด์ ๋ ์คํ๋์ง ๋ชปํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ๋๋ค. ๊ทธ๋์ ๋ธ๋ผ์ฐ์ ์์๋ ๋๋ถ๋ถ ์ง์ ๋ ํ์๋งํผ๋ง call stack์ ์๊ฒ ๋ฏธ๋ฆฌ ์ค์ ํด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ ํน์ ๊ฐ๋ฐ ์ค์ Maximum call stack size exceeded ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํด๋ ๋๋ฌด ๋๋ผ์ง ๋ง๊ณ , ๋์ฒํ๋๋ก ํ์ธ์.
๋ ์์ธํ ๋ด์ฉ์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ ์ค๋ Javascript ํจ์์ ๋ํ์ฌ ์์๋ณด์์ต๋๋ค. ๋ค์์๋ WEB UI ๊ฐ๋ฐ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๋๊ธ