๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/๋ถ€์ŠคํŠธ์ฝ”์Šค

[๋ถ€์ŠคํŠธ์ฝ”์Šค] ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ FE: JavaScript 3 ํ•จ์ˆ˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ

by dar0m! 2020. 3. 4.

์˜ค๋Š˜์€ JavaScript ๋งˆ์ง€๋ง‰ ํŒŒํŠธ์ž…๋‹ˆ๋‹ค. JavaScript์˜ ํ•จ์ˆ˜์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ๋ชฉํ‘œ

  1. JavaScript์˜ ๊ธฐ๋ณธ๋ฌธ๋ฒ•์„ ์ดํ•ดํ•œ๋‹ค.
  2. DOM, Browser Event, Ajax์ด ๊ฐ๊ฐ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•ด ์›นํ™”๋ฉด์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. JSP์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ดํ•ดํ•˜๊ณ  redirect & forward ์™€ scope๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  4. JSTL๊ณผ EL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ SQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  6. Maven์„ ์ดํ•ดํ•˜๊ณ  Maven์„ ์ด์šฉํ•œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 
  7. JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  8. Web API๋ฅผ ์ดํ•ดํ•œ๋‹ค. 

๊ฐ•์˜ ๋งํฌ๐Ÿ‘‡

 

[LECTURE] 3) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ" === "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค"๋Š” ๋ง๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.   ํ•™์Šต ๋ชฉํ‘œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์„ ์–ธ๋ฐฉ์‹๋“ค๊ณผ ๊ทธ ์ฐจ์ด์ , ๋ฐ˜ํ™˜๊ฐ’... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

 

 

[LECTURE] 4) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ : edwith

๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ํ•จ์ˆ˜๋Š” ์—ฐ์†์ ์œผ๋กœ ๋ถˆ๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•ด๋ด…๋‹ˆ๋‹ค. ํ•™์Šต ๋ชฉํ‘œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ call stack์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ฐœ๋… ca... - ๋ถ€์ŠคํŠธ์ฝ”์Šค

www.edwith.org

 

๋ชฉ์ฐจ

  1. ํ•จ์ˆ˜ ์„ ์–ธ์‹
  2. ํ•จ์ˆ˜ ํ‘œํ˜„์‹
  3. ํ˜ธ์ด์ŠคํŒ…
  4. ๋ฐ˜ํ™˜๊ฐ’
  5. arguments
  6. Arrow function
  7. ํ˜ธ์ถœ ์Šคํƒ

 

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

์ด๋Ÿฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ

ํ•จ์ˆ˜ ์„ ์–ธ์‹์€ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์œ„์น˜์™€ ๊ด€๊ณ„์—†์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŠน์ง•์ธ ํ˜ธ์ด์ŠคํŒ…์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•  ๋•Œ ๋งจ ์œ„๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง€๊ณ ,

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ด์ŠคํŒ…์— ๋”ฐ๋ผ ๋ณ€์ˆ˜๊ฐ€ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ณ€์ˆ˜๋กœ ์ธ์‹ํ•˜์—ฌ ํ•จ์ˆ˜์„ ์–ธ๋ฌธ๊ณผ ๋‹ฌ๋ฆฌ ์„ ์–ธ๊ณผ ํ˜ธ์ถœ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ •์ƒ์ ์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ด์ŠคํŒ…์„ ์ œ๋Œ€๋กœ ๋ชจ๋ฅด๋”๋ผ๋„ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๊ธ‰์  ์ฝ”๋“œ ์ƒ๋‹จ๋ถ€์— ์„ ์–ธํ•˜๋ฉด, ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•œ ์Šค์ฝ”ํ”„ ๊ผฌ์ž„ ํ˜„์ƒ์€ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹ vs ํ•จ์ˆ˜ ์„ ์–ธ์‹

(๊ธฐ๋ณธ) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ํ•จ์ˆ˜ ์„ ์–ธ์‹์—๋Š” ์–ด๋– ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

joshua1988.github.io

 

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) => { ... } // ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ, ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
 
// ํ•จ์ˆ˜ ๋ชธ์ฒด ์ง€์ • ๋ฐฉ๋ฒ•
=> { return x * x }  // single line block
=> x * x             // ํ•จ์ˆ˜ ๋ชธ์ฒด๊ฐ€ ํ•œ์ค„์˜ ๊ตฌ๋ฌธ์ด๋ผ๋ฉด ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•”๋ฌต์ ์œผ๋กœ return๋œ๋‹ค. ์œ„ ํ‘œํ˜„๊ณผ ๋™์ผํ•˜๋‹ค.
 
() => { return { a: 1 }; }
() => ({ a: 1 })  // ์œ„ ํ‘œํ˜„๊ณผ ๋™์ผํ•˜๋‹ค. ๊ฐ์ฒด ๋ฐ˜ํ™˜์‹œ ์†Œ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
 
() => {           // multi line block.
  const x = 10;
  return x * x;
};
cs

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ต๋ช… ํ•จ์ˆ˜๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž˜ ์ •๋ฆฌ๋œ ๊ธ€์ด ์žˆ์œผ๋‹ˆ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

 

Arrow function | PoiemaWeb

Arrow function(ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)์€ function ํ‚ค์›Œ๋“œ ๋Œ€์‹  ํ™”์‚ดํ‘œ(=>)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋žตํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

poiemaweb.com

 

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 ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•ด๋„ ๋„ˆ๋ฌด ๋†€๋ผ์ง€ ๋ง๊ณ , ๋Œ€์ฒ˜ํ•˜๋„๋ก ํ•˜์„ธ์š”.

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜ธ์ถœ ์Šคํƒ(Call Stack) ์ดํ•ดํ•˜๊ธฐ

์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ๋„ ์žˆ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด "๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผํ•  33๊ฐ€์ง€ ๊ฐœ๋…(https://github.com/yjs03057/33-js-concepts)"์˜ ํ•ญ๋ชฉ๋“ค๊ณผ ๋งํฌ๋˜์–ด์žˆ๋Š” ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค์„ ์ •๋ฆฌํ•˜์—ฌ..

new93helloworld.tistory.com

 

 

์ด๋ ‡๊ฒŒ ์˜ค๋Š˜ Javascript ํ•จ์ˆ˜์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์—๋Š” WEB UI ๊ฐœ๋ฐœ์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€