๊นƒํ—ˆ๋ธŒ(Github) PUSH์™€ Personal Access Token ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

Support for password authentication was removed on August 13, 2021. ์—๋Ÿฌ

๊นƒํ—ˆ๋ธŒ์˜ ์ •์ฑ… ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด 8์›” 13์ผ๋ถ€ํ„ฐ๋Š” ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์•ผ ํ‘ธ์‹œ(PUSH)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝ์ด ๋˜์–ด

์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ํ† ํฐ ๋ฐœ๊ธ‰

vscode์—์„œ ํ‘ธ์‹œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด 8์›” 13์ผ ์ดํ›„๋กœ๋Š” ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ ๋ฐœ๊ธ‰์€ ๋‹ค์Œ ํŽ˜์ด์ง€์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/settings/tokens

์ ‘์†ํ•˜์—ฌ Generate new token ํด๋ฆญ

์œ„ ํŽ˜์ด์ง€์—์„œ Note, Expiration, Select scopes ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Note๋Š” ํ† ํฐ ์„ค๋ช…, Expiration์€ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„, Select scopes๋Š” ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ๋ฒ”์œ„๋งŒ ์ง€์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ Select scopes๋Š” repo๋งŒ ์ฒดํฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์„ธ ํ•ญ๋ชฉ ์ž‘์„ฑ ๋ฐ ์ฒดํฌ ํ›„ Generate token์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์ด ์ƒ์„ฑ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ๋œ ํ† ํฐ์€ ํ™ˆํŽ˜์ด์ง€์—์„œ ์žฌํ™•์ธํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ณต์‚ฌํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


2. ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •ํ•˜๊ธฐ

๋ฐœ๊ธ‰ ๋ฐ›์€ ํ† ํฐ์„ ์œˆ๋„์šฐ์˜ ์ž๊ฒฉ ์ฆ๋ช…์— ์„ค์ •ํ•˜๋ฉด ์ž‘์—…์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์œˆ๋„์šฐ์—์„œ ์ž๊ฒฉ ์ฆ๋ช… ๊ด€๋ฆฌ์ž๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Windows ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ ํƒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด github ์ž๊ฒฉ ์ฆ๋ช…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋œ ๋ถ€๋ถ„์„ ์„ ํƒํ•˜์—ฌ ํŽธ์ง‘์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ ํ† ํฐ์„ ๋ณต์‚ฌํ•˜์—ฌ ์•”ํ˜ธ ๋ถ€๋ถ„์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ฐ ์ €์žฅํ•˜๋ฉด ์ž‘์—…์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.


CSS Combinators, make your CSS works easier (+,~, ,>)

Four combinators [Adjacent Sibling(+), General Sibling(~), Child(>), Descendant( )]

When set CSS Styles, below syntax is a basic.

h1 {
  color:#FFFF11;
  background: #000000;
}

.subTitle {
  font-size:13px;
  color:#FFFFFF;
  font-family:inherit;
}

#timeLine {
  background:gray;
}

But when you want to set Styles to a specific tag, using combinators is a smart selection.

combinators are mixed Styles. like ‘div + h1’ or ‘div > span’.

Any tags are mixable and there are four combinator types.

  • Adjacent Sibling (+)
  • General Sibling (~)
  • Child (>)
  • Descendant ( space )

1. Adjacent Sibling (+)

Adjacent Sibling uses + mark when specifies one element right after designated element.

h1 + p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm h1 tag</h1>
  <p>I'm orange</p>
  <h2>I'm h2 tag</h2>
  <p>I'm a second p tag</p>
  <h1>I'm h1 tag again</h1>
  <p>I'm orange too</p>
<div>

There are two conditions for adjacent sibling.

Element should share the same parent and second element has to come only if right after first element.

In the above HTML result, there are three <p> tag lines but only two lines are matched to the condition.

Therefore only two matched elements are working as mentioned.

2. General Sibling (~)

General Sibling uses ~ mark when specifies elements come after designated element.

h1 ~ p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm h1 tag</h1>
  <p>I'm orange</p>
  <h2>I'm h2 tag</h2>
  <p>I'm orange too</p>
<div>

There are two conditions for general sibling.

Element should share the same parent and second element has to come after first element.

In the above HTML result, every <p> tag after <h1>tag is working.

3. Child (>)

Use > marks when express child elements.

div > p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm just h1 tag</h1>
  <p> I'm colored orange</p>
  <span>
    <p>I'm not the one</p>
  </span>
  <p> I also am colored orange</p>
</div>

Second element has to be a direct child of first element.

In the above HTML result, only two direct child lines are working.

Fifth line is not working because its position is parent-child-child.

4. Descendant

Use space when express descendant elements.

div p {
  color:orange;
}

Result is shown below.

<div>
  <h1>I'm just h1 tag</h1>
  <p> I'm colored orange</p>
  <span>
    <p>Count me in</p>
  </span>
  <p> I also am colored orange</p>
</div>

As long as second element is a descendant of the first element, every matched line is working.


Combinators are easy and simple for efficient CSS work.

I hope this post is helpful to your CSS design.

์Šค์œ„ํ”„ํŠธ ์Šคํฌ์ธ (ZC33S)์™€ ํ•จ๊ป˜ ํ•œ 1๋…„์˜ ์‹œ๊ฐ„(SUZUKI swift sports ๋ฆฌ๋ทฐ)

์ผ๋ณธ ์ƒํ™œ๊ณผ ํ•จ๊ป˜ ํ•œ ์Šค์ฆˆํ‚ค ์Šค์œ„ํ”„ํŠธ ์Šคํฌ์ธ (feat.2018~2019)

2018๋…„ ์ถœ๊ณ ๋ถ€ํ„ฐ 2019๋…„๊นŒ์ง€ ์ผ๋ณธ ์ƒํ™œ์—์„œ ์ €์˜ ๋ฐœ์ด ๋˜์–ด์ค€ ์Šค์ฆˆํ‚ค ์Šค์œ„ํ”„ํŠธ ์Šคํฌ์ธ  SUZUKI, Swift Sports(zc33s) ์ฐจ๋Ÿ‰์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค. (๋ฆฌ๋ทฐ๋ณด๋‹ค๋Š” ์†Œ๊ฐ์— ๋” ๊ฐ€๊นŒ์šธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค…^^)

์ถœ์‹œ๋ถ€ํ„ฐ 3๋…„ ๊ฐ€๋Ÿ‰์ด ์ง€๋‚ฌ์œผ๋‚˜ ํ•œ๊ตญ์–ด๋กœ ๋œ ์‹ค์ œ ์‹œ์Šน๊ธฐ ๋ฐ ํฌ์ŠคํŒ…์€ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ ์ œ๊ฐ€ ํ•œ๋ฒˆ (์†Œ๊ฐ์— ๊ฐ€๊นŒ์šด)์‹œ์Šน๊ธฐ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ณธ์—์„œ๋Š” ์Šค์ฆˆํ‚ค(SUZUKI)๋ผ๋Š” ๋ธŒ๋žœ๋“œ๊ฐ€ ์†Œํ˜•์ฐจ ์‹œ์žฅ์—์„œ ๊ฝค ๋†’์€ ์ ์œ ์œจ์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ตญ๋‚ด ์ˆ˜์ž…์ด ๋˜์ง€ ์•Š๋Š” ๊ด€๊ณ„๋กœ ‘์Šค์ฆˆํ‚ค๋Š” ์˜คํ† ๋ฐ”์ด ํšŒ์‚ฌ ์•„๋‹Œ๊ฐ€?’ ํ•˜์‹œ๋Š” ๋ถ„๋“ค๋„ ๋งŽ์„ ๊ฒƒ ๊ฐ™์€๋ฐ์š”.

์‹ค์ œ๋กœ ์Šค์ฆˆํ‚ค๋Š” ์˜คํ† ๋ฐ”์ด๋ฅผ ์‹œ์ž‘์œผ๋กœ ์‚ฌ์—… ์˜์—ญ์„ ํ™•์žฅํ•ด ์†Œํ˜•์ฐจ ์‹œ์žฅ์— ์ง„์ถœํ•˜์˜€์œผ๋ฉฐ, ‘G๋ฐ”๊ฒ์˜ ์ชผ๊ผฌ๋ฏธ ๋””์ž์ธ’ ์ง๋‹ˆ(JIMNI)๋กœ ํ•œ ๋•Œ ๊ตญ๋‚ด์—์„œ ํ™”์ œ๊ฐ€ ๋œ ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ใ€ˆ๋ฒค์ธ  ์ง€๋ฐ”๊ฒ์˜ ์ชผ๊ผฌ๋ฏธ ๋””์ž์ธ ์ง๋‹ˆ(JIMNI)ใ€‰

ํ•œ ๋†ˆ๋งŒ ํŒจ๋Š” ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ์Šค์ฆˆํ‚ค๋„ ์†Œํ˜•์ฐจ ์‹œ์žฅ์ด๋ผ๋Š” ํ•œ ์šฐ๋ฌผ๋งŒ ํŒนํŒ๋‹ˆ๋‹ค.

์‚ฌ์—… ์ „๋žต์„ ์‚ดํŽด๋ณด๋ฉด ์„ฑ์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ์ค‘๊ตญ ์‹œ์žฅ์€ ๊ณผ๊ฐํ•˜๊ฒŒ ๋ฐœ์„ ๋นผ๊ณ , ์ธ๋„ ์‹œ์žฅ์—์„œ ํŒ๋งค์œจ 1, 2์œ„๋ฅผ ๋‹คํˆฌ๋ฉฐ(ํ˜„๊ธฐ์ฐจ๊ฐ€ ์ตœ๊ทผ ์ธ๋„ ๋‚ด์ˆ˜ ์‹œ์žฅ 1์œ„ ๊ธฐ๋ก) ์ž˜๋˜๋Š” ์‹œ์žฅ์— ์ง‘์ค‘ํ•˜๋Š” ๋ชจ์Šต์ด ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค.


์Šคํฌ์ธ ๋Š” ์ผ๋ฐ˜ ๋ชจ๋ธ์—์„œ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ๋Œ์–ด์˜ฌ๋ฆฌ๊ณ  ์™ธ๋ชจ๋ฅผ (์กฐ๊ธˆ)๋‚ ์นด๋กญ๊ฒŒ ๋‹ค๋“ฌ์€ ๋ฒ„์ „์œผ๋กœ ์ด ์ค‘์—์„œ๋„ ์ˆ˜๋™์€ ์ผ๋ณธ์˜ ์ž๋™์ฐจ ๋งˆ๋‹ˆ์•„ ์ธต์—์„œ ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค(์˜๋งจๆ›ฐ ‘์Šคํฌ์ธ  ๋ชจ๋ธ์€ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„ ์ค‘๊ณ ๊ฐ€ ๋ฐฉ์–ด๊ฐ€ ์ข‹๋‹ค’๊ณ  ๋“ค์—ˆ์œผ๋ฉฐ, ์‹ค์ œ ์ค‘๊ณ  ํŒ๋งค ์‹œ์—๋„ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค).

