2021-04-16(Fri)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-04-16(๊ธˆ)

ํ•™์Šต ์‹œ๊ฐ„

09:00~23:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

๋””์ž์ธ ํŒจํ„ด, Rails

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

rspec์„ ์ด์šฉํ•˜์—ฌ TDDํ•œ๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

-

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

์˜ต์ €๋ฒ„ ํŒจํ„ด

ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ทธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“คํ•œํ…Œ ์—ฐ๋ฝ์ด ๊ฐ€๊ณ  ์ž๋™์œผ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ๋Œ€๋‹ค(one-to-many) ์˜์กด์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด ์‚ฌ์šฉ

java.util.Observer ์ธํ„ฐํŽ˜์ด์Šค์™€ java.util.Observable ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

  • ์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ํ‘ธ์‹œ ๋ฐฉ์‹, ํ’€ ๋ฐฉ์‹ ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅ.

java.util.Observer ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  java.util.Observable ๊ฐ์ฒด์˜ addObserver() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ต์ €๋ฒ„ ๋ชฉ๋ก์— ์ถ”๊ฐ€๊ฐ€ ๋˜๊ณ  deleteObserver()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ต์ €๋ฒ„ ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

์—ฐ๋ฝ์„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ java.util.Observable๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ฃผ์ œ ํด๋ž˜์Šค์—์„œ setChanged() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฐ ํ›„ notifyObservers() ๋˜๋Š” notifyObserver(Object arg) ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. (์ธ์ž๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋Š” ํ‘ธ์‹œ๋ฐฉ์‹์œผ๋กœ ์“ฐ์ž„.)

์˜ต์ €๋ฒ„ ๊ฐ์ฒด๊ฐ€ ์—ฐ๋ฝ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ update(Observable o, Object arg) ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. Observable o ์—๋Š” ์—ฐ๋ฝ์„ ๋ณด๋‚ด๋Š” ์ฃผ์ œ ๊ฐ์ฒด๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ  Object arg ์—๋Š” notifyObservers(Object arg) ๋ฉ”์†Œ๋“œ์—์„œ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๊ฐ€ ๋„˜์–ด์˜จ๋‹ค.

์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด์˜ ๋‹จ์ ๊ณผ ํ•œ๊ณ„

  1. Observable์€ ํด๋ž˜์Šค๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ์‚ฌ์šฉ์„ฑ์— ์ œ์•ฝ์ด ์ƒ๊ธด๋‹ค.

    • ๋”ฐ๋ผ์„œ ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ๋ฌธ์ œ๋‹ค. ์ด๋ฏธ ๋‹ค๋ฅธ ์Šˆํผ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— Observable์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์žฌ์‚ฌ์šฉ์„ฑ์— ์ œ์•ฝ์ด ์ƒ๊ธด๋‹ค.

  2. Observable ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

    • Observervable API๋ฅผ ์‚ดํŽด๋ณด๋ฉด, setChanged() ๋ฉ”์†Œ๋“œ๊ฐ€ protected๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋”ฐ.

    • Observable์˜ ์„œ๋ฒ„ํด๋ž˜์Šค์—์„œ๋งŒ setChanged()๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ์ง์ ‘ ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋ก, Observable์˜ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์“ธ ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฐ ๋””์ž์ธ์€ ์ƒ์†๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋””์ž์ธ ์›์น™์—๋„ ์œ„๋ฐฐ๋œ๋‹ค.

์ •๊ทœํ‘œํ˜„์‹

๋ฌธ๋ฒ• ์ •๋ฆฌ

Groups and ranges

Chracter

๋œป

|

๋˜๋Š”

()

๊ทธ๋ฃน

[]

๋ฌธ์ž์…‹, ๊ด„ํ˜ธ ์•ˆ์˜ ์–ด๋–ค ๋ฌธ์ž๋“ 

[^]

๋ถ€์ • ๋ฌธ์ž์…‹, ๊ด„ํ˜ธ์•ˆ์˜ ์–ด๋–ค ๋ฌธ์ž๊ฐ€ ์•„๋‹ ๋•Œ

(?:)

์ฐพ์ง€๋งŒ ๊ธฐ์–ตํ•˜์ง€๋Š” ์•Š์Œ

Quantifiers

Character

๋œป

?

์—†๊ฑฐ๋‚˜ ์žˆ๊ฑฐ๋‚˜ (zero or one)

*

์—†๊ฑฐ๋‚˜ ์žˆ๊ฑฐ๋‚˜ ๋งŽ๊ฑฐ๋‚˜(zero or more)

+

ํ•˜๋‚˜ ๋˜๋Š” ๋งŽ์ด (one or more)

{n}

n๋ฒˆ ๋ฐ˜๋ณต

{min,}

์ตœ์†Œ

{min,max}

์ตœ์†Œ, ๊ทธ๋ฆฌ๊ณ  ์ตœ๋Œ€

Boundary-type

Chracter

๋œป

\b

๋‹จ์–ด ๊ฒฝ๊ณ„

\B

๋‹จ์–ด ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹˜

^

๋ฌธ์žฅ์˜ ์‹œ์ž‘

$

๋ฌธ์žฅ์˜ ๋

Character classes

Chracter

๋œป

\

ํŠน์ˆ˜ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž

.

์–ด๋–ค ๊ธ€์ž(์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž ์ œ์™ธ)

\d

digit ์ˆซ์ž

\D

digit ์ˆซ์ž ์•„๋‹˜

\w

word ๋ฌธ์ž

\W

word ๋ฌธ์ž ์•„๋‹˜

\s

space ๊ณต๋ฐฑ

\S

space ๊ณต๋ฐฑ ์•„๋‹˜

์—ฐ์Šต์šฉ ์‚ฌ์ดํŠธ

ํ•™์Šต ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐœ์ธ์ ์ธ ์ดํ‰

TDD ์—ฐ์Šต์ด ์ฐธ ์žฌ๋ฐŒ๋‹ค. ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ์—์„œ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ค์„œ ํ•˜๊ธฐ ํž˜๋“ค ์ˆ˜๋„ ์žˆ๊ฒ ๋Š”๋ฐ, ์•„์ง ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ๋ฏธ์ˆ™ํ•œ๊ฐ€๋ณด๋‹ค.

๋‹ค์Œ ํ•™์Šต ๊ณ„ํš

  • Rails๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

Last updated