ํ”„๋ก ํŠธ์—”๋“œ/JavaScript

[JavaScript] Function vs Const

1eehyunji 2023. 12. 4. 20:20

React๋กœ ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ function(){} ํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜๊ธฐ๋„ ํ•˜๊ณ  const=()=>{} ํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ์ง€, ๋” ๋‚˜์€ ๋ฐฉ์‹์ด ์žˆ๋‹ค๋ฉด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

๋จผ์ € ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค. 

  • ํ˜ธ์ด์ŠคํŒ… ๊ฐ€๋Šฅ ์—ฌ๋ถ€
  • export default ๋™์‹œ ์„ ์–ธ ์—ฌ๋ถ€

* ํ˜ธ์ด์ŠคํŒ…(hoisting) : ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ํด๋ž˜์Šค ๋˜๋Š” ์ž„ํฌํŠธ(import)์˜ ์„ ์–ธ๋ฌธ์„ ํ•ด๋‹น ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ณผ์ •

 

ํ˜ธ์ด์ŠคํŒ… ๊ฐ€๋Šฅ ์—ฌ๋ถ€

Function() ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐฉ์‹์€ ํ˜ธ์ด์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์‹คํ–‰ ์ฝ”๋“œ ๋ฐ‘์— ์„ ์–ธ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ˜๋ฉด์— Const=()=>์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ˜ธ์ด์ŠคํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ  ๊ทธ ๋ฐ‘์—์„œ ํ•จ์ˆ˜ ์‹คํ–‰์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

์ด ๋•๋ถ„์— Function()๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ์„ ์–ธ์˜ ๊ฒฝ์šฐ ์„ ์–ธ๋ถ€๋Š” ์ฝ”๋“œ ํ•˜๋‹จ์— ๋‘๊ณ , ๋ฉ”์ธ ๋กœ์ง๋งŒ ์œ— ๋ถ€๋ถ„์— ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด์„œ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋” ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

1. Const=()=>{}

const tryDoTheThing = () => {
  console.log(`This is me trying to be awesome ${getAwesome()}`)
}

// "getAwesome is not defined", because it is referenced too early
tryDoTheThing() // comment to see the rest work

const doTheThing = () => {
  console.log(`This is awesome! ${getAwesome()}`)
}

doTheThing() // prints

 

2. function(){}

/*
Function declarations are given two passes, where the first lifts them to
the top of the namespace, allowing "out of order" usage
*/

doTheThing();

function doTheThing() {
  console.log(`This is awesome number ${getAwesome()}`)
}

function getAwesome() {
  return (+((Math.random() * 10000).toString().split('.')[0]))
}

 

export default ๊ฐ€๋Šฅ ์—ฌ๋ถ€

// ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ export default๋ฅผ ๋™์‹œ์— ํ•  ์ˆ˜ ์žˆ๋‹ค.
export default function Foo(){}

// ํ‘œํ˜„์‹์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค
export default const Foo = () => {} // error

// named export๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค
export const Foo = () => {}

export default๋ฅผ ๋ถ™์—ฌ์คฌ๋‹ค๋Š” ๊ฑด ํ•ด๋‹น ์ฝ”๋“œ์˜ ๋ฉ”์ธ ๋กœ์ง์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ๋„ export ๋งŒ์ด ๋ถ™์–ด์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” import {} from "./.." ํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€๋งŒ, export default๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ import name from "./..";์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

์„ ์–ธ๊ณผ ๋™์‹œ์— export default๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๊ฑด function ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ์ด๊ณ , const=()=>๋Š” export๋งŒ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.