์ž๋™์ฐจ๋ฅผ ์ข‹์•„ํ•˜๋Š” ์ผ๋ณธ ์นœ๊ตฌ์˜ ์ถ”์ฒœ์œผ๋กœ ์•Œ๊ฒŒ ๋˜๊ณ  ๊ตฌ๋งคํ•˜๊ฒŒ ๋œ ๋ชจ๋ธ๋กœ ๊ทนํžˆ ๊ฐœ์ธ์ ์ธ ์šฉ๋„์™€ ๋งŒ์กฑ๊ฐ์„ ๋”ฐ์กŒ์„ ๋•Œ ๋ณ„ 4.5๊ฐœ๋ฅผ ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์™ธ๊ตญ ๋„ˆํŠœ๋ธŒ ์ „๋ฌธ ์‹œ์Šน๊ธฐ์—์„œ ํ•ธ๋“ค๋ง ๋ฐ ํผํฌ๋จผ์Šค์— ๋Œ€ํ•œ ํ‰์ ์„ ๋ฏธ๋‹ˆ์ฟ ํผS์— ์กฐ๊ธˆ ๋ชป ๋ฏธ์น˜๋Š” ์ •๋„๋กœ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•„ ๋ฏธ๋‹ˆ์ฟ ํผ ์ ˆ๋ฐ˜ ์ •๋„ ๊ฐ€๊ฒฉ์— ์ด ํผํฌ๋จผ์Šค! ๊ฐ€์„ฑ๋น„๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๊ฐ„๋žตํ•˜๊ฒŒ ์ฐจ๋Ÿ‰ ์ œ์›์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ›„์ง€์‚ฐ์ด ๊ฑฐ์šธ์— ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฉ€๋ฆฌ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (2018)

1. ๊ฐ„๋žตํ•œ ์ œ์›

  • B ์„ธ๊ทธ๋จผํŠธ (๋ฏธ๋‹ˆ, ํด๋กœ, ํ”„๋ผ์ด๋“œ, QM3 ๋“ฑ small car ๋ถ„๋ฅ˜ ์นดํ…Œ๊ณ ๋ฆฌ)
  • 5๋„์–ด
  • ์ „๋ฅœ 2WD
  • 6MT, 6AT
  • 970kg (๊ฒฝ๋Ÿ‰ํ™”โ˜…)
  • 17.6km/L (์ผ๋ณธ์˜ ์—ฐ๋น„ ๊ธฐ์ค€. ์ด ๊ธฐ์ค€์€ ์‹ค์—ฐ๋น„๋ณด๋‹ค ๋Œ€๋ถ€๋ถ„ ๋†’์Œ.. 1๋…„๊ฐ„ ํ‰๊ท  ์‹ค์—ฐ๋น„๋Š” 13~14km ๊ธฐ๋ก!)
  • 1,371cc
  • DOHC 16V, TURBO
  • 140ps
  • 195/45 R17
  • ์•ž STRUT / ๋’ค TORSION BEAM
  • ๏ฟฅ1,874,400 ~ ๏ฟฅ2,340,505(ํ™˜์‚ฐ 1,970๋งŒ์›~2,450๋งŒ์›, ์ƒ‰์ƒ ๋ฐ ์™ธ๋ถ€ ํŒŒ์ธ  ์ถ”๊ฐ€์— ๋”ฐ๋ผ ์ตœ๋Œ€ +300๋งŒ์›)
  • https://www.suzuki.co.jp/car/swiftsport/detail/

2. ๊ตฌ๋งค ๊ณผ์ •๊ณผ ์ผ๋ณธ์˜ ์šด์ „๋ฉดํ—ˆ์ฆ

์šฐ์„  ๋ฉดํ—ˆ์— ๋Œ€ํ•ด ๋จผ์ € ์ด์•ผ๊ธฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ผ๋ณธ๊ณผ ํ•œ๊ตญ์€ ์šด์ „ ๋ฉดํ—ˆ ํ˜‘์ •์ด ๋งบ์–ด์ง„ ์ƒํƒœ์ด๋ฏ€๋กœ ์‹œํ—˜์€ ํ•„์š” ์—†์ด ์„œ๋ฅ˜ ์ž‘์—…๋งŒ์œผ๋กœ ํ•œ๊ตญ์˜ ๋ฉดํ—ˆ์ฆ -> ์ผ๋ณธ์˜ ๋ฉดํ—ˆ์ฆ์œผ๋กœ ๋ฐœ๊ธ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์—ฌํ–‰ ๋“ฑ ๋‹จ๊ธฐ๊ฐ„์˜ ์šด์ „์€ ๊ตญ์ œ๋ฉดํ—ˆ์ฆ(๋ณดํ†ต 1๋…„์˜ ์œ ํšจ๊ธฐ๊ฐ„)์œผ๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‹ค์ œ ์ฐจ๋ฅผ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ๊ฑฐ์ฃผํ•˜๋ฉด์„œ ์šด์ „์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ˜„์ง€ ๋ฉดํ—ˆ์ฆ์ด ํ•„์š”ํ•˜๊ธฐ์— ์ผ๋ณธ ๋ฉดํ—ˆ์ฆ์„ ๋ฐœ๊ธ‰๋ฐ›์•˜๋Š”๋ฐ์š”.

์ œ์ถœํ•˜๋Š” ์„œ๋ฅ˜์˜ ๋ฐœ๊ธ‰ ์‹œ๊ธฐ(1๋‹ฌ ์ด๋‚ด, ์šด์ „๋ฉดํ—ˆ์ฆ์ด ์œ ํšจํ•จ์„ ์ธ์ •ํ•˜๋Š” ์„œ๋ฅ˜)๋„ ๋”ฐ์ง€๊ณ  ๋ฐœ๊ธ‰ ๋น„์šฉ(์•ฝ5์ฒœ์—”)๋„ ๋“ค๊ณ , ์‹ฌ์ง€์–ด ๋ฉดํ—ˆ์ฆ ๋ฐœ๊ธ‰ ๊ธฐ๊ด€์˜ ์šด์˜ ์‹œ๊ฐ„๋„ ์ •ํ•ด์ ธ ์žˆ๊ธฐ์— ๋ชฉํ‘œ ์™„์ˆ˜ ํ›„ ‘์•„ ๋“œ๋””์–ด……..’๋ผ๋Š” ๋ง์ด ๋‚˜์˜ต๋‹ˆ๋‹ค…

๋ณดํ†ต์€ ์ผ๋ณธ์—์„œ ์ฐจ๋Ÿ‰์„ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฐจ๊ณ ์ง€ ์ฆ๋ช…์„œ ์ œ์ถœ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฃผ์ฐจํ•  ๊ณณ์ด ์žˆ์œผ๋‹ˆ ๋ถˆ๋ฒ• ์ฃผ์ฐจ๋‚˜ ๊ธธ๊ฑฐ๋ฆฌ์— ์ฐจ๋ฅผ ์งฑ ๋ฐ•์ง€ ์•Š๊ฒ ๋‹ค๋Š” ํ™•์ธ ์„œ๋ฅ˜๋กœ ๋ณด๋ฉด ๋˜๋Š”๋ฐ์š”. ๊ฑฐ์ฃผํ•˜๋Š” ์ง‘์— ์ฃผ์ฐจ์žฅ์ด ์žˆ์œผ๋ฉด ์ฃผ์ธ์—๊ฒŒ ์ฐจ๊ณ ์ง€ ์ฆ๋ช…์„œ๋ฅผ ๋‹ฌ๋ผ๊ณ  ํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ์ง‘ ๊ทผ์ฒ˜(1~2km ์ด๋‚ด) ์œ ๋ฃŒ ์ฃผ์ฐจ์žฅ์— ์›” ์ฃผ์ฐจ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ์„œ๋ฅ˜ ๋ฐœ๊ธ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ณดํ—˜๋ฃŒ์˜ ๊ฒฝ์šฐ ๋ณด์žฅ ๋ฒ”์œ„๋ฅผ ์ตœ๋Œ€๋กœ ํ•˜๊ณ  ์ตœ์ดˆ ๊ฐ€์ž…์ด๋ผ ์›” 1๋งŒ2์ฒœ์—”(1๋…„ ๋ณดํ—˜๋ฃŒ ์•ฝ 150๋งŒ์› ๊ฐ€๋Ÿ‰) ์ •๋„ ๋‚ฉ๋ถ€ํ•˜์˜€์œผ๋ฉฐ, ๊ท€๊ตญ ์‹œ ๋ณดํ—˜๊ฐ€์ž…์ฆ๋ช…์„œ๋ฅผ ๊ฐ€์ ธ์™€ ๊ตญ๋‚ด ๋ณดํ—˜์‚ฌ์—์„œ ํ•ด์™ธ ์šด์ „ ๊ฒฝ๋ ฅ์„ ์ธ์ •๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.


์ €๋Š” ์ง€๊ธˆ ํƒ€๋Š” D ์„ธ๊ทธ๋จผํŠธ ์ฐจ๋Ÿ‰๋„ ์กฐ๊ธˆ ํฌ๋‹ค๊ณ  ๋Š๋‚„ ์ •๋„๋กœ ์ž‘์€ ์ฐจ๋ฅผ ์ข‹์•„ํ•˜๋‹ค๋ณด๋‹ˆ ๋‹น์—ฐํžˆ ์ž‘์€ ์ฐจ์— ๋ˆˆ์ด ๊ฐ€๊ณ  ์ผ๋ณธ์—์„œ๋Š” ์„ ํƒ๊ถŒ์ด ๋งŽ์•„ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

์ผ๋ณธ์€ ์†Œํ˜•์ฐจ ์‹œ์žฅ์ด ์›Œ๋‚™ ์น˜์—ดํ•˜๋‹ค ๋ณด๋‹ˆ ๋ธŒ๋žœ๋“œ ๋ณ„๋กœ ๋ผ์ด๋ฒŒ ์ฐจ๋Ÿ‰์ด ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค.

NISSAN, TOYOTA, SUBARU, MAZDA, HONDA, MINI ๋“ฑ ์‹ค์ œ๋กœ ๊ฐ€๊ฒฉ๋Œ€ ํ˜น์€ ํผํฌ๋จผ์Šค๋กœ ๋ณด๋ฉด ๋ผ์ด๋ฒŒ์€ ๋งŽ์ง€๋งŒ ์ฝ”์ŠคํŒŒ(ใ‚ณใ‚นใƒ‘, Cost Performance:๊ฐ€์„ฑ๋น„)๋กœ ์••๋„์  ํ‰๊ฐ€๋ฅผ ๋ฐ›๋Š” ์ด ๋ชจ๋ธ์€ ์‹œ์Šน ๊ฐ”๋‹ค๊ฐ€ ๋ฐ”๋กœ ๊ณ„์•ฝ์„œ๋ฅผ ์“ฐ๊ณ  ๋ง์•˜์Šต๋‹ˆ๋‹ค.

2018๋…„ 6์›” ๋‹น์‹œ ์ถœ์‹œ๋œ ์ง€ ๋ฐ˜๋…„ ์ •๋„ ๋ฐ–์— ์ง€๋‚˜์ง€ ์•Š์€ ์ƒํ™ฉ์— ์ธ๊ธฐ ์ฐจ์ข…์ด๋ผ ์•ฝ 3~6๊ฐœ์›” ๊ฐ€๋Ÿ‰ ๋Œ€๊ธฐ๋ฅผ ์•ˆ๋‚ด๋ฅผ ๋ฐ›์•˜์œผ๋‚˜, ํƒ€ ๊ณ„์•ฝ์ž์˜ ์ฃผ๋ฌธ ์ทจ์†Œ๋กœ ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋ฅธ 1๊ฐœ์›” ๋ฐ˜ ๋งŒ์— ๋‚ฉ์ฐจ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค(์ด ๋•Œ๋Š” ์ฝ”๋กœ๋‚˜ ์ „์ด๊ณ  ๊ตญ์‚ฐ ๋ชจ๋ธ์ด๋ผ 3~6๊ฐœ์›”์€ ์งง์€ ์‹œ๊ฐ„์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค).

