Skip to content

Latest commit

ย 

History

History
60 lines (42 loc) ยท 3.98 KB

ruby-band.md

File metadata and controls

60 lines (42 loc) ยท 3.98 KB

ruby์˜ !(Exclamation mark / Bang)์˜ ์˜๋ฏธ

์„œ๋ก 

  • ๋ฃจ๋น„๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด, ๋ฉ”์„œ๋“œ์— ! ๊ฐ€ ๋ถ™์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ! ๋ฅผ ๋ถ™์ด๋Š” ์ด์œ ์™€ ์–ด๋–ค ๋ณ€๊ฒฝ์ ์ด ์žˆ๋Š”์ง€, ruby์˜ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • ! ๋ฅผ ๋ถ™์ด๋Š”๊ฒƒ์€ Exclamation Mark๋ผ๊ณ  ํ•˜์ง€๋งŒ, ์‹ค์งˆ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ์— ๋ถ™์–ด ์žˆ๋‹ค๋ฉด Bang Methods๋ผ๊ณ  ๋งŽ์ด ํ•ฉ๋‹ˆ๋‹ค.

method์— ! ๊ฐ€ ๋‚ดํฌํ•˜๋Š” ์˜๋ฏธ

  • ์ผ๋‹จ ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•œ๋‹ค๋ฉด dangerous methods(์œ„ํ—˜ํ•œ ๋ฉ”์„œ๋“œ) ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์ฒด ๋ญ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์œ„ํ—˜ํ•˜๊ธธ๋ž˜ ! ๋ผ๋Š” mark๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๊ณ , ์ด๊ฑธ ์œ„ํ—˜ํ•˜๋‹ค๋ผ๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์ค€๋‹ค๋Š”๊ฒƒ์ผ๊นŒ์š”?

  • ์ฒซ๋ฒˆ์งธ ์ด์œ ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์›๋ณธ ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ๋ฅผ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ˆ์‹œ๋ฅผ ๋ด…์‹œ๋‹ค. upcase ๋ฉ”์„œ๋“œ๋Š” ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
    string = "marco"
    
    pp string.upcase # MARCO
    pp string # marco
    
    pp string.upcase! # MARCO
    pp string # MARCO
    • ์œ„ ์˜ˆ์‹œ์—์„œ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ์ง€๋งŒ, ! ๋งŒ ๋ถ™์˜€๋Š”๋ฐ string์— ๋Œ€ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ์ฒด ์ž์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ๋˜๋Š”๊ฒƒ์„ ์œ„ํ—˜ํ•จ์ด๋ผ๊ณ  ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋‘๋ฒˆ์งธ ์ด์œ ๋Š” ์„ฑ๊ณต์ ์œผ๋กœ ์„ฑ๊ณต์˜ ์‹คํ–‰์„ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

    • ์ฆ‰, ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜๋„ ์žˆ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด, update๋ผ๋Š” ๋ฉ”์„œ๋“œ๋Š” ActvieRecord์—์„œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด UPDATE ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
    @post.update(post_params) # ์„ฑ๊ณต์‹œ true, ์‹คํŒจ์‹œ, false
    • ์œ„ ์ฝ”๋“œ์—์„œ ! ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ boolean์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋˜๋ฉฐ, ์‹คํŒจ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์„๋•Œ ์˜ˆ๋ฅผ๋“ค์–ด ๋”ฐ๋กœ if๋ฌธ์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ํ•ด์ค˜์•ผ ํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    @post.update!(post_params) # ์‹คํŒจ์‹œ, Raise Exception
    • ! ๋ฅผ ๋ถ™์˜€๋‹ค๋ฉด, ์‹คํŒจ์‹œ false๊ฐ€ ์•„๋‹ˆ๋ผ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„ํ—˜ํ•˜๋‹ค๋Š”๊ฑด ์•Œ๊ฒ ์–ด. ๊ทธ๋ ‡๋‹ค๋ฉด ๋Š๋‚Œํ‘œ๋ฅผ ๋ถ™์ด๋ฉด ๋ฃจ๋น„๊ฐ€ ๋”ฐ๋กœ ๋ญ˜ ํ•ด์ฃผ๋Š”๊ฑธ๊นŒ?

  • ์ผ๋‹จ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด, Ruby์˜ ๋ช…๋ช… ๊ทœ์น™์ผ๋ฟ์ž…๋‹ˆ๋‹ค.
  • ๋‚ด๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ, ! ๋ฅผ ๋ถ™์—ฌ๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๋ฃจ๋น„๋Š” ์ž˜๋ชป๋œ๊ฒƒ์ด๋ผ๊ณ  ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€๋งŒ, ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด ๋˜ํ•œ ๋ฃจ๋น„๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํ•˜๋‚˜์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์ง€ ์•Š์„๊นŒ ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์œ„ ๋‘๊ฐ€์ง€ ์ƒํ™ฉ์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์œ„ํ—˜ํ•œ๊ฑฐ์•ผ?

  • ๊ฒฐ๋ก ์ ์œผ๋กœ ์•„๋‹์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์œผ๋กœ ์ฒซ๋ฒˆ์งธ ์ด์œ ์—์„œ ์ธ์Šคํ„ด์Šค ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ! ๋ฅผ ์“ฐ์ง€ ์•Š๋Š” ์˜ˆ๋ฅผ๋“ค์–ด upcase๋ฅผ ์“ด๋‹ค๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๋Š”๊ฒƒ์ด๋ฉฐ, ! ๋ฅผ ์จ์„œ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๋ฐฐ์—ด์ด ์ƒˆ๋กญ๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ์•ฝํ•˜๋Š” ์žฅ์ ์ด ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

  • ๋ฃจ๋น„์˜ ์ปจ๋ฒค์…˜์ค‘์— Bang Method๋ผ๋Š”๊ฒƒ์ด ์žˆ๊ณ , ๋‘๊ฐ€์ง€์˜ ์ด์œ ๋•๋ถ„์— ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์‹ค ๋ฌด์กฐ๊ฑด ์œ„ํ—˜ํ•˜๋‹ค! ๋ผ๋Š” ๊ฐœ๋…๋ณด๋‹จ, ์ž ์žฌ์ ์œผ๋กœ ์œ„ํ—˜ํ•œ ๋Š๋‚Œ. ์œ„ํ—˜ํ• ์ˆ˜๋„ ์žˆ๋‹ค~ ๋ผ๋Š” ์˜๋ฏธ๋กœ ์“ฐ๋Š”๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์ž๋งคํ’ˆ(?)์œผ๋กœ ? ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ์ฐจํ›„ ๊ธฐํšŒ๋˜๋ฉด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ์–ธ์–ด์—์„œ ํ†ต์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปจ๋ฒค์…˜์„ ๊ผญ ์•Œ์•„๋‘ฌ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž์™€์˜ ํ˜‘์—…๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ์‹ค์ œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ruby API๋ฅผ ์ดํ•ดํ•˜๊ธฐ์œ„ํ•ด์„  ๊ผญ ์•Œ์•„๋‘ฌ์•ผ ํ•˜๋Š” ๊ฐœ๋…์ด ์•„๋‹๊นŒ ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.