ํ•ด๊ฐ€ ๋œจ๋ˆ๋œจ๋ˆํ•˜๋˜ 8์›”์— ๋งŒ๋‚œ ์นœ๊ตฌ

์ƒ์•  ์ฒซ ์ฐจ๋ฅผ ๋งŒ๋‚˜๋Š” ๊ธฐ์จ์€ ๋ฌด์—‡๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?๐Ÿ˜‹

LHD(Left Hand Drive)์ธ ๊ตญ๋‚ด ์ฐจ๋Ÿ‰ ๊ตฌ์กฐ์™€ ๋‹ฌ๋ฆฌ ์ผ๋ณธ์€ RHD์ด๋ฏ€๋กœ ์šด์ „์„์ด ์˜ค๋ฅธ์ชฝ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค ๋ฐ˜๋Œ€๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์—‘์…€๊ณผ ๋ธŒ๋ ˆ์ดํฌ ์œ„์น˜๋งŒ ๋นผ๊ตฌ์š”. ์—‘์…€(์˜ค๋ฅธ์ชฝ)๊ณผ ๋ธŒ๋ ˆ์ดํฌ(์™ผ์ชฝ)์˜ ์œ„์น˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


3. ๋‚ด๋ถ€ ์‚ดํŽด๋ณด๊ธฐ

์šด์ „์„์€ ์ด๋Ÿฐ ๋Š๋‚Œ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ผ์Šคํ‹ฑ ๊ฐ์„ฑ์— ์˜ˆ๋ฏผํ•˜์ง„ ์•Š์ง€๋งŒ ํ™•์‹คํžˆ ๊ณ ๊ธ‰์Šค๋Ÿฌ์šด ์†Œ์žฌ์™€ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ ์€ ๊ฝค ์•„์‰ฌ์› ์œผ๋‚˜ ๊ฐ€๊ฒฉ์œผ๋กœ ํƒ€ํ˜‘!

์ฐจ๋Ÿ‰์€ 5์ธ์Šน์ด์ง€๋งŒ ์—ญ์‹œ 2๋ช…์ด์„œ ํƒˆ ๋•Œ๊ฐ€ ๊ฐ€์žฅ ํŽธ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์šฉ์„ฑ(ํ”Œ๋ผ์Šคํ‹ฑ)๊ณผ ํผํฌ๋จผ์Šค(๋ ˆ๋“œ ํ…Œ๋งˆ)๋ฅผ ์ค‘์‹œํ•˜๋Š” ์‹ค๋‚ด ์žฌ์งˆ๊ณผ ์ปฌ๋Ÿฌ

๋„ค๋น„๊ฒŒ์ด์…˜์€ ์„œ๋ผ์šด๋“œ ์นด๋ฉ”๋ผ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ์˜ต์…˜ ์‚ฌํ•ญ์ธ๋ฐ์š”.

๋„ค๋น„๊ฒŒ์ด์…˜์˜ ํ„ฐ์น˜๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋Ÿฌ๋ธ”๋ฆฌํ•˜์ง€๋Š” ๋ชปํ•˜๊ณ , ๋ˆ„๋ฅด๋Š” ํ‚ค๋Š” ์•ฝ๊ฐ„ 90๋…„๋Œ€์˜ ๊ฐ์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ ์„œ๋ผ์šด๋“œ ๋ทฐ๋ฅผ ์ ‘ํ–ˆ์„ ๋•Œ์˜ ๋Š๋‚Œ์€ ๋„ˆ๋ฌด ์‹ ์„ ํ•œ ์ถฉ๊ฒฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋„ˆ๋ฌด๋„ ํ”ํ•˜๊ณ  ์—„์ฒญ๋‚œ ํ™”์งˆ์„ ์ž๋ž‘ํ•˜๋Š” ์ฐจ๋Ÿ‰๋“ค๋„ ๋งŽ์ง€๋งŒ์š”.

์ฐจ๋ฅผ ๊ตฌ๋งคํ•˜๊ณ  ๋„ฃ์€ ์˜ต์…˜ ์ค‘ ์ œ์ผ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์˜ต์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณ„๊ธฐํŒ ์—ญ์‹œ ์Šคํฌ์ธ  ๋ชจ๋ธ ๋‹ต๊ฒŒ ๋นจ๊ฐ„ ์ƒ‰์ƒ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ์ธ ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๊ฐ€์†”๋ฆฐ ๋˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ชจ๋ธ์€ ์ดˆ๋ก์ƒ‰ ๋˜๋Š” ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์ƒ‰์ƒ์˜ ๋ณ€๊ฒฝ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์—ฐ๋น„๊ฐ€ ๊ถ๊ธˆํ•˜์‹คํ…๋ฐ์š”.

๊ณ ๊ธ‰ํœ˜๋ฐœ์œ (ํ•˜์ด์˜คํฌ, High-Octane) ๊ถŒ์žฅ์œผ๋กœ, ์ˆ˜๋™ ๋ชจ๋ธ ๊ณ ๊ธ‰ํœ˜๋ฐœ์œ  ๊ธฐ์ค€ ๋„์‹ฌ 13km, ๊ณ ์†๋„๋กœ 15~18km ์ •๋„๋กœ ํ‰๊ท  ์—ฐ๋น„๋Š” 14~15km ์ •๋„๊ฐ€ ๋‚˜์™€ ์Šคํฌ์ธ  ๋ชจ๋ธ๋กœ๋Š” ์•„์ฃผ ์ค€์ˆ˜ํ•œ ์ˆ˜์ค€์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํผํฌ๋จผ์Šค๋ฅผ ์ค‘์‹œํ•˜๋Š” ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•ด๋„ ์ˆ˜๋™ ๊ธฐ์–ด์— ๊ณต์ฐจ์ค‘๋Ÿ‰์ด ๊ฐ€๋ณ๋‹ค๋ณด๋‹ˆ ๊ด€๋ จ ์นดํŽ˜์—์„œ๋Š” ํ‰๊ท ์—ฐ๋น„ 18~21km๋ฅผ ์ž๋ž‘ํ•˜๋Š” ์˜ค๋„ˆ๋“ค๋„ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์—ฐ๋น„ ๋Œ€์‹  ์ •์‹  ๊ฑด๊ฐ•์„ ํƒํ–ˆ์ง€๋งŒ์š”.

์ˆ˜๋™ 6๋‹จ ๊ธฐ์–ด๋Š” ๋ถ€๋“œ๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋ณ€์† ์‹œ์ ์ด๋‚˜ ํด๋Ÿฌ์น˜ ์กฐ์ž‘์— ๋”ฐ๋ผ ๋ง๋„ ํƒ€๊ณ … ์‹œ๋™์ด ๊บผ์ง€๊ธฐ๋„ ํ•˜์ง€๋งŒ์š”.

3๋‹จ๋ถ€ํ„ฐ 4๋‹จ๊นŒ์ง€๊ฐ€ ๊ฐ€์žฅ ์ฆ๊ฑฐ์šด ๊ตฌ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ์ธ  ์ „์šฉ ํœ ์ž…๋‹ˆ๋‹ค.

๊น”๋”ํ•˜์ฃ ?

์—”์ง„๋ฃธ ๊ตฌ์กฐ๋Š” ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ •๊ธฐ ์ ๊ฒ€ ํ”„๋กœ๊ทธ๋žจ์— ๊ฐ€์ž…์ด ๋˜์–ด ์žˆ๋‹ค ๋ณด๋‹ˆ ๋•Œ ๋˜๋ฉด ์—ฐ๋ฝ ์™€์„œ ์ ๊ฒ€ ์˜ˆ์•ฝํ•˜๊ณ  ์ ๊ฒ€ ์‹œ ์†Œ๋ชจํ’ˆ ๊ตํ™˜์ด๋‚˜ ์—”์ง„ ์˜ค์ผ ๊ตํ™˜ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋‹ˆ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. (3๊ฐœ์›”, ๋ฐ˜๋…„, 1๋…„, 1๋…„ ๋ฐ˜ ๋“ฑ 2๋…„ ๊ฐ„ ์ •๊ธฐ ์ ๊ฒ€ ํ”„๋กœ๊ทธ๋žจ์ด์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•˜๊ณ , ๋น„์šฉ์€ 5๋งŒ์—” ์ •๋„์˜€๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•ฉ๋‹ˆ๋‹ค.)

6๋ฐ• 7์ผ๊ฐ„ ํ˜ผ์ž ์ฐจ๋ฐ• ์—ฌํ–‰์„ ๋‹ค๋…€์˜จ ์ง์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋’ท์ž๋ฆฌ์—๋„ ์ง์ด ๊ฐ€๋“ํ•˜์ง€๋งŒ์š”.

์š”์ฝ”ํ•˜๋งˆ(ๆจชๆตœ)์—์„œ ์ถœ๋ฐœํ•ด ํ•˜๋งˆ๋งˆ์ธ (ๆตœๆพ), ๋‚˜๋ผ(ๅฅˆ่‰ฏ), ์ฝ”๋ฒ (็ฅžๆˆธ), ์˜ค์‚ฌ์นด(ๅคง้˜ช), ํšจ๊ณ (ๅ…ตๅบซ)๋ฅผ ๋Œ์•„ ์•ฝ 1,500km์˜ ์ผ์ •์œผ๋กœ ๋‹ค๋…€์™”๋Š”๋ฐ์š”.

๊ด€๋ จ ๋‚ด์šฉ์€ ๋‚˜์ค‘์— ๋ณ„๋„๋กœ ํฌ์ŠคํŒ… ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋’ท์ž๋ฆฌ ์‹œํŠธ๊ฐ€ ์ ‘ํžˆ๊ณ  ํŠธ๋ ํฌ ์ง์ด ์•ˆ ๋ณด์ด๋„๋ก ํ•ด์ฃผ๋Š” ๊ฐ€๋ฆผ๋ง‰๋„ ํƒˆ๋ถ€์ฐฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ณ  ๋–ผ๋ฉด ๋ณด๊ธฐ๋ณด๋‹ค๋Š” ๋งŽ์€ ์ง์˜ ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


4. ์™ธ๋ถ€ ์‚ดํŽด๋ณด๊ธฐ

๋’คํ†ต์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‚ ์Œ˜๋Œ์ด์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋‚˜์š”?

๋„“๋”” ๋„“์€ ๊ณต์› ์ฃผ์ฐจ์žฅ์— ์ฐจ๋ฅผ ์„ธ์šฐ๊ณ  ์ž ์‹œ ์‚ฐ์ฑ…์„ ๋‹ค๋…€์™”๋Š”๋ฐ์š”.

๋‚˜๊ฐ€๋…ธ์—์„œ ์˜จ ์นœ๊ตฌ๊ฐ€ ์ผ๋ถ€๋Ÿฌ ๋ฐ”๋กœ ์˜†์— ์ฃผ์ฐจ๋ฅผ ํ•ด ๋†“๊ณ  ๊ฐ”๋„ค์š”.

๊ฐ™์€ ์ฐจ๋ฅผ ๋งŒ๋‚œ ๊ฒŒ ๋ฐ˜๊ฐ€์›Œ์„œ ์•„๋Š” ์ฒ™ํ•˜๋Š” ๊ฐ•์•„์ง€ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

๋น„์˜ค๋Š” ๋‚ ์—๋Š” ์ด๋ ‡๊ฒŒ ์ด‰์ด‰ํ•˜๊ฒŒ ๋น„๋„ ๋งž๊ตฌ์š”.

๋“œ๋Ÿฌ์šด ๋‚ ์—” ์ด๋ ‡๊ฒŒ ๊ฑฐํ’ˆ๋„ ๋งž์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๊ธฐ๋ถ„ ์ข‹์€ ๋‚ ์—” ์ด๋ ‡๊ฒŒ ์ผ๊ด‘์š•๋„ ํ•˜๊ตฌ์š”.

ํ›„์ง€์‚ฐ ์ดฌ์˜ ์ŠคํŒŸ์—์„œ ์ฐจ๋ฅผ ์„ธ์šฐ๊ณ  ๋น„๋ฃจํ•œ ์‹ค๋ ฅ์œผ๋กœ ํ•œ ์ปท ๋ฝ‘์•˜๋Š”๋ฐ์š”.

ํ•‘ํฌ๋น› ๊ตฌ๋ฆ„์ด ์‚ฐ๋จธ๋ฆฌ์— ๊ฑธ๋ ค์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


5. ์žฅ๋‹จ์  ์‚ดํŽด๋ณด๊ธฐ

์žฅ์ 

  • ์ฃผํ–‰ ์„ฑ๋Šฅ : ๊ฐ€๋ฒผ์šด ์ฐจ์ฒด์™€ ํ„ฐ๋ณด ์—”์ง„์˜ ๋งŒ๋‚จ ๊ทธ๋ฆฌ๊ณ  ์„ธํŒ…
  • ์—ฐ๋น„ : ๊ณ ๊ธ‰ํœ˜๋ฐœ์œ ๋„ ๋‘๋ ต์ง€ ์•Š์€ ์—ฐ๋น„
  • ๊ฐ€๊ฒฉ : ์•„๋ฆ„๋‹ค์šด ๊ฐ€์„ฑ๋น„
  • ์™ธ๋ถ€ ๋””์ž์ธ : ํ˜ธ๋ถˆํ˜ธ๊ฐ€ ๋‚˜๋‰˜์ง€๋งŒ ๊ฐœ์ธ์  ๅฅฝ
  • ์ค‘๊ณ  ๊ฐ€๊ฒฉ ๋ฐฉ์–ด : ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ์ฐจ๋Ÿ‰์œผ๋กœ ๋†’์€ ์ค‘๊ณ  ๊ฐ€๊ฒฉ ๋ผ์ธ

๋‹จ์ 

  • ์‹ค๋‚ด ๋””์ž์ธ๊ณผ ์žฌ์งˆ : ์•„๋ฆ„๋‹ต์ง€ ์•Š์€ ํ”Œ๋ผ์Šคํ‹ฑ ๋งˆ๊ฐ
  • ํŽธ์˜ ์š”์†Œ : ์—‰์ฐจ ๋ถ€์žฌ, ํ›„๋ฐฉ ์ถฉ๋Œ ๋ณด์กฐ ์„ผ์„œ ๋ถ€์žฌ , ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด์™€ ์‚ฌ์šด๋“œ์˜ ์•„์‰ฌ์›€
  • ์ข์€ ์‹ค๋‚ด : ์‚ฌ๋žŒ์— ๋”ฐ๋ผ ๋‹ค์†Œ ์ข์„ ์ˆ˜ ์žˆ๋Š” ์‹ค๋‚ด
  • ์•ฝํ•œ ๋„์žฅ : ์ƒ๊ฐ๋ณด๋‹ค ์‹ค๊ธฐ์Šค์™€ ์ž”๊ธฐ์Šค, ์ฐํž˜์ด ์‰ฝ๊ฒŒ ์ƒ๊ธฐ๋Š” ์•ฝํ•œ ๋„์žฅ๋ฉด

6. ์ข…ํ•ฉ ์ •๋ฆฌ

์ผ๋ณธ์˜ ๋„๋กœ๋Š” ์šฐ๋ฆฌ๋‚˜๋ผ๋งŒํผ ๋‹จ์† ์นด๋ฉ”๋ผ๊ฐ€ ๋งŽ์ง€ ์•Š์ง€๋งŒ ์ œํ•œ ์†๋„๊ฐ€ ๋‚ฎ๊ณ  ์•”ํ–‰ ๊ฒฝ์ฐฐ(ํ† Xํƒ€ ์‚ฌ์˜ ํฌ๋ผX ํฐ์ƒ‰ ๋ชจ๋ธ์„ ๊ณ ์†๋„๋กœ์—์„œ ์กฐ์‹ฌํ•˜๋ผ๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹คใ…Žใ…Ž ๊ฑธ๋ฆฌ๋ฉด ๋ฒŒ๊ธˆ ์•ก์ˆ˜๊ฐ€ ๋ช‡๋งŒ์—”(๋ช‡์‹ญ๋งŒ์›)๊นŒ์ง€ ๊ฐ„๋‹ค๊ณ  ํ•˜๋„ค์š”.. ์ฃผ์ฐจ์œ„๋ฐ˜ ๋ฒŒ๊ธˆ ๋˜ํ•œ 1๋งŒ์—”(11๋งŒ์›)์ด ๋„˜๊ตฌ์š”..)์ด ๋งŽ์•„ ๊ณ ์†์œผ๋กœ ๋‹ฌ๋ฆด ๊ธฐํšŒ๋Š” ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ ์ œํ•œ ์†๋„ ๋‚ด์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์žฌ๋ฏธ์žˆ๊ฒŒ ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ฐจ๋Ÿ‰์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ •์ด ์žˆ์–ด ๋”ฑ 1๋…„๋งŒ์— ์ฐจ๋Ÿ‰์„ ํŒ๋งคํ•˜๊ณ  ๊ท€๊ตญํ•˜๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ฐจ๋Ÿ‰์„ ํƒ€๋Š” ์ง€๊ธˆ๋„ ์ž์ฃผ ์ƒ๊ฐ๋‚˜๊ณ  ๊ทธ๋ฆฌ์šด ์ฐจ๋Ÿ‰์ž…๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ผ๋ณธ์— ๊ณ„์‹œ๊ฑฐ๋‚˜ ํ•ด์™ธ์— ๊ณ„์‹  ๋ถ„๋“ค ์ค‘ ์ฐจ๋Ÿ‰ ๊ตฌ๋งค๋ฅผ ๊ณ ๋ฏผํ•˜๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ฐจ๊ฐ€ ๋งŽ์ด ๋ง‰ํžˆ๋Š” ๊ณณ์— ์‚ด๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ์ˆ˜๋™์€ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ฏผํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.๐Ÿ˜‚

๋งˆ์ง€๋ง‰์œผ๋กœ ์ธํ„ฐ๋„ท์— ๋Œ์•„๋‹ค๋‹ˆ๋Š” ์ปจ๋ฒ„ํ„ฐ๋ธ” ์‚ฌ์ง„์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋‹ˆ์ฟ ํผ ์ปจ๋ฒ„ํ„ฐ๋ธ”์ด ์ƒ๊ฐ๋‚˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ถœ์‹œ๋˜๋Š” ๋ชจ๋ธ์€ ์•„๋‹ˆ๊ณ  ๋ Œ๋”๋ง๋งŒ ๊ทธ๋ ค ๋†“์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์€ BMW Z4 ๋ชจ๋ธ์— ์Šค์œ„ํ”„ํŠธ๋ฅผ ๋ฏน์Šคํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํ•˜๋„ค์š”.

์ด์ƒ์ž…๋‹ˆ๋‹ค.

์‰ฝ๊ณ  ๋น ๋ฅธ ์ •๊ทœํ‘œํ˜„์‹(Easy Regular Expression, regex)

์ •๊ทœํ‘œํ˜„์‹(Regular Expression)์˜ ๊ตฌ์„ฑ๊ณผ ์˜๋ฏธ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

์ •๊ทœํ‘œํ˜„์‹(Regex)์€ ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์ง€์ •ํ•˜์—ฌ ๊ธฐํ˜ธ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐœ๋…์€ ๋ฏธ๊ตญ์˜ ์ˆ˜ํ•™์ž์ธ Stephen Cole Kleene๊ฐ€ 1950๋…„๋Œ€์— ์ •์˜ํ•œ ์ •๊ทœ ์–ธ์–ด(Regular Language)์™€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, ์ •๊ทœํ‘œํ˜„์‹ ๋ฌธ๋ฒ•์€ 1980๋…„๋Œ€ Perl์—์„œ๋ถ€ํ„ฐ ์‚ฌ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋กœ ๊ฒ€์ƒ‰ ๋˜๋Š” ์น˜ํ™˜ ์ž‘์—…์— ์‚ฌ์šฉ๋˜๋ฉฐ, ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ •๊ทœํ‘œํ˜„์‹์„ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋ฌธ์žฅ์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ, ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.

  • too๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ -> /too/
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด t๋ฅผ ๋ชจ๋‘ ์ฐพ๊ณ ์ž ํ•  ๋•Œ -> /t/-gi
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • d๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด ๋ฐ ๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ์ฐพ๊ณ ์ž ํ•  ๋•Œ -> /[d]\w+/-gi
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.
  • ea๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋‹จ์–ด๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ -> /[a-z]*ea[a-z]*/-i
    The greatest danger for most of us is not that our aim is too high and we miss it, but that it is too low and we reach it.

๋‹ค์Œ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜๋„ํ•œ ๋Œ€๋กœ ์ •๊ทœํ‘œํ˜„์‹์ด ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

regexr.com

Expression ์•„๋ž˜์— ์‹์„ ์‚ฝ์ž…ํ•˜๊ณ , ๊ทธ ์•„๋ž˜ ์ƒ์ž์—๋Š” ๊ฒ€์ƒ‰ ๋Œ€์ƒ์ด ๋  ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋จผ์ € ํ‘œํ˜„์‹์ด ๋‚˜ํƒ€๋‚ด๋Š” ์˜๋ฏธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ ๋’ค, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ์ •๊ทœํ‘œํ˜„์‹ ๊ธฐํ˜ธ์˜ ์ข…๋ฅ˜

  • / . / โ†’ ๋ชจ๋“  ๋ฌธ์ž
  • / + / โ†’ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž
  • / ? / โ†’ 0 ๊ฐœ ๋˜๋Š” 1๊ฐœ์˜ ๋ฌธ์ž
  • / ^ / โ†’ ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ์ œ์™ธ
  • / / โ†’ ๋ฒ”์œ„ ์ง€์ •
  • / * / โ†’ 0 ๊ฐœ ๋˜๋Š” 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž
  • / [ ] / โ†’ ์ง‘ํ•ฉ ๊ตฌ์„ฑ
  • / { } / โ†’ ๋ฐ˜๋ณต ํšŸ์ˆ˜ ์ง€์ •
  • / \ / โ†’ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž
  • / \d / โ†’ ๋ชจ๋“  ์ˆซ์ž
  • / \D / โ†’ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž
  • / \w / โ†’ ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ๋ฐ‘์ค„_ ๋ฌธ์ž
  • / \W / โ†’ ์•ŒํŒŒ๋ฒณ, ์ˆซ์ž, ๋ฐ‘์ค„_์ด ์•„๋‹Œ ๋ฌธ์ž
  • / \s / โ†’ ๊ณต๋ฐฑ ๋ฌธ์ž
  • / \S / โ†’ ๊ณต๋ฐฑ์ด ์•„๋‹Œ ๋ฌธ์ž
  • / \n / โ†’ ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž

์ •๊ทœํ‘œํ˜„์‹์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ธฐํ˜ธ์™€ ์˜๋ฏธ๋Š” ์œ„์™€ ๊ฐ™์œผ๋ฉฐ, ์œ„ ๊ธฐํ˜ธ์˜ ์‚ฌ์šฉ๋ฒ•๋งŒ ์ตํžŒ๋‹ค๋ฉด ์ •๊ทœํ‘œํ˜„์‹์˜ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋Š” ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๊ฐ ๊ธฐํ˜ธ์˜ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋ฒ•์„ ์ตํ˜€๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


2. ๊ธฐํ˜ธ์˜ ์˜๋ฏธ

์ •๊ทœ ํ‘œํ˜„์‹์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์ด๋ฏ€๋กœ ์™ธ์›Œ๋‘๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. d๋Š” ์ˆซ์ž, w๋Š” ์˜๋ฌธ์ž, ์ˆซ์ž, _, s๋Š” ๊ณต๋ฐฑ, n์€ ์ค„๋ฐ”๊ฟˆ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ฐ ๋‹จ์–ด์˜ ๋Œ€๋ฌธ์ž๋Š” NOT(๋ฐ˜๋Œ€)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ์ˆซ์ž๊ฐ€ ํ•œ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [\d]+ /
  • ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๊ฒ€์ƒ‰(๊ณต๋ฐฑ ํฌํ•จ) ๐Ÿ‘‰ / [\D] /
  • ๊ด„ํ˜ธ๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž, ์ˆซ์ž ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / \([\w]+\) /
  • ์˜๋ฌธ์ž, ์ˆซ์ž, _ ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [\W]+ /
  • ๊ณต๋ฐฑ์„ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / \s /

regexr.com์— ๊ฒ€์ƒ‰ํ•  ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฌธ์žฅ์„ ๋ถ™์—ฌ ๋„ฃ๊ฑฐ๋‚˜ ์ง์ ‘ ์ž‘์„ฑํ•œ ๋’ค ์›ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ํ‘œํ˜„์‹์„ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋ฉด ์ •๊ทœ ํ‘œํ˜„์‹์— ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด์Šค์ผ€์ดํ”„๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ํ‚ค๋ณด๋“œ ์™ผ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ESC ๋ฒ„ํŠผ์ด ์ด์Šค์ผ€์ดํ”„์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋ฒ—์–ด๋‚˜๋‹ค๋Š” ๋œป์ธ๋ฐ์š”.

์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ์กด์— ์ง€์ •๋œ ์•ฝ์†์—์„œ ๋ฒ—์–ด๋‚œ๋‹ค๋Š” ๋œป์œผ๋กœ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ .(๋งˆ์นจํ‘œ, dot)์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋œป์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ๊ธ€์ž ๊ทธ๋Œ€๋กœ ๋งˆ์นจํ‘œ ๊ธฐํ˜ธ๋ฅผ ์˜๋ฏธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ์š”. ์ด ๋•Œ ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ‘์šฐ๋ฆฌ ์•ฝ์†ํ–ˆ๋˜ ๊ฒƒ์—์„œ ๋ฒ—์–ด๋‚˜์ž’๋Š” ๋œป์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์˜๋ฏธ. a, b, c, d, ?, !, @, , ๋“ฑ ๋ชจ๋“  ๋ฌธ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜๋ฏธ ๐Ÿ‘‰ / . /
  • ์˜ค์ง .(๋งˆ์นจํ‘œ)๋งŒ์„ ์˜๋ฏธ ๐Ÿ‘‰ / \. /
  • ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž๋ฅผ ์˜๋ฏธ ๐Ÿ‘‰ / + /
  • ์˜ค์ง +(ํ”Œ๋Ÿฌ์Šค)๋งŒ์„ ์˜๋ฏธ ๐Ÿ‘‰ / \+ /

์ด์Šค์ผ€์ดํ”„๋Š” ๋งค์šฐ ์œ ์šฉํ•œ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์ด์Šค์ผ€์ดํ”„๊ฐ€ ํ•„์š”ํ•œ ๋ฌธ์ž๋ฅผ ํ™•์ธํ•ด ๋‘˜ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์ •๊ทœ ํ‘œํ˜„์‹์—์„œ ํŠน์ • ๊ธฐํ˜ธ๋Š” ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ธฐํ˜ธ์˜ ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์†Œ๋ฌธ์ž a~z ๋˜๋Š” ๋Œ€๋ฌธ์ž A~Z ๋‚ด ์ผ์น˜ํ•˜๋Š” ์˜๋ฌธ์ž ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [a-zA-Z] /
  • color ๋˜๋Š” colour๋ฅผ ๊ฒ€์ƒ‰(u๊ฐ€ ์žˆ์–ด๋„ ๋˜๊ณ  ์—†์–ด๋„ ๋จ) ๐Ÿ‘‰ / colou?r /
  • a๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹จ์–ด ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [\S]*a[a-zA-Z]* /
  • a-z ๋˜๋Š” ๊ณต๋ฐฑ(space)์ด ์•„๋‹Œ ๋ฌธ์ž ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [^a-z ] /
  • ์˜๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ ์ˆซ์ž ๋˜๋Š” ํŠน์ˆ˜ ๊ธฐํ˜ธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [a-zA-Z]+[\d!@#\$%\^*]+[\w]* /

์ค‘๊ด„ํ˜ธ๋Š” ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์ƒ‰ ํŒจํ„ด์˜ ์ƒ์„ธํ•œ ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ด„ํ˜ธ์— ํ•˜๋‚˜์˜ ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ์ „์ฒด ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋Š” ์‹œ์ž‘๊ณผ ๋์˜ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด {3}์ด๋ฉด ํŒจํ„ด์„ 3๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, {1, 3}์€ ๋ฒ”์œ„ ๊ตฌ๊ฐ„์ด 1์—์„œ 3๊นŒ์ง€์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

{1, }๊ณผ ๊ฐ™์€ ํ‘œํ˜„๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ด๋Š” + ๊ธฐํ˜ธ์™€ ๊ฐ™์€ ์˜๋ฏธ, ์ฆ‰ ํ•˜๋‚˜ ์ด์ƒ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

  • A๊ฐ€ 3๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ / [A]{3} /
  • 3์ž๋ฆฌ ์ด์ƒ์ธ ์ˆซ์ž๋ฅผ ๊ฒ€์ƒ‰(3๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต) ๐Ÿ‘‰ / [\d]{3,} /
  • A๊ฐ€ 2๋ฒˆ์—์„œ 3๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰(๋ฐ˜๋ณต ๋ฒ”์œ„ ์ง€์ •) ๐Ÿ‘‰ / [A]{2,3} /

๋ฐ˜๋ณต ํšŸ์ˆ˜๋งŒ ์ง€์ •ํ•˜๋ฉด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋„ ํ•จ๊ป˜ ๊ฒ€์ƒ‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ํ•˜์œ„ํ‘œํ˜„์‹ ๋ฐ ์ „ํ›„๋ฐฉ ํƒ์ƒ‰๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ ํšจ๊ณผ์ ์ธ ํŒจํ„ด์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๋Œ€๊ด„ํ˜ธ ๋‚ด ๊ธฐ์žฌ๋œ ๊ธฐํ˜ธ๋กœ ๊ฒ€์ƒ‰ํ•  ํŒจํ„ด์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํ˜ธ๋ฅผ ์ง์ ‘ ๊ธฐ์ž…ํ•˜๊ฑฐ๋‚˜ ๋ฒ”์œ„ ์ง€์ • ๊ธฐํ˜ธ์ธ -๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์ •ํ•œ ๋ฌธ์ž(a ๋˜๋Š” A ๋˜๋Š” b ๋˜๋Š” B ๋˜๋Š” c ๋ฌธ์ž)๋ฅผ ํ•˜๋‚˜ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ [aAbBc]
  • a์—์„œ e๊นŒ์ง€(a,b,c,d,e)์˜ ๋ฒ”์œ„ ๋‚ด ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ [a-e]
  • ์ œ์™ธ ๋ฌธ์ž์ธ ^๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ a-z ๋ฒ”์œ„์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๋ฌธ์ž ๋˜๋Š” ๊ธฐํ˜ธ๋ฅผ ํ•˜๋‚˜ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ [^a-z]
  • ์ง€์ • ๊ธฐํ˜ธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ ๐Ÿ‘‰ [?!@#$%^&*()_]
  • c ๋˜๋Š” C๋กœ ์‹œ์ž‘ํ•˜์—ฌ, a-z ์ค‘ ํ•˜๋‚˜๋กœ ๋๋‚˜๋Š” ๋‹จ์–ด ๊ฒ€์ƒ‰ ๐Ÿ‘‰ [cC][a-z]

[ ] ๋‚ด ๊ธฐ์žฌ๋œ ๊ธฐํ˜ธ๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž ๋˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐํ˜ธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฏ€๋กœ ํ•œ ๊ธ€์ž ์ด์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” +(ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž) ๋˜๋Š” *(0๊ฐœ ๋˜๋Š” 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž)๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ ๊ฐœ ์ด์ƒ์˜ a-z ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰(๋ฐ˜๋“œ์‹œ 1 ๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋Š” ์กฐ๊ฑด) ๐Ÿ‘‰ [a-z]+
  • 0 ๊ฐœ ์ด์ƒ์˜ A-Z ๋ฌธ์ž๋ฅผ ๊ฒ€์ƒ‰(์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ์กฐ๊ฑด) ๐Ÿ‘‰ [A-Z]*

์œ„ ์กฐ๊ฑด์€ ํŠน์ • ๊ตฌ์„ฑ์„ ๊ฐ–๋Š” ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์— ํšจ๊ณผ์ ์ด๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹์ธ abcd@xyz.com์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]+/

ํŒจํ„ด์„ ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ด๋ฉ”์ผ์˜ ์•„์ด๋””์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์€ ์˜๋ฌธ์ž ๋ฐ ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ [a-zA-Z0-9]๋กœ ์‹œ์ž‘ํ•˜๊ณ , ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž์ด๋ฏ€๋กœ +๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค.

์•„์ด๋””๊ฐ€ ๋๋‚˜๋Š” ๋ถ€๋ถ„์— @๊ฐ€ ๋”ฐ๋ผ์˜ค๋ฏ€๋กœ @๋ฅผ ๊ธฐ์ž…ํ•˜๊ณ , ๋’ค์˜ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ ์—ญ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜๋ฌธ์ž์™€ ์ˆซ์ž๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

.com ํ˜•์‹์˜ ์ฃผ์†Œ์ด๋ฏ€๋กœ .(๋งˆ์นจํ‘œ, dot)๋ฌธ์ž์™€ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ด์Šค์ผ€์ดํ”„๋กœ .(๋งˆ์นจํ‘œ, dot)์„ ์ง€์ •ํ•ด์ฃผ๊ณ , ๋‹ค์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜๋ฌธ์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ด๋ฉ”์ผ ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์•„์ด๋””์— .(๋งˆ์นจํ‘œ, dot)์ด ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๊ฐ€ .co.kr์˜ ํ˜•์‹์ด ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์œ„ ํŒจํ„ด์—์„œ ์•ฝ๊ฐ„์˜ ์‘์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.



3. ์ข…ํ•ฉ ์ •๋ฆฌ

์ •๊ทœ ํ‘œํ˜„์‹์€ ์ฒ˜์Œ ๋ณด๋ฉด ๋งˆ์น˜ ์™ธ๊ณ„์–ด์ฒ˜๋Ÿผ ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅธ ๋ชจ์Šต์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ๋œป ๋‹ค๊ฐ€๊ฐ€๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€๊ฐ์ด ๋“ค๊ธฐ๋„ ํ•˜๋Š”๋ฐ์š”. ์•Œ๊ณ ๋‚˜๋ฉด ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ณ  ๊ทœ์น™์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋งˆ์Œ์ด ๋†“์ด๊ธฐ๋„ ํ•˜๊ณ  ๊ฒ€์ƒ‰์— ์‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋งŽ์€ ๊ฒƒ์„ ๊นจ๋‹ซ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์†Œ๊ฐœํ•œ ๋ถ€๋ถ„์€ ์•„์ฃผ ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„์ด๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋Šฅ์„ ์†Œ๊ฐœํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๋žตํ•œ ์ƒ˜ํ”Œ ํŒจํ„ด์ด๋ฏ€๋กœ ์ •๋ง ์›ํ•˜๋Š” ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ตํ˜€์•ผ ํ•˜๊ณ  ๊ฒ€์ƒ‰ ํŒจํ„ด๋„ ๋ณด์™„๋˜์–ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฌธ์˜ ์‚ฌํ•ญ์ด๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ์‚ฌ์šฉํ•˜๊ธฐ(Beautiful Destructuring in JS)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”(Object Destructuring)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•„๋ฆ„๋‹ค์šด ๋ฐฉ๋ฒ•
from. How to Use Object Destructuring in Javascript(Dmitri Pavlutin)

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น(Destructuring Assignment)์ด๋ž€ ๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด ์•ˆ์˜ ์†์„ฑ๊ฐ’๋ฅผ ํ’€์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€์ˆ˜์— ๋„ฃ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
ํ•œ ๋ฒˆ ์„ ์–ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์†์„ฑ๊ฐ’ ์ถ”์ถœ, ํ•˜๋ถ€ ๊ฐ์ฒด์—์„œ ์ ‘๊ทผ, ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ๋“ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ ๋ฒˆ์˜ ์„ค๋ช…๋ณด๋‹ค ํ•˜๋‚˜์˜ ์ƒ˜ํ”Œ ์ฝ”๋“œ๊ฐ€ ๋” ์œ ์šฉํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์˜ ํ•„์š”์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ES2015 ํ™˜๊ฒฝ์—์„œ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const name = flower.name;
const color = flower.color;

console.log(name);    // 'Rose'
console.log(color);    //  'Red'

flower.name ๊ฐ’์„ name ๋ณ€์ˆ˜์— ๋„ฃ๊ณ , flower.color ๊ฐ’์„ color ๋ณ€์ˆ˜์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ‘name’๊ณผ ‘color’์ž…๋‹ˆ๋‹ค.

๋Œ€์ž… ๊ณผ์ •์—์„œ name์ด ๋ณ€์ˆ˜ ์„ ์–ธ์— ํ•œ ๋ฒˆ, ๊ทธ๋ฆฌ๊ณ  flower ๊ฐ์ฒด์˜ ์†์„ฑ ์ ‘๊ทผ์— ํ•œ ๋ฒˆ, ์ด ๋‘ ๋ฒˆ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

color๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์€ ์ด๋Ÿฐ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์—†์• ๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์—์„œ ์†์„ฑ์„ ๊ฐ€์ ธ์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ๋•Œ ์†์„ฑ๋ช…์„ ํ•œ๋ฒˆ ๋” ๋ช…์‹œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์†์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ์ง€๋ผ๋„ ํ•œ๋ฒˆ์˜ ์„ ์–ธ์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ์œ„ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const flower = {
 name: 'Rose',
 color: 'Red'
};

const { name, color } = flower;

console.log(name);   // 'Rose'
console.log(color);  // 'Red'

‘const { name, color } = flower’๊ฐ€ ๋ฐ”๋กœ ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”์ž…๋‹ˆ๋‹ค.
์ด ๊ตฌ๋ฌธ์œผ๋กœ name๊ณผ color ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , flower.name๊ณผ flower.color ์†์„ฑ์˜ ๊ฐ’์„ ๊ฐ™์€ ์ด๋ฆ„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

const name = flower.name;
const color = flower.color;

// ์œ„์™€ ์•„๋ž˜๋Š” ๊ฐ™์€ ๊ฒฐ๊ณผ

const { name, color } = flower;

์†์„ฑ๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์ด ์ค‘๋ณต๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋น„๊ตฌ์กฐํ™”๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์†์„ฑ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

const { identifier } = expression;

์—ฌ๊ธฐ์„œ identifier๋Š” ์†์„ฑ์— ์ ‘๊ทผํ•  ์ด๋ฆ„์ด๊ณ , expression์€ identifier๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋น„๊ตฌ์กฐํ™”๋ฅผ ํ•˜๋ฉด identifier ๋ณ€์ˆ˜๋Š” ์ ‘๊ทผํ•œ ์†์„ฑ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์ด์ง€๋งŒ ์†์„ฑ ์ ‘๊ทผ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const identifier = expression.identifier;

์œ„ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์—ฐ์Šตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { name } = flower;

console.log(name);  // 'Rose'

‘const { name } = flower;’๋Š” name ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , flower.name์˜ ์†์„ฑ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์ž…๋‹ˆ๋‹ค.

3. ์—ฌ๋Ÿฌ ์†์„ฑ๊ฐ’ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๊ธฐ

์—ฌ๋Ÿฌ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด์˜ ๋น„๊ตฌ์กฐํ™”๋Š” ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const { identifier1, identifier2, ..., identifierN } = expression;

์—ฌ๊ธฐ์„œ identifier1, identifier2, …, identifierN์€ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ด๋ฆ„์ด๊ณ , expression์€ identifier๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋น„๊ตฌ์กฐํ™”๋ฅผ ํ•˜๋ฉด ๊ฐ identifier ๋ณ€์ˆ˜๋Š” ์ ‘๊ทผํ•œ ์†์„ฑ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์ ‘๊ทผ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const identifier1 = expression.identifier1;
const identifier2 = expression.identifier2;
// ......
const identifierN = expression.identifierN;

๊ทธ๋Ÿผ ๋‘ ๊ฐœ์˜ ์†์„ฑ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
 name: 'Rose',
 color: 'Red'
};

const { name, color } = flower;

console.log(name);   // 'Rose'
console.log(color);  // 'Red'

‘const { name, color } = flower;’๋Š” name, color ๋‘ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ๊ฐ flower.name๊ณผ flower.color์˜ ์†์„ฑ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

4. ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ

๋น„๊ตฌ์กฐํ™”๋ฅผ ํ•˜๋”๋ผ๋„ ๊ฐ์ฒด์— ๋™์ผํ•œ ์†์„ฑ๋ช…์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ undefined๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { meaning } = flower;

console.log(meaning);  // undefined 

์œ„์™€ ๊ฐ™์ด ์†์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const { identifier = defaultValue } = expression;

identifier๊ฐ€ expression ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋Š” ์ด๋ฆ„์ด ๋ฉ๋‹ˆ๋‹ค. expression ๊ฐ์ฒด ๋‚ด identifier ์†์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ง€์ •ํ•œ ๊ธฐ๋ณธ๊ฐ’์ธ defaultValue๊ฐ€ ๋Œ€์ž…๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

const identifier = expression.identifier === undefined ? defaultValue : expression.identifier;

๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ์˜ต์…˜์„ ๋”ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
}

const { meaning = 'love' } = flower;

console.log(meaning)  // 'love'

undefined ๋Œ€์‹  ‘love’๊ฐ€ ๋Œ€์ž…๋ฉ๋‹ˆ๋‹ค.

5. ๋ณ„๋ช…(alias) ์ •ํ•˜๊ธฐ

๊ฐ์ฒด์˜ ์†์„ฑ๋ช…๊ณผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋ณ„๋ช…์„ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const { identifier: aliasIdentifier } = expression;

์—ฌ๊ธฐ์„œ identifier๋Š” ์†์„ฑ์— ์ ‘๊ทผํ•˜๋Š” ์ด๋ฆ„์ด๋ฉฐ, aliasIdentifier๋Š” ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋น„๊ตฌ์กฐํ™”๋ฅผ ํ•˜๋ฉด aliasIdentifier๊ฐ€ ์†์„ฑ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ฐ™์€ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

const aliasIdentifier = expression.identifier;

์‹ค์ œ ๋ณ„๋ช…์„ ์ ์šฉํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { color: realColor } = flower;

console.log(realColor); // 'Red'
console.log(color); // ์—๋Ÿฌ ๋ฐœ์ƒ(color is not defined)

์œ„ ์ฝ”๋“œ๋Š” realColor๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , flower.color๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ๋น„๊ตฌ์กฐํ™”๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

6. ๋‚ด๋ถ€ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

์•ž์—์„œ ํ™•์ธํ•œ ์ƒ˜ํ”Œ์€ ์›์‹œํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…(String, Number ๋“ฑ)์˜ ์†์„ฑ์„ ๊ฐ–๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€๋Š” ๊ฐ์ฒด ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋„ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const { nestedObject: { identifier } } = expression;

nestedObject๋Š” ๋‚ด๋ถ€ ๊ฐ์ฒด๋ช…์ด๊ณ , identifier๋Š” ๋‚ด๋ถ€ ๊ฐ์ฒด์˜ ์†์„ฑ๋ช…์ž…๋‹ˆ๋‹ค.

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ํ†ตํ•ด identifier๊ฐ€ ๋‚ด๋ถ€ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ฐ™์€ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

const identifier = expression.nestedObject.identifier;

๋‚ด๋ถ€ ๊ฐ์ฒด์˜ ๊นŠ์ด๋Š” ์ œํ•œ์ด ์—†์œผ๋ฉฐ, ์ค‘๊ด„ํ˜ธ{ }๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const { propA: { propB: { propC: {......} } } } = object;

๋‹ค์Œ ์ƒ˜ํ”Œ์„ ํ†ตํ•ด ๋‚ด๋ถ€ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์ง„ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red',
  blooming: {
   season: 'spring'
  }
};

//Object destructuring
const { blooming: { season } } = flower;

console.log(season) // 'spring'

‘const { blooming: { season } } = flower;’๋Š” ๋‚ด๋ถ€ ๊ฐ์ฒด blooming์˜ season ์†์„ฑ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

7. ๋™์  ์ด๋ฆ„์œผ๋กœ ์†์„ฑ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

๋™์  ์ด๋ฆ„(Dynamic Name)์˜ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const { [propName]: identifier } = expression;

propName์€ ์†์„ฑ๋ช…(์ฃผ๋กœ string ํƒ€์ž…)์ด๋ฉฐ, identifier๋Š” ๊ฐ’์ด ํ• ๋‹น๋  ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

const identifier = expression[propName];

๋‹ค์Œ ์ƒ˜ํ”Œ์„ ํ†ตํ•ด ์†์„ฑ๋ช…์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” prop์„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const prop = 'name';
const { [prop]: flowerName } = expression;

console.log(flowerName); // 'Rose'

‘const { [prop]: flowerName } = expression’์—์„œ flowerName ๋ณ€์ˆ˜์— flower[prop] ์†์„ฑ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉฐ, prop์€ ์ ‘๊ทผํ•  ์†์„ฑ๋ช…์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

8. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ํ›„ ๋‚จ๊ฒจ์ง„ ๊ฐ์ฒด

๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฌธ๋ฒ•์€ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const { identifier, ...rest } = expression;

์œ„ ์ฝ”๋“œ์—์„œ identifier๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ์€ rest ๋ณ€์ˆ˜์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„œ name ์†์„ฑ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ์„ ์ •๋ฆฌํ•˜๋Š” ์ƒ˜ํ”Œ์„ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const flower = {
  name: 'Rose',
  color: 'Red'
};

const { name, ...realColor } = flower;

console.log(realColor) // { realColor: 'Red' }

name ์†์„ฑ๊ฐ’์„ ํ• ๋‹นํ•œ ๋’ค ๋‚˜๋จธ์ง€ ์†์„ฑ๋“ค์€ realColor ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

9. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ๋ฌธ

์•ž์—์„œ ํ™•์ธํ•œ๋Œ€๋กœ ๋น„๊ตฌ์กฐํ™”๋Š” ์†์„ฑ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ํƒ€์ž…์€ const, let, var ๋ชจ๋‘ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์—๋„ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

let์„ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

//let
const flower = {
  name: 'Rose',
};

let { name } = flower;

console.log(name); // 'Rose'

var๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

//var
const flower = {
  name: 'Rose',
};

var { name } = flower;

console.log(name); // 'Rose'

์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

//existing variable

let name;

const flower = {
  name: 'Rose',
};

({ name } = flower);

console.log(name); // 'Rose'

for…of ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

const flowers = [
  { name: 'Rose' },
  { name: 'Lily' }
];

for (const { name } of flowers) {
  console.log(name) //'Rose', 'Lily'
}

์‚ฌ์‹ค ๋น„๊ตฌ์กฐํ™”๋Š” ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•œ ๊ณณ์ด๋ฉด ์–ด๋””๋“ ์ง€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋น„๊ตฌ์กฐํ™”๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const flowers = [
  { name: 'Rose' },
  { name: 'Lily' }
];

const names = flowers.map(
  function({ name }) {
    return name;
  }
)

console.log(names); // ['Rose', 'Lily']

‘function({ name })’์€ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋น„๊ตฌ์กฐํ™”ํ•˜์—ฌ, name ๋ณ€์ˆ˜์— name ์†์„ฑ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

10. ๋ณ€์ˆ˜ ๊ฐ’ ์„œ๋กœ ๊ตํ™˜(swap)

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ตํ™˜ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ๋ณด๊ด€ํ•  ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

let a = 1;
let b = 2;

//๊ธฐ์กด ๊ตํ™˜ ๋ฐฉ๋ฒ•
const temp = a;
a = b;
b = temp;

//๋น„๊ตฌ์กฐํ™”๋ฅผ ํ†ตํ•œ ๊ตํ™˜
[a, b] = [b, a];

11. ์ •๋ฆฌ

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์€ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•๊ณผ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค.


๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์— ๋Œ€ํ•ด ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ๋„ ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ž‘์„ฑ๋œ ์ข‹์€ ๊ธ€์„ ์ ‘ํ•˜๊ฒŒ ๋˜์–ด ์ข‹์€ ์ •๋ณด๋ฅผ ๋‚˜๋ˆ„๊ณ ์ž ์–‘ํ•ด๋ฅผ ๊ตฌํ•˜์—ฌ ๊ตญ๋‚ด์— ๋งž๊ฒŒ ๋ฒˆ์—ญํ•˜๊ณ  ์ผ๋ถ€ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธ€์„ ์˜ฌ๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•˜์‹  ์‚ฌํ•ญ์€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

์ถœ์ฒ˜: https://dmitripavlutin.com/javascript-object-destructuring/

Useful Shortcut Keys For Visual Studio Code(VS code๋‹จ์ถ•ํ‚ค ๋ชจ์Œ)

ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์œ„ํ•œ ๋น„์ฅฌ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ(VS Code) ๋‹จ์ถ•ํ‚ค ๋ชจ์Œ

Sometimes we need some shortcut keys for improving efficiency and avoiding irritable repeating works.

But occasionally, we use it because just seems cool!

VS code shortcut keys will help you and your work faster.

You can also check or edit shortcuts keys at File – Preferences – Keyboard Shortcuts.

Or follow default set version as below.

๋‹จ์ถ•ํ‚ค๋Š” ํšจ์œจ์„ฑ์„ ๋†’์ด๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋˜๋Š” ์ž‘์—…์— ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ž‘์—…์ด ๊ฒŒ์ž„์ด๊ฑด ์‚ฌ๋ฌด์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๊ฑด ๋ง์ด์ฃ .

๋‹จ์ถ•ํ‚ค๋ฅผ ์“ฐ๋ฉด ์‹ค๋ ฅ์ž๋กœ ๋ณด์ด๊ธฐ๋„ ํ•˜๊ณ , ์•ฝ๊ฐ„์€ ์ˆ™๋ จ์ž๋กœ ๋ณด์ด๊ธฐ๋„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ต์ˆ™ํ•œ ๋‹จ์ถ•ํ‚ค๋ถ€ํ„ฐ ์œ ์šฉํ•œ ๋‹จ์ถ•ํ‚ค๊นŒ์ง€ VS Code์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ•ํ‚ค๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  File – Preferences – Keyboard Shortcuts์—์„œ ๋‹จ์ถ•ํ‚ค์˜ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


SHORTCUT KEYS FOR VS CODE

EDIT
CopyCtrl + C๋ณต์‚ฌ
CutCtrl + X์ž˜๋ผ๋‚ด๊ธฐ
PasteCtrl + V๋ถ™์—ฌ๋„ฃ๊ธฐ
Select AllCtrl + A์ „์ฒด ์„ ํƒ
Undo(โ†”Redo)Ctrl + Z์‹คํ–‰์ทจ์†Œ(โ†”๋‹ค์‹œ์‹คํ–‰)
Redo(โ†”Undo)Ctrl + Y๋‹ค์‹œ์‹คํ–‰(โ†”์‹คํ–‰์ทจ์†Œ)
Copy LineAlt + Shift + โ†‘/โ†“ํ–‰ ๋ณต์‚ฌํ•˜๊ธฐ
Move LineAlt + โ†‘/โ†“ํ–‰ ์˜ฎ๊ธฐ๊ธฐ
Insert Line AboveCtrl + Shift + Enterํ•œ ์ค„ ์‚ฝ์ž…ํ•˜๊ธฐ(์œ„์ชฝ)
Indent LineCtrl + ]๋“ค์—ฌ์“ฐ๊ธฐ
Line CommentCtrl + /์ฝ”๋ฉ˜ํŠธ (๋ผ์ธ)
Block CommentAlt + Shift + A์ฝ”๋ฉ˜ํŠธ (๋ธ”๋ก)
FindCtrl + F์ฐพ๊ธฐ
ReplaceCtrl + H๋ฐ”๊พธ๊ธฐ
Trigger SuggestionCtrl + Space์™„์„ฑ ์ œ์•ˆ
Close EditorCtrl + W์—๋””ํ„ฐ ๋‹ซ๊ธฐ
SaveCtrl + S์ €์žฅํ•˜๊ธฐ
Reopen closed EditorCtrl + Shift + T๋‹ซ์€ ์—๋””ํ„ฐ ์—ด๊ธฐ
Full Screen ModeF11ํ’€์Šคํฌ๋ฆฐ
Sidebar visibilityCtrl + B์‚ฌ์ด๋“œ๋ฐ” ์—ด๊ธฐ
Show TerminalCtrl + `ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ
Debug
Start/ContinueF5์‹œ์ž‘/๊ณ„์†
StopShift + F5์ •์ง€
BreakpointF9๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ

VS Code ํ„ฐ๋ฏธ๋„ Terminal์—์„œ yarn ์‹คํ–‰ํ•˜๊ธฐ

How to use ‘yarn’ with VS Code terminal


VS Code์™€ yarn์„ ์„ค์น˜ํ•˜๊ณ  VS Code์˜ ํ„ฐ๋ฏธ๋„์—์„œ yarn์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์š”.

์ด๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ๊ถŒํ•œ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ์š”. Node.js command prompt ๋“ฑ์˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋”ฐ๋กœ ์—ด๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ์—†์ง€๋งŒ ํ•˜๋‚˜์˜ ํˆด(VS Code)๋กœ ์ฝ”๋“œ๋„ ํŽธ์ง‘ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ ๋ช…๋ น๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์ž–์•„์š”.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ์ž‘์—…์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. Windows PowerShell ์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰


2. ์ฃผ์–ด์ง„ ๊ถŒํ•œ ์ƒํƒœ ํ™•์ธ(get-ExecutionPolicy)

get-ExecutionPolicy ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋ฉด ๊ถŒํ•œ์ด Restricted๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ฐ„๋‹จํ•˜๊ฒŒ ์ด ๊ถŒํ•œ์„ RemoteSigned๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


3. Set-ExecutionPolicy RemoteSigned ์ž…๋ ฅ -> y

Set-ExecutionPolicy RemoteSigned๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ๋ฌป๊ณ , y๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ณ€๊ฒฝ์ด ์™„๋ฃŒ!
get-ExecutionPolicy ๋ช…๋ น์„ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ ๊ถŒํ•œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


4. ์ž‘๋™ ์—ฌ๋ถ€ ํ™•์ธ

์ด์ œ ์ž์œ ๋ฅผ ์–ป์€ VS Code ํ„ฐ๋ฏธ๋„์—์„œ yarn ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ์˜์–ด ์‚ฌ์ „(Developers’ terms in English)

Developers’ terms in English and Korean for foreign works

๊ณต๋ถ€์™€ ๋ฒˆ์—ญ ์ผ์„ ํ•˜๋ฉด์„œ ๋ฌธ์žฅ ๋ฒˆ์—ญ๊ณผ ์—…๋ฌด์— ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฐœ๋ฐœ ์šฉ์–ด๋“ค์„ ํ‹ˆํ‹ˆ์ด ์ •๋ฆฌํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํฌ์ŠคํŠธ

  • anonymous function ์ต๋ช… ํ•จ์ˆ˜
  • arrow function ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
  • ascending order ์˜ค๋ฆ„์ฐจ์ˆœ
  • assign ํ• ๋‹นํ•˜๋‹ค
  • braces { } ์ค‘๊ด„ํ˜ธ (=curly brackets)
  • brackets [ ] ๋Œ€๊ด„ํ˜ธ
  • boilerplate ์ƒ์šฉ๊ตฌ
  • cascade ์—ฐ์†, ์ข…์†
  • closure ํด๋กœ์ € (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋กœ์ € ํฌ์ŠคํŒ…)
  • curly brackets { } ์ค‘๊ด„ํ˜ธ (=braces)
  • declarative programming ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • deprecated ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”, ์‚ฌ๋ผ์ง€๊ฒŒ ๋ 
  • descending order ๋‚ด๋ฆผ์ฐจ์ˆœ
  • DOM (Document Object Model) ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ
  • duplicate ๋ณต์‚ฌํ•˜๋‹ค, ๋ณต์ œํ•˜๋‹ค
  • execute ์‹คํ–‰ํ•˜๋‹ค
  • first-class function ์ผ๋“ฑ ํ•จ์ˆ˜ (ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜)
  • function ํ•จ์ˆ˜
  • function call operator ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž ( )
  • functional programming ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • global variable ์ „์—ญ๋ณ€์ˆ˜
  • IIFE (Immediately Invoked Function Expression) ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
  • immutable ๋ถˆ๋ณ€์˜
  • imperative programming ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • impure function ๋ถˆ์ˆœ ํ•จ์ˆ˜
  • inheritance ์ƒ์†
  • invoke ํ˜ธ์ถœํ•˜๋‹ค
  • LOC(Lines of Code) ์ฝ”๋“œ ๋ผ์ธ
  • local variable ์ง€์—ญ๋ณ€์ˆ˜
  • loop ๋ฃจํ”„ / ๋ฐ˜๋ณต ์‹คํ–‰
  • manipulate ์กฐ์ž‘ํ•˜๋‹ค
  • memoization ๋ฉ”๋ชจ์ด์ œ์ด์…˜(๋™์ผํ•œ ๊ณ„์‚ฐ(๋˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ) ๋ฐ˜๋ณต ์‹œ ์ด์ „ ๊ณ„์‚ฐ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋ฐ˜๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•จ)
  • migration ์ด๋™, ์ด์ฃผ
  • method ๋ฉ”์„œ๋“œ
  • mutable ๊ฐ€๋ณ€์˜
  • object ๊ฐ์ฒด
  • object literal ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
  • object oriented programming (OOP) ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • operand ํ”ผ์—ฐ์‚ฐ์ž
  • opinionated ์˜๊ฒฌ์ด ์žˆ๋Š”, ๊ณ ์ง‘์ด ์žˆ๋Š”, ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜๋Š”, ์ œํ•œ์„ ๋‘๋Š”(Angular ํ”„๋ ˆ์ž„์›Œํฌ ํŠน์ง• ์„ค๋ช… ์‹œ ์ž์ฃผ ์‚ฌ์šฉ)
  • parallel ๋ณ‘ํ–‰์˜, ๋ณ‘๋ ฌ์˜
  • parentheses ( ) ์†Œ๊ด„ํ˜ธ
  • parse ๋ถ„์„ํ•˜๋‹ค
  • pure fuction ์ˆœ์ˆ˜ ํ•จ์ˆ˜
  • quotation mark ๋”ฐ์˜ดํ‘œ
  • reactive programming ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • recursive function ์žฌ๊ท€ ํ•จ์ˆ˜
  • regular expression ์ •๊ทœ ํ‘œํ˜„
  • REST (REpresentational State Transfer) REST
  • response ์‘๋‹ต, ๋ฆฌ์Šคํฐ์Šค
  • request ์š”์ฒญ, ๋ฆฌํ€˜์ŠคํŠธ
  • robust ํƒ„ํƒ„ํ•œ, ๊ฐ•๋ ฅํ•œ
  • shallow copy ์–•์€ ๋ณต์‚ฌ(๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ)
  • snippet ์กฐ๊ฐ, ๋‹จํŽธ, ์ฝ”๋“œ ์กฐ๊ฐ
  • syntax ๋ฌธ๋ฒ•
  • ternary operator ์‚ผํ•ญ์—ฐ์‚ฐ์ž
  • UI (User Interface) UI
  • unopinionated ์˜๊ฒฌ์ด ์—†๋Š”, ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜์ง€ ์•Š๋Š”, ์ œํ•œ์„ ๋‘์ง€ ์•Š๋Š”(Express ํ”„๋ ˆ์ž„์›Œํฌ ํŠน์ง• ์„ค๋ช… ์‹œ ์ž์ฃผ ์‚ฌ์šฉ)
  • variable ๋ณ€์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋กœ์ € ํŒŒํ—ค์น˜๊ธฐ(What is Javascript Closure)

Venezia

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋Š” ์ „์—ญ(global)๋ณ€์ˆ˜์™€ ์ง€์—ญ(local)๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์š”.

์ „์—ญ๋ณ€์ˆ˜๋Š” ์œ„์น˜์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ์Šค์ฝ”ํ”„ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ์š”.

์ „์—ญ๋ณ€์ˆ˜

ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ƒ˜ํ”Œ1


function testFunction( ) {

  let abc = 10;

   return abc * 2;

}


๋˜ํ•œ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ƒ˜ํ”Œ2


let abc = 10;

function testFunction( ) {

   return abc * 2;


์ƒ˜ํ”Œ2์—์„œ abc๋Š” ์ „์—ญ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์›น ํŽ˜์ด์ง€์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” window ๊ฐ์ฒด์— ์†ํ•ฉ๋‹ˆ๋‹ค. 

์ „์—ญ๋ณ€์ˆ˜๋Š” ํŽ˜์ด์ง€ ๋‚ด ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ƒ˜ํ”Œ1์—์„œ abc๋Š” ์ง€์—ญ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์š”. 

๋‹ค๋ฅธ ํ•จ์ˆ˜๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—๊ฒŒ๋Š” ๊ฐ์ถฐ์ ธ ์žˆ๋Š” ๊ฒƒ์ด์ฃ .

์ „์—ญ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์ด๋ฆ„์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•ด๋„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์ฃ .

์„ ์–ธ์ž(var, let, const) ์—†์ด ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ „์—ญ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ํŠน์ • ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ƒ์„ฑ ๋˜์—ˆ๋‹ค๊ณ  ํ•ด๋„ ๋ง์ด์ฃ .

function testFunction() {

   abc = 10;

}

๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(lifetime)

์ „์—ญ๋ณ€์ˆ˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ(๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜ ์œˆ๋„์šฐ ์ฐฝ์„ ์ข…๋ฃŒ)๊นŒ์ง€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ƒ์„ฑ๋˜์–ด ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์ˆซ์ž ์นด์šดํŒ…์˜ ๋ฌธ์ œ

๋ชจ๋“  ํ•จ์ˆ˜์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ˆซ์ž ์นด์šดํŒ…์— ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ „์—ญ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ˆซ์ž๋ฅผ ์นด์šดํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ3


let cnt = 0;

function addNum(){

   cnt += 1;

}

addNum();

addNum();      

// ๊ฒฐ๊ณผ:2


ํ•˜์ง€๋งŒ ์œ„์˜ ์ฝ”๋“œ๋Š” addNum() ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ๋„ cnt ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ cnt ๋ณ€์ˆ˜๋Š” addNum() ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์กด์žฌํ•ด์•ผ ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ4


let cnt = 0;

function addNum() {

   let cnt = 0;

  cnt += 1;

}

addNum();

addNum();

// ๊ฒฐ๊ณผ๋Š” 2์ผ ๊ฒƒ ๊ฐ™์ง€๋งŒ 0์ด ๋ฐ˜ํ™˜


๊ฐ™์€ ์ด๋ฆ„์˜ ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋Š” 2๊ฐ€ ์•„๋‹Œ 0์ด ๋ฉ๋‹ˆ๋‹ค. 

๊ทธ๋Ÿผ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ์‚ฌ์šฉํ•ด ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ5


function addNum() {

   let cnt = 0;

   cnt += 1;

   return cnt;

}

addNum();

addNum();

// cnt๋Š” 2๊ฐ€ ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” 1์ด ๋ฐ˜ํ™˜


ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์„ ์–ธํ•œ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๋ฆฌ์…‹๋˜๋ฏ€๋กœ ์˜๋„ํ•œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋‚ด๋ถ€ ํ•จ์ˆ˜(inner function)๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ค‘์ฒฉ ํ•จ์ˆ˜(Nested function)

๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ค‘์ฒฉ ํ•จ์ˆ˜ ์—ญ์‹œ ์ž์‹ ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ƒ˜ํ”Œ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‚ด๋ถ€ํ•จ์ˆ˜ plus()๋Š” ๋ถ€๋ชจ ํ•จ์ˆ˜์— ์žˆ๋Š” cnt ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ6


function addNum() {

   let cnt = 0;

   function plus() {

      cnt += 1;

   }

   plus();  

   return cnt;

}


cnt = 0์„ ํ•œ๋ฒˆ๋งŒ ์„ ์–ธํ•  ๋ฐฉ๋ฒ•๊ณผ plus() ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ฉด ์œ„์—์„œ ํ™•์ธํ•œ ์ˆซ์ž ์นด์šดํŒ…์˜ ๋”œ๋ ˆ๋งˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋กœ์ €๋ฅผ ํ™•์ธํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜(IIFE, Immediately Invoked Function Expressions)์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์—†์ด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋กœ, ํ•จ์ˆ˜๋ฅผ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ๋ฐ˜๋“œ์‹œ ๋์— ()๋ฅผ ๋ถ™์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜์˜ ํ‘œํ˜„์‹ ์ƒ˜ํ”Œ์ž…๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ7


(function() {

  let abc = โ€œself-invokingโ€;

})();


๊ทธ๋Ÿผ ์ด์ œ ํด๋กœ์ €๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Austria(2013)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋กœ์ €(Closure)

ํด๋กœ์ €๋Š” ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ8


const addNum = (function() {

   let cnt = 0;

   return function() {

   cnt += 1

ย ย  return cnt;

   })();

addNum();

addNum();

// ๊ฒฐ๊ณผ:2


addNum ๋ณ€์ˆ˜์—๋Š” ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. 

์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜๋Š” ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋ฉฐ, cnt๋ฅผ 0์œผ๋กœ ์„ ์–ธํ•œ ํ›„ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด addNum์€ ํ•จ์ˆ˜๊ฐ€ ๋˜๋ฉฐ, ๋ถ€๋ชจ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์— ์กด์žฌํ•˜๋Š” cnt ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

cnt๋Š” ์ต๋ช…ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„์— ์˜ํ•ด ๋ณดํ˜ธ๋ฐ›์œผ๋ฉฐ, ์˜ค์ง addNum ํ•จ์ˆ˜๋งŒ์„ ์‚ฌ์šฉํ•ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


ํด๋กœ์ €๋Š” ๋ถ€๋ชจ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„์—๋„ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋กœ, ํŠน์ • ํ•จ์ˆ˜๋งŒ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ์•ˆ์ „ ์žฅ์น˜๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. 
์ฐธ๊ณ ๋กœ ํด๋กœ์ €๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ณ€์ˆ˜์™€ ๋ถ€๋ชจ ์Šค์ฝ”ํ”„์— ์กด์žฌํ–ˆ๋˜ ๋ณ€์ˆ˜๋Š” ์™„์ „ํžˆ ๊ฐ™์€ ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.


์ฐธ๊ณ ์ž๋ฃŒ https://www.w3schools.com/js/js_function_closures.asp

์ƒˆ๋กœ์šด ์‹œ์ž‘

์ข‹์€ ๊ณ„๊ธฐ๋ฅผ ํ†ตํ•ด ๋ธ”๋กœ๊ทธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋Š๋ผ๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๊ด€์‹ฌ์‚ฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Budapest(2013)