์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

1. ์—ฌ๋Ÿฌ๋ถ„์ด ์–‘๊ถ์„ ์ˆ˜๋ผ๊ณ  ํ•ด๋ณด์ž. 30.0 m ์ „๋ฐฉ์— ์žˆ๋Š” ๊ณผ๋…์— ํ™œ์‹œ์œ„๋ฅผ ์ตœ๋Œ€๋กœ ๋‹น๊ฒจ, ์ฒ˜์Œ์— ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ์˜์•˜๋”๋‹ˆ ์ž์‹ 

์˜ ํ™œ ์ค‘์•™๊ณผ ๋˜‘ ๊ฐ™์€ ๋†’์ด์— ์žˆ๋Š” ๊ณผ๋… ์ค‘์•™์œผ๋กœ๋ถ€ํ„ฐ ์—ฐ์ง ํ•˜๋ฐฉ์œผ๋กœ 1.25 m ๋–จ์–ด์ง„ ๋†’์ด์— ํ™”์‚ด์ด ๊ฝ‚ํžŒ ๊ฒƒ์„ ๋ง์›๊ฒฝ์œผ๋กœ ํ™•

์ธํ–ˆ๋‹ค๊ณ  ํ•˜์ž. ๋‘ ๋ฒˆ์งธ ์‹œ์œ„์—์„œ ์ฒ˜์Œ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™œ์‹œ์œ„๋ฅผ ์ตœ๋Œ€๋กœ ๋‹น๊ฒจ ๊ณผ๋… ์ค‘์•™์— ๋ช…์ค‘์‹œํ‚ค๋ ค๋ฉด ๋ช‡ ๋„ ์ƒ๋ฐฉ์œผ๋กœ ์˜์•„

์•ผ ํ• ๊นŒ? (์ค‘๋ ฅ๊ฐ€์†๋„๋Š” g=9.80 m/s^2 ๋กœ ๋†“์„ ๊ฒƒ.)


x์„ฑ๋ถ„๊ณผ y์„ฑ๋ถ„์€ ๋ณ„๊ฐœ๋‹ค.

y์„ฑ๋ถ„์„ ํ†ตํ•ด ์‹œ๊ฐ„์„ ๊ตฌํ• ์ˆ˜ ์žˆ๋‹ค.

๊ณผ๋…์—์„œ 1.25m ๋ฐ‘์œผ๋กœ ๊ฐ”์œผ๋ฏ€๋กœ...

๊ถค์  = Vy0 * t + 1/2*a*t^2 ์—์„œ
์ฃผ์–ด์ง„ ๋Œ€๋กœ Vy0 = 0์ด๊ณ  a = 9.8m/s^2์ด๋ฏ€๋กœ t๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

1.25 = 0*t + 1/2*9.8 * t^2
1.25 * 2 / 9.8 = t ^ 2
t = ๋ฃจํŠธ(2.5/9.8)
t = 5/๋ฃจํŠธ(98)์ดˆ


x์„ฑ๋ถ„์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‹œ๊ฐ„์„ ์œ„ํ•ด์„œ ๊ตฌํ–ˆ์œผ๋ฏ€๋กœ ๊ทธ๊ฑธ ํ† ๋Œ€๋กœ ์ฒ˜์Œ ์†๋„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
30 = V0 * 5/๋ฃจํŠธ(98) + 1/2*0*t^2
Vx0 = 6*๋ฃจํŠธ(98)m/s^2


์ด์ œ ์œ„ ๋‘ ์‹์„ ํ† ๋Œ€๋กœ y์„ฑ๋ถ„์— ์–ผ๋งˆ๋งŒํผ์˜ ์†๋„๊ฐ€ ๊ฐ€์•ผ ๊ณผ๋…˜์ •์ค‘์•™์— ๋งž์„๊นŒ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด

๊ถค์  = V0*t + 1/2*a*t^2์—์„œ ์ •์ค‘์•™์— ๋งž๋Š”๋‹ค๋Š” ๋ง์€ ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋‚ด๋ ค๊ฐ€์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ถค์ ์ด 0์ด๋ผ๋Š” ๋œป์ด๋‹ค.

์ฆ‰, 0 = Vy0 * t - 1/2*9.8*t^2์—์„œ t= 5/๋ฃจํŠธ(98)์ดˆ

0 = Vy0 * 5/๋ฃจํŠธ(98) - 1/2*9.8*(5/๋ฃจํŠธ(98))^2

Vy0*5/๋ฃจํŠธ(98) = 4.9*25/98
Vy0 = 4.9*25/98/5*๋ฃจํŠธ(98)
Vy0 = ๋ฃจํŠธ(98)/4


Sin์Ž„ํƒ€ = 6*๋ฃจํŠธ(98)   /   ๋ฃจํŠธ(98)/4
        = 1/24

์Ž„ํƒ€ = ArcSIN(1/24) =  0.0416787324225779
๊ฐ’์ด ๋ผ๋””์•ˆ ์ด๋ฏ€๋กœ 360๋„๊ฐ๋„๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด

2.388015...
์Ž„ํƒ€ = ์•ฝ 2.4๋„






2. ์ปค๋‹ค๋ž€ ๋„๋ฅด๋ž˜์— ํŠผํŠผํ•œ ์ค„์ด ํ•˜๋‚˜ ๊ฑธ์ณ์ ธ ์žˆ๊ณ  ์–‘์ชฝ์— ๋ฌด๊ฒŒ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ €์šธ ๋‘ ๊ฐœ๊ฐ€ ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๊ฐ ์ €์šธ

์— ๋ชธ๋ฌด๊ฒŒ๊ฐ€ 70 ํ‚ฌ๋กœ๊ทธ๋žจ๊ณผ 50 ํ‚ฌ๋กœ๊ทธ๋žจ์ธ ๋‘ ์‚ฌ๋žŒ์ด ๊ฐ๊ฐ ์˜ฌ๋ผ ํƒ„๋‹ค๊ณ  ํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ๋” ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ ์ชฝ์ด ๋‚ด๋ ค์˜ค๊ฒŒ

๋  ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ ์ €์šธ์— ๋‚˜ํƒ€๋‚œ ๊ฐ ์‚ฌ๋žŒ์˜ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ๊ตฌํ•ด ๋ณด์‹œ์˜ค.

"๋ชธ๋ฌด๊ฒŒ"๋Š” ํž˜์˜ ์ฐจ์›์ด๋‹ค.(ํ‚ฌ๋กœ๊ทธ๋žจ์ค‘ ์œผ๋กœ ํ‘œ๊ธฐ๋˜์–ด์žˆ์ง€ ์•Š์•„ ์™œ ์ค‘๋ ฅ๊ฐ€์†๋„๊ฐ€ ์•ˆ ์ฃผ์–ด ์กŒ๋Š”์ง€ ํ—ท๊ฐˆ๋ ธ์Šต๋‹ˆ๋‹ค.)
ํ•ฉ๋ ฅ์„ ๊ตฌํ•˜๋ฉด ๋ฌด๊ฑฐ์šด์ชฝ์œผ๋กœ ํž˜์ด ์ ๋ฆฌ๊ฒŒ ๋œ๋‹ค.
์ฆ‰ ์ €์šธ์— 70ํ‚ฌ๋กœ๊ทธ๋žจ์œผ๋กœ ๋‚˜์™”๋˜ ์ชฝ์œผ๋กœ 50ํ‚ฌ๋กœ๊ทธ๋žจ์„ ๋บ€ 20ํ‚ฌ๋กœ๊ทธ๋žจ์˜ ๋ฌด๊ฒŒ๋งŒํผ ์ž‘์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ 70ํ‚ฌ๋กœ๊ทธ๋žจ์ธ ์‚ฌ๋žŒ์ด ์˜ฌ๋ผํƒ„ ์ชฝ์€ ์ €์šธ์ด 20ํ‚ฌ๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ด๊ณ 
50ํ‚ฌ๋กœ๊ทธ๋žจ์ธ ์‚ฌ๋žŒ์ด ํƒ„ ์ชฝ์€ ์ €์šธ์ด 0ํ‚ฌ๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ด๋‹ค.


3. ์ˆ˜์—… ์‹œ๊ฐ„์— ์งˆ๋Ÿ‰์ด m1, m2 ์ธ ๋‘ ๋ฌผ์ฒด๋ฅผ ์ˆ˜ํ‰ํ•œ ๋ฐ”๋‹ฅ ์œ„์— ๋†“๊ณ  ์„œ๋กœ ์ ‘์ด‰์‹œ์ผœ ๋†“์€ ๋’ค ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์˜ ํž˜ F ๋ฅผ m1 ์— ๊ฐ€ํ•œ

๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์›€์ง์ด๋ฉฐ, ์ฃผ๊ณ  ๋ฐ›๋Š” ํž˜์€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ๊ณ„์‚ฐํ•ด ๋ณด์•˜๋‹ค. ์—ฌ๊ธฐ์— ์งˆ๋Ÿ‰ m3 ์ธ ๋ฌผ์ฒด๋ฅผ ํ•˜๋‚˜ ๋” m2 ์˜†์— ๋ถ™์—ฌ ๋†“์„

๊ฒฝ์šฐ ๊ฐ€์†๋„์™€ ์ฃผ๊ณ  ๋ฐ›๋Š” ํž˜๋“ค์„ ๊ตฌํ•ด ๋ณด์‹œ์˜ค. ๋˜, m1 ๋ถ€ํ„ฐ mN ๊นŒ์ง€์˜ ๋ฌผ์ฒด๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋กœ ์ผ๋ฐ˜ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด

๋ณด์‹œ์˜ค.

m3๊นŒ์ง€ ์žˆ๋Š”๊ฒฝ์šฐ๋Š”

F   =   (m1 + m2 + m3) * a
์ฆ‰ ๊ฐ€์†๋„๋Š”
a =  F / (m1 + m2 + m3)

์งˆ๋Ÿ‰์ด m1์ธ ๋ฌผ์ฒด๊ฐ€ ๋ฐ›๋Š” ์•Œ์งœํž˜ F   + F12  = m1*a
์งˆ๋Ÿ‰์ด m2์ธ ๋ฌผ์ฒด๊ฐ€ ๋ฐ›๋Š” ์•Œ์งœํž˜ F21 + F23  = m2*a
์งˆ๋Ÿ‰์ด m3์ธ ๋ฌผ์ฒด๊ฐ€ ๋ฐ›๋Š” ์•Œ์งœํž˜ F32        = m3*a


mN๊นŒ์ง€์˜ ๋ฌผ์ฒด๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋Š”

๊ฐ€์†๋„ a = F / (m1 + m2 + m3 + ... + mN)
         = F / (โˆ‘K๋Š”1์—์„œn๊นŒ์ง€) mK

๋ฌผ์ฒด๊ฐ€ N๊ฐœ์ผ๋•Œ ๊ฐ ๋ฌผ์ฒด๊ฐ€ ์ฃผ๊ณ  ๋ฐ›๋Š” ํž˜์€
์งˆ๋Ÿ‰์ด mK์ธ ๋ฌผ์ฒด๊ฐ€ ๋ฐ›๋Š” ์•Œ์งœํž˜ FK(K-1) + FK(K+1) = mK*a (K๊ฐ€ 1๊ณผ N์ด ์•„๋‹๋•Œ)

K๊ฐ€ 1์ผ๋•, F + FK(K+1) = mK*a
K๊ฐ€ N์ผ๋•, FN(N-1) = mN*a

๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : http://www.hyunlog.com/blog/entry/์™œ-์•Œ๊ณ ๋ฆฌ์ฆ˜์„-์•Œ์•„์•ผ-ํ•˜์ง€

 

 

์™œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ์•„์•ผ ํ•˜์ง€?

์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ธ€์„ ์จ ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.
๋‚˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ „์‚ฐํ•™์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ, ๊ฐ์ดˆ๋ผ ์ƒ๊ฐํ•œ๋‹ค.  ์ธ๊ณต์ง€๋Šฅ, ์šด์˜์ฒด์ œ, DBMS ๋“ฑ ์ „์‚ฐํ•™์˜ ์–ด๋””์—๊ณ  ์ ์ ˆํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ด ์—†๋‹ค.  ํŠœ๋ง์ƒ์„ ๋ฐ›์€ ์‚ฌ๋žŒ๋“ค์„ ๋ณด๋”๋ผ๋„ ๊ทธ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šฐ๋‹ค ๋ณด๋ฉด ๋‚˜์˜ค๋Š” ์–‘๋ฐ˜๋“ค์ด๋‹ค.
๋‚˜๋Š” ๋Œ€ํ•™์›์—์„œ ์ˆ˜ํ•™์  ๋…ผ๋ฆฌํ•™๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šฐ๋ฉด์„œ ๋‚ด๊ฐ€ ์ด ์ชฝ์—์„œ ์—‘์ŠคํผํŠธ๊ฐ€ ๋  ๋งŒํผ ์Šค๋งˆํŠธํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.  ๊ทธ๋ž˜๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ „์‚ฐํ•™์„ ํ•˜๊ธฐ์— ํ•„์š”ํ•˜๋ฏ€๋กœ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋…ธ๋ ฅํ–ˆ๋‹ค.  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ…์„ ๋งˆ์ง€๋ง‰ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ณธ ๊ฒƒ์ด 92๋…„ ๊ฒฝ์ด๋ผ ๊ธฐ์–ตํ•œ๋‹ค.  
์™œ ์ง€๊ธˆ ๋‹ค์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๊ฐ๋‚ ๊นŒ?
์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ ์ƒˆ๋กœ์šด ์ƒํ’ˆ์„ ์ค€๋น„ํ•˜๋Š”๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ›ˆ๋ จ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ›ˆ๋ จ์ด ๋˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์€ ๋‹จ์ˆœ coder ์ด๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋ฉด์„œ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค.  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ›ˆ๋ จ์ด ๋˜๊ณ  ์ด์— ๋ฐ”ํƒ•ํ•œ ์ „์‚ฐํ•™์˜ ์—ฌ๋Ÿฌ ๋ถ„์•ผ๋ฅผ ์•Œ๊ฒŒ๋˜๋ฉด ์ปดํ“จํ„ฐ ์—”์ง€๋‹ˆ์–ด ๋˜๋Š” ๊ณผํ•™์ž๋ผ ๋ถ€๋ฅธ๋‹ค.  ์ปดํ“จํ„ฐ ์—”์ง€๋‹ˆ์–ด/๊ณผํ•™์ž์˜ ์˜์›ํ•œ ์‚ฌ๋ถ€์ธ Donald Knuth์˜ The Art of Computer Programming ์„ ๋ณด์ž.  ์ฑ…์ด๋ฆ„์„ "์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ " ์ด๋ผ๊ณ  ํ–ˆ๋‹ค.  ์ด ๊ฒƒ ๋ณด๊ณ  ์ดํ•ดํ•ด์•ผ์ง€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ž€๋‹ค.  ์šฐ๋ฆฌ ํšŒ์‚ฌ๊ฐ€ ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ, ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋‚˜๋ถ€ํ„ฐ ๋‹ค์‹œ ํ›ˆ๋ จํ•ด์•ผ ์ง์›๋“ค ๋„์™€ ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Cormen ๋“ฑ์ด ์“ด Introduction to Algorithms ์œผ๋กœ ๊ณต๋ถ€ํ–ˆ๋‹ค.  ๊ฝค ๋‘๊บผ์šด ์ฑ…์œผ๋กœ ์ด ์ชฝ ๋ถ„์•ผ์— ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ๋‹ค.  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‰ฝ์ง€ ์•Š๋‹ค.  ์˜ค์ฃฝํ•˜๋ฉด ๋นŒ ๊ฒŒ์ด์ธ ๊ฐ€ "๋„ˆ๊ฐ€ ์ •๋ง ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด Knuth์˜ The Art of Programming์„ ๋ณด์•„์•ผ ํ•˜๊ณ , ์ •๋ง ๋‹ค ์ฝ์—ˆ์œผ๋ฉด ์žฌ๋นจ๋ฆฌ ์ž๊ธฐ์—๊ฒŒ ์ด๋ ฅ์„œ ๋ณด๋‚ด๋ผ" ํ–ˆ์„๊นŒ?  ์ด ์ฑ… ์ด 4๊ถŒ์ด๋‹ค.  ์•„๋งˆ ์ด ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋ฉด์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์ณ๋‹ค ๋ณด๊ธฐ๋งŒ ํ•œ ์ฑ…์ผ ๊ฒƒ์ด๋‹ค.  ์ด ์ฑ…๋“ค 4๊ถŒ ๋‹ค ์ฝ์€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ฐ€ ์ฑ„๊ฐ€๋Š”์ง€๋„ ๋ชจ๋ฅด๊ฒŒ ์ฑ„ ๊ฐˆ ๊ฒƒ์ด๋‹ค.  ๊ตฌ๊ธ€์˜ ์„ธ๋ฅด๊ฒŒ์ด ๋ธŒ๋ฆฐ์ด ์•„๋งˆ๋„ ์ „์šฉ ๋น„ํ–‰๊ธฐ ๋ณด๋‚ผ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.
์ด ์ •๋„๋ฉด ์ธ์„ผํ‹ฐ๋ธŒ ๋˜์ง€ ์•Š์„๊นŒ?
90๋…„๋Œ€ ์ดˆ์™€ ์ง€๊ธˆ ๊ฝค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง€ํ˜•์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐ”๋€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” SW ํ™˜๊ฒฝ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.  ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋Š” JAVA์™€ ๊ฐ™์€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์™€ ๊ธฐ์ˆ ์ด ๋ณด๊ธ‰๋˜๋ฉด์„œ JAVA์˜ Collection ๊ฐ™์ด ํŽธ๋ฆฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ API ๋“ค์ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด๋‹ค.  ์•„์ฃผ ์ข‹์€ ํ˜„์ƒ์ด๋‹ค. 
JAVA Collection ๊ฐ™์€ ๋„๊ตฌ, ํ•™๋ถ€์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€๋ฅด์น˜๋ฉด์„œ ๋Š๊ผˆ๋˜ ์–ด๋ ค์›€, ๊ทธ๋ฆฌ๊ณ  ์ตœ๊ทผ์— ๋Œ€ํ•™์›์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ์ˆ ์„ ๊ฐ•์˜ํ•˜๋ฉด์„œ ์ƒ๊ธด ์†Œํ”„ํŠธ์›จ์–ด ๊ด€์ ์˜ ๋ณ€ํ™”, SW์˜ ์žฌ์‚ฌ์šฉ์„ฑ, ํ˜„์‹ค์ ์œผ๋กœ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๊ณ„์† ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— SW๋Š” ์ง€์†์ ์œผ๋กœ ๋ฐ”๋€”์ˆ˜ ๋ฐ–์— ์—†๋‹ค๋Š” extreme programming ๋ฐฉ๋ฒ•๋ก  ๋“ฑ์ด ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๋Š” ๋ฐฉ๋ฒ•์˜ ๋ณ€ํ™”๋ฅผ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.  ์˜ˆ์ „์— ์šฐ๋ฆฌ๊ฐ€ red-black tree๋ฅผ ์ง์ ‘ ์งฐ๋‹ค๋ฉด ์ด์ œ๋Š” JAVA Collection ์ค‘์— ์ ๋‹นํ•œ ๋…€์„์„ ๋ถˆ๋Ÿฌ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.  ํŽธ๋ฆฌํ•จ์„ ์–ป์—ˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Œ๋ฏธํ•˜๋Š” ๊ธฐ์ˆ ์„ ์žƒ์–ด ๊ฐ„๋‹ค.  ์–ผ๋งˆ๋‚˜ ์ž˜ Collection API๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์„๊นŒ ๊ถ๊ธˆํ•˜๊ธฐ๋„ ํ•˜๋‹ค.  20๋…„ ์ „์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ๊ฒƒ ๋ฏฟ์ง€ ๋ชปํ•˜๋‹ˆ ์ง์ ‘ ์ž์‹ ์ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๊ฒ ์ง€๋งŒ, ์ด์ œ๋Š” ๊ฐ–๋‹ค ์“ฐ๋Š” ๊ฒƒ์ด ๋งž๋‹ค.  ๋‚ด๊ฐ€ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ€๋ฅด์น˜๋Š”๋ฐ... 
์ด๋Ÿฐ ๊ด€์ ์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด๊ณ  ์‹ถ๋‹ค.  ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํด๋ž˜์Šค, encapsulation, hierarchy, polymorphism์ด ์ •๋ง ์–ผ๋งˆ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜์กดํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ตฌ์กฐ (Abstract Data Type)์— ๋”ฑ ๋งž๋Š” ์ง€ (์ •๋ง ๊ทธ๋ ‡๋‹ค), ํฌ์ธํ„ฐ ์—†๋Š” JAVA๋กœ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž˜ ๊ตฌํ˜„๋˜๋Š”์ง€ ์•Œ์•„ ๋ณด๋ ค ํ•œ๋‹ค.  ํ•˜๋‹ค ๋ณด๋ฉด ๊พ€๊ฐ€ ๋งŽ์ด ๋‚  ํ„ฐ์ธ๋ฐ.  ์žฌ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ˆ ์‹œ๊ฐ„๋„ ๊ฑธ๋ฆฌ๊ฒ ๊ณ ,  ๊ทธ๋ ‡์ง€๋งŒ ๋˜ ํ•œํŽธ ๋‚ด๊ฐ€ ์ดํ•ด ํ•  ์ •๋„๋ฉด ์ตœ์†Œํ•œ The Art of Programming ์„ ๊ทธ๋ƒฅ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๋‚ซ์ง€ ์•Š์„๊นŒ?
์˜ค๋žœ๋งŒ์— ๋จธ๋ฆฌ๋„ ์จ ๋ณด๊ณ , ์ž๋ฐ”๋„ ํ›ˆ๋ จํ•  ๊ฒƒ ๊ฐ™์•„ ์„ค๋ Œ๋‹ค.   
Knuth๊ต์ˆ˜๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์—ฌ๊ธฐ๋กœ.   ์žฌ๋ฏธ์žˆ๋Š” ๊ฒƒ์ด ์—ฌ๊ธฐ์— ๋งŽ์Šต๋‹ˆ๋‹ค.   ์˜์–ด์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ๊ฒŒ๋˜๋ฉด ์ƒˆ๋กœ์šด ์„ธ์ƒ์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 
Hang on.

๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

 

์ถœ์ฒ˜ : http://www.buggymind.com/83

 

์š”์ฆ˜ C++๋กœ Admission Control System์„ ๊ฐœ๋ฐœ์ค‘์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋‹ค ๋ณด๋ฉด ์œผ๋ก€ ๊ทธ๋ ‡๊ฒ ์ง€๋งŒ ์ŠคํŠธ๋ง์„ ์ˆซ์ž๋กœ, ์ˆซ์ž๋Š” ์ŠคํŠธ๋ง์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ผ์ด ๋งŽ์ด ์ƒ๊ธฐ๋”๊ตฐ์š”. ์ข…์ „์—๋Š” atoll๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์จ์„œ ๊ทธ๋Ÿฐ ๋ณ€ํ™˜์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์›ฌ์ง€ ์˜ค๋Š˜์€ stringstream ํด๋ž˜์Šค๋ฅผ ์จ์„œ ๊ทธ๊ฑธ ํ•ด๋ณด๊ณ  ์‹ถ๋”๊ตฐ์š”. ์–ด์ฉŒ๋‹ค๊ฐ€ Bjarne ์„ ์ƒ๋‹˜์˜ ์ด ๊ธ€์„ ๋ณด๊ฒŒ ๋˜์—ˆ๊ฑฐ๋“ ์š”. "How do I convert an Integer to a String"์ด๋ผ๋Š” ๊ฒƒ์ด ์ œ๋ชฉ์ธ๋ฐ์š”. stringstream ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด itos๋ผ๋Š” ํ•จ์ˆ˜(integer๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š”)๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ stringstream์„ ์จ์„œ ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ํ•˜๋ฉด ๋ ๊ฒƒ ๊ฐ™๋”๊ตฐ์š”.

#include <iostream>
#include <sstream>
using namespace std;
long long stoll(const string& v) {
    stringstream ss;
    ss << v;
    long long ret;
    ss >> ret;
    return ret;
}
int main() {
    long long r;
    for ( int i = 0; i < 10000000; ++i ) {
        r = stoll("48623948209834029");
    }
}

๋„ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ์•„์ฃผ ๊ทธ๋Ÿด์‹ธํ•˜๊ฒŒ ์ž˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋‚˜๋ฆ„๋Œ€๋กœ 'C++'์ ์ด๊ธฐ๋„ ํ•˜์ง€์š”. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ €๋Š” ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋žฌ๋ƒ๊ณ ์š”? ์œ„์˜ ์ฝ”๋“œ๋ฅผ Unix time ๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‹คํ–‰ํ•ด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
[bjlee@bjlee-xnote test]$ time ./a.out
real    0m24.972s
user    0m23.349s
sys     0m0.060s
[bjlee@bjlee-xnote test]$

ํ•˜์ง€๋งŒ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ stdlib.h์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” atoll์„ ์จ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?
int main() {
    long long r;
    for ( int i = 0; i < 10000000; ++i ) {
        r = atoll("48623948209834029");
    }
}

๊ทธ๋žฌ์„ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
[bjlee@bjlee-xnote test]$ time ./a.out
real    0m2.306s
user    0m2.276s
sys     0m0.008s
[bjlee@bjlee-xnote test]$

๊ฐ„๋‹จํ•œ ์‹คํ—˜์œผ๋กœ๋„ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๊ฝค ํฌ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐํƒ€๋“ฑ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ผ์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— stringstream์ชฝ์˜ ํผํฌ๋จผ์Šค๊ฐ€ ๋” ์•ˆ์ข‹๊ฒŒ ๋‚˜์˜จ ๊ฒƒ์ด๊ฒ ์ฃ . ๊ทธ๋Ÿผ Bjarne ์•„์ €์”จ๋Š” int๋ฅผ string์ชฝ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์™œ stringstream์„ ์ถ”์ฒœํ•œ ๊ฒƒ์ผ๊นŒ์š”? ๊ทธ๊ฒŒ ๊ถ๊ธˆํ•ด์„œ ๋ฐ˜๋Œ€์ชฝ๋„ ์‹คํ—˜์„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.
#include <iostream>
#include <sstream>
using namespace std;
string itos(const long long& v) {
    stringstream ss;
    ss << v;
    string ret;
    ss >> ret;
    return ret;
}
int main() {
    string p;
    for ( int i = 0; i < 10000000; ++i ) {
        p = itos(324879829);
    }
}

์œ„์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ time์œผ๋กœ ์‹œ๊ฐ„์„ ์žฌ ๋ณด๋ฉด ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[bjlee@bjlee-xnote test]$ time ./a.out
real    0m19.790s
user    0m19.677s
sys     0m0.012s
[bjlee@bjlee-xnote test]$

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?
#include <iostream>
#include <sstream>
using namespace std;
string itos(const long long& v) {
    char buffer[256];
    sprintf(buffer, "%lld", v);
    return string( buffer );
}
int main() {
    string p;
    for ( int i = 0; i < 10000000; ++i ) {
        p = itos(324879829);
    }
}

์ด ๊ฒฝ์šฐ์˜ ์„ฑ๋Šฅ์„ ์žฌ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[bjlee@bjlee-xnote test]$ time ./a.out
real    0m7.683s
user    0m7.104s
sys     0m0.032s
[bjlee@bjlee-xnote test]$

์–ด์จŒ๋˜ stringstream์„ ์“ฐ๊ฒŒ ๋˜๋ฉด ์„ฑ๋Šฅ์€ ๋ฐฐ ์ด์ƒ ๋–จ์–ด์ง€๋Š”๊ตฐ์š”.
๊ทธ๋ ‡๋‹ค๋ฉด Bjarne ์•„์ €์”จ๊ฐ€ int๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ stringstream์„ ์“ฐ๋Š”๊ฒŒ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ถ”์ฒœํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์ด์œ ๋„ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. string์„ int๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ชฝ์€ ๊ทธ๋Ÿด๋“ฏํ•œ ์†”๋ฃจ์…˜์ด ์ด๋ฏธ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (atoll์ด๋‚˜ atoi์™€ ๊ฐ™์€) ๊ฑฐ๊ธฐ๋‹ค ์ด๋Ÿฐ ํ•จ์ˆ˜๋“ค์€ '๋” ์ด์ƒ ๊ฐ„๋‹จํ•ด์งˆ ์ˆ˜ ์—†์„ ์ •๋„๋กœ' ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜๋“ค์ด์–ด์„œ, ๊ทธ ํ•จ์ˆ˜๊ฐ€ '๊ทธ๋‹ค์ง€ ์šฐ์•„ํ•ด๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ์ด์œ ๋กœ' C++์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ๊ณ ์•ˆํ•ด ๋‚ธ๋‹ค๋Š” ๊ฒƒ์ด ๋ง์ด ๋˜์งˆ ์•Š์•„์š”. ๋ฐฉ๊ธˆ ์œ„์—์„œ ์‹คํ—˜ํ•œ ๊ฒฐ๊ณผ๋กœ๋„ ์ฆ๋ช…๋˜๋Š” ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค๋งŒ, ์„ฑ๋Šฅ๋„ ๋” ํ˜•ํŽธ์—†์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ฃ .
๋ฐ˜๋ฉด int๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋ฉด, ๊ทธ๋‹ค์ง€ ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ (์œ„์˜ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ๋„ ์จ๋จน์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ) sprintf๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ๊ฒƒ๋„ ๋ฒ„ํผ๋ฅผ ์žก๋Š” ๋“ฑ์˜ ์‚ฌ์ „ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ˆ๊นŒ ๊ทธ๋ ‡๊ฒŒ ํŽธํ•˜์ง€๋Š” ์•Š์•„์š”. ๊ทธ๋Ÿฌ๋‹ˆ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” 'stringstream'์„ ์“ฐ๋Š”๊ฒŒ ๋‚˜์„ ์ˆ˜๋„ ์žˆ๊ฒ ์ฃ . Bjarne์˜ ๋ง์ฒ˜๋Ÿผ, '๊ฐ„๋‹จํ•จ'์ด๋ผ๋Š” ๊ฒฌ์ง€์—์„œ ๋ณด๋ฉด ๋ง์ด์—์š”. ๊ฑฐ๊ธฐ๋‹ค stringstream ํด๋ž˜์Šค ์•ˆ์—๋Š” ์˜ค๋งŒ๊ฐ€์ง€ ๋ฐ์ดํ„ฐํƒ€์ž…์„ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ค๋ฒ„๋กœ๋”ฉ๋œ ์—ฐ์‚ฐ์ž๋“ค์ด ์ž”๋œฉ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ์•ˆ์ข‹์„์ง€ ๋ชฐ๋ผ๋„, "%lld๊ฐ™์€ ์˜ต์…˜์„ ์ „๋ถ€ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ, ํŽธํ•˜๋‹ค๋Š” ๊ฒƒ์ด์ฃ . (๊ฑฐ๊ธฐ๋‹ค template์„ ์„ž์–ด์“ฐ๋ฉด ์•„๋งˆ ๋” ํŽธํ•ด์งˆ๊ฒ๋‹ˆ๋‹ค ใ…‹ใ…‹)
๊ทธ๋ ‡๋‹ค๋ฉด ์˜ค๋Š˜์˜ ๊ฒฐ๋ก ์€...
  • int -> string ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” stringstream์„ ์“ฐ๋Š” ๊ฒƒ์ด '๊ฐ„๋‹จํ•˜'๋‹ค.
  • ๋ฐ˜๋Œ€์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” stringstream์„ ์จ ๋ด์•ผ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด ์ง€์ง€ ์•Š๋Š”๋‹ค
  • ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ๋ชจ๋‘, C API๋ฅผ ์“ฐ๋Š” ๊ฒƒ์— ๋น„ํ•ด์„œ๋Š” ์„ฑ๋Šฅ์ด ๊ต‰์žฅํžˆ ๋–จ์–ด์ง„๋‹ค

์„ฑ๋Šฅ์ด ๊ฑฑ์ •๋˜์‹ ๋‹ค๋ฉด ๋ญ๋‹ˆ๋ญ๋‹ˆ ํ•ด๋„ C API์ชฝ์ด ๋‚ซ๊ฒ ์–ด์š”.
๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
arcsin arccos ๋“ฑ๋“ฑ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ.
๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
in Judge Queue๋กœ ์ธํ•ด ์•„์ง ํŒ๋‹จ๋ชปํ•œ ๋‚ด๊ฐ€ ํ‘ผ ์†Œ์Šค


2007/2008 ACM International Collegiate Programming Contest
University of Ulm Local Contest

Problem A: Annoying painting tool

Maybe you wonder what an annoying painting tool is? First of all, the painting tool we speak of supports only black and white. Therefore, a picture consists of a rectangular area of pixels, which are either black or white. Second, there is only one operation how to change the colour of pixels:

Select a rectangular area of r rows and c columns of pixels, which is completely inside the picture. As a result of the operation, each pixel inside the selected rectangle changes its colour (from black to white, or from white to black).

Initially, all pixels are white. To create a picture, the operation described above can be applied several times. Can you paint a certain picture which you have in mind?

Input Specification

The input contains several test cases. Each test case starts with one line containing four integers n, m, r and c. (1 โ‰ค r โ‰ค n โ‰ค 100, 1 โ‰ค c โ‰ค m โ‰ค 100), The following n lines each describe one row of pixels of the painting you want to create. The ith line consists of m characters describing the desired pixel values of the ith row in the finished painting ('0' indicates white, '1' indicates black).

The last test case is followed by a line containing four zeros.

Output Specification

For each test case, print the minimum number of operations needed to create the painting, or -1 if it is impossible.

Sample Input

3 3 1 1
010
101
010
4 3 2 1
011
110
011
110
3 4 2 2
0110
0111
0000
0 0 0 0

Sample Output

4
6
-1
๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋ณ€์ˆ˜์˜ ์ตœ์†Œ ์ตœ๋Œ€๊ฐ’ ์„ค์ •
ํ• ์ˆ˜์žˆ๋‹ค.

์ „๋ฐฉ์„ ์–ธ!!!!!!
class ๋ธ”๋ผ๋ธ”๋ผ;

๋’ค์— ๋ทฐํด๋ž˜์Šค์—์„œ ๋‹ค์ด์•Œ๋กœ๊ทธ๋ฅผ ์ธํด๋ฃจ๋“œ

๋‹ค์ด์•Œ๋กœ๊ทธ์—์„œ ๋ทฐํด๋ž˜์Šค์—์„œ ์ธํด๋ฃจ๋“œ

๊ณ ๋กœ ์‚ฅ๊ธ€์‚ฅ๊ธ€ ๋ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ „๋ฐฉ์„ ์–ธ์„ ํ•œ๋‹ค.

(์‚ฌ์‹ค์€ ์ž˜ ๋ชป ์งœ์—ฌ์ง„ ๊ตฌ์กฐ)

๊ทธ๋Ÿฌ๋‚˜ MFC์—์„œ ์ด๋ ‡๊ฒŒ ์ œ๊ณต์„ํ•˜๊ธฐ๋•Œ๋ฌธ์—

์ผ์ข…์˜ ํŠธ๋ฆญ์„ ์จ์„œ ์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

---
์ƒ์„ฑ์ž๋ณด๋‹ค ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฒŒ ๋” ๋Š๋ฆฌ๋ฏ€๋กœ

๋งŒ๋“ค์–ด์ง€์ง€๋„ ์•Š์•˜๋Š”๋ฐ ์ดˆ๊ธฐํ™”ํ• ๋ ค๋ฉด ์—๋Ÿฌ!

๊ทธ๋ž˜์„œ WM_INITDIALOG ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ. ์—ฌ๊ธฐ์„œ ์ดˆ๊ธฐํ™”.


์ฐธ๊ณ ๋กœ. ON์ด๋ถ™๋Š” ํ•จ์ˆ˜๋Š” ๋ฉ”์‹œ์ง€์—์„œ ์˜จ ํ•จ์ˆ˜์ด๋‹ค!!!


๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜: http://kin.naver.com/knowhow/entry.php?eid=UvRpyW8yP2g+VvhY0HHMHSzQhvBuJyNF

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

"์ปดํ“จํ„ฐ๋ฅผ ์ „๊ณตํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์ธ๋ฐ, ์ปดํ“จํ„ฐ๋ฅผ ์ž˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?" ์˜ˆ์ „์— ์–ด๋–ค ์‚ฌ๋žŒ์ด ์ด๋Ÿฐ ์งˆ๋ฌธ์„ ํ•ด์™”๋‹ค. ์ด ์งˆ๋ฌธ์œผ๋กœ ์–˜๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด์ž(์‚ฌ์‹ค ํ•„์ž๋„ ์ปดํ“จํ„ฐ๋ฅผ ํ•™๋ฌธ์œผ๋กœ ์ „๊ณตํ•œ ์‚ฌ๋žŒ์€ ์•„๋‹ˆ๋‹ค).
๋ชจ๋“  ๋ถ„์•ผ์˜ ์ผ์ด ๋งˆ์ฐฌ๊ฐ€์ง€์ง€๋งŒ, ์ปดํ“จํ„ฐ ๊ด€๋ จ ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์•ผ๋งŒํผ ์ด๋ก ๊ณผ ์‹ค์ œ์˜ ์ฐจ์ด๊ฐ€ ํ•ญ์ƒ ๋ฏผ๊ฐํ•˜๊ฒŒ ๊ต์ฐจ๋˜๋Š” ๋ถ„์•ผ๊ฐ€ ๊ทธ๋ฆฌ ํ”ํ•˜์ง€๋Š” ์•Š๋‹ค. ์šฐ์„  ์šฐ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ๋ฅผ '๊ณผํ•™'์œผ๋กœ ๋ณผ ๊ฒƒ์ธ์ง€, '๊ณตํ•™'์œผ๋กœ ๋ณผ ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.
๊ณผํ•™์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€. ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณผํ•™์€ '๊ฐ€์„ค๊ณผ ๊ฒ€์ฆ'์ด๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณผํ•™์€ ๊ฐ€์„ค์„ ์„ธ์šฐ๊ณ , ์ด๋ฅผ ๊ฒ€์ฆํ•ด ์ด๋ก ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณตํ•™์€ ์ข€ ๋‹ค๋ฅด๋‹ค. ๊ณตํ•™์€ ์‹ค์ œ๋กœ ์œ ์šฉํ•œ ๊ตฌํ˜„๋ฌผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ณตํ•™์˜ ๋ชฉ์ ์€ ๋ฌด์–ธ๊ฐ€ ๊ตฌ์ฒด์ ์ธ '๊ตฌํ˜„' ํ˜น์€ '๊ณต์ •'์ด ๋œ๋‹ค.
โ—† ๊ณผํ•™ : ๊ฐ€์„ค๊ณผ ๊ฒ€์ฆ ์ด๋ก 
โ—† ๊ณตํ•™ : ๋ฐฉ๋ฒ•๊ณผ ํšจ์œจ ๊ตฌํ˜„
์šฐ๋ฆฌ๋‚˜๋ผ ์ „์‚ฐํ•™์˜ ์˜๋ฌธ ๋ช…์นญ์€ ๋Œ€๋ถ€๋ถ„ 'Computer Science'๋กœ ํ‘œ๊ธฐ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ปดํ“จํ„ฐ ๊ณผํ•™๊ณผ ์ปดํ“จํ„ฐ ๊ณตํ•™์€ ์กฐ๊ธˆ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด ๊ธ€์„ ์ฝ๋Š” ๋…์ž์˜ ๋Œ€๋ถ€๋ถ„์ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ˜น์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ด€์ ์—์„œ ์ปดํ“จํ„ฐ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค('๊ณตํ•™'์˜ ์ž…์žฅ์—์„œ ์ปดํ“จํ„ฐ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ์ด๋‹ค). ์ด๋ก ์„ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜์ž.
ํ•„์ž๋Š” ์ด ๊ธ€์„ ํ†ตํ•ด ์ „์‚ฐํ•™ ์ด๋ก ์— ๋Œ€ํ•œ ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ณด๋‹ค ์ „์‚ฐํ•™์—์„œ๋Š” ๋ฌด์—‡์„ ๊ณต๋ถ€ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ , ์ „์‚ฐํ•™์˜ ์—ฌ๋Ÿฌ ๋ถ„์•ผ ์ค‘์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ผ์— ๊ตฌ์ฒด์ ์ธ ๋„์›€์ด ๋˜๋Š” ๋ถ€๋ถ„์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ '์ƒ์‹'์„ ์—์„œ ์งš์–ด๋ณด๊ณ ์ž ํ•œ๋‹ค.
์–ธ์ œ๋‚˜ '๊ธฐ๋ณธ'์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋‹ค์‹œ ๋Œ์ด์ผœ ๋ณด์ž. ์ด๋ก ์—์„œ ์‹ค์งˆ์ ์ธ ๋„์›€์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„๋“ค, ์ด๋ก  ์ค‘์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„๋‘ฌ์•ผ ํ•  ์ƒ์‹๋“ค, ์ž˜๋ชป ์ดํ•ด๋˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„๋“ค(์ด๋ก ๊ณผ ์‹ค์ œ์˜ ์ฐจ์ด)์„ ์‚ดํŽด๋ณด์ž.
์ „์‚ฐํ•™์˜ ๊ธฐ์ดˆ '๋น… 5'
์ปดํ“จํ„ฐ๋ฅผ ์ ‘ํ•˜๊ณ  ์ด๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์–ธ์  ๊ฐ€๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๊ฑฐ๋‚˜, ์šด์˜์ฒด์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•œ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ „์‚ฐํ•™์˜ ๋ถ„์•ผ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ๋กœ ์ด๋Ÿฐ ๋ถ„์•ผ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค. ์ „์‚ฐํ•™์˜ ์—ฌ๋Ÿฌ ๋ถ„์•ผ ๊ฐ€์šด๋ฐ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋‹ค์„ฏ ๋ถ„์•ผ๋ฅผ ๊ผฝ๋Š”๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
1. ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก 
2. ์šด์˜์ฒด์ œ
3. ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜
4. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ก , ์ปดํŒŒ์ผ๋Ÿฌ
5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ก 
์ด ๋‹ค์„ฏ ๊ฐœ์˜ ๋ถ„์•ผ๋Š” ๊ธฐ์ดˆ๋ถ„์•ผ๋กœ ๊ผฝํžˆ๋ฉฐ, ์‹ค์ œ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ์ „์‚ฐํ•™๊ณผ์—์„œ ๊ฐ•์˜๊ฐ€ ์ด๋ค„์ง€๊ณ  ์žˆ๋‹ค.
์ด ๋ฐ–์— ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™, ๋„คํŠธ์›Œํฌ, ์ธ๊ณต์ง€๋Šฅ ๋“ฑ์˜ ๋ถ„์•ผ๊ฐ€ ์žˆ์œผ๋ฉฐ, ํ•™๊ต์— ๋”ฐ๋ผ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ–๊ณ  ์ปค๋ฆฌํ˜๋Ÿผ์ด ์šด์˜๋œ๋‹ค.
๋…์ž ์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋ฏธ ์•Œ๊ฒ ์ง€๋งŒ, ์ด ๋ถ„์•ผ๋ฅผ ๋ชจ๋‘ ๊ณต๋ถ€ํ•ด์•ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ'ํ•˜๋Š” ๊ฒƒ๊ณผ ์ด ๋ถ„์•ผ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์ „ํ˜€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ˆ„๊ตฌ๋‚˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์‹ค์ œ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ „ํ˜€ ์—†๋Š” ์‚ฌ๋žŒ๋„ ๋Œ€๋žต 4โˆผ6๊ฐœ์›” ์ •๋„์˜ ํ•™์Šต์„ ๊ฑฐ์น˜๋ฉด ์‹ค์ „์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ •๋„์˜ ๋Šฅ๋ ฅ์ด ๋ฐฐ์–‘๋œ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ชจ๋“  ๊ฒƒ์ด ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. 1๋…„์ด๋‚˜ 2๋…„์ด ์ง€๋‚˜๋ฉด, 'ํ”„๋กœ๊ทธ๋žจ ์งค ์ˆ˜ ์žˆ๋‹ค'๋Š” ์ •๋„์˜ ๋‚ด๊ณต(?)์— ๋ถ€์กฑํ•จ์„ ๋Š๋ผ๊ฒŒ ๋˜๋Š” ๊ฒƒ์€ ์–ด์ฉŒ๋ฉด ๋‹น์—ฐํ•œ ์ผ์ธ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.
์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋”ฐ๋ฅธ ๋‹ค์–‘ํ•œ ์ด์Šˆ๋ฅผ ์†Œํ™”ํ•˜๊ณ , ์‹ค์ œ ๊ธฐ์ˆ ์˜ ์žฅ๋‹จ์ ์„ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์กฐ๊ธˆ์€ ๋‹ค๋ฅธ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.
์˜ˆ์ปจ๋Œ€ ๊ฐœ๋ฐœ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ˆ˜ํ–‰ ํšจ์œจ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•œ ์„ฑ๋Šฅ ํŠœ๋‹, ์ด์‹, ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜์™€ ๋ฐฐํฌ, ํŒ€ ๊ฐœ๋ฐœ์„ ์ด๋Œ์–ด ๊ฐ€๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด์™ธ์˜ ์ด์Šˆ๋ฅผ ๋งŒ๋‚˜๋ฉด, 'ํ”„๋กœ๊ทธ๋žจ์„ ์งค ์ˆ˜ ์žˆ๋‹ค'๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๊ตฌ์„์ด ๋งŽ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๊ธฐ๋ณธ๊ธฐ์˜ ์ค‘์š”์„ฑ์„ ์ ˆ๊ฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๊ธ€์˜ ๋ชฉ์ ์€ ์ „์‚ฐํ•™์ด๋ผ๋Š” ํ™”๋‘๋ฅผ ๊ฐ–๊ณ , '๊ธฐ๋ณธ๊ธฐ'๋ผ๋Š” ๊ฒƒ์„ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ๊ฐ ๋ถ„์•ผ๋ณ„๋กœ ์‚ดํŽด๋ณด์ž(์ด ๊ธ€์€ ์ „์‚ฐํ•™์˜ ์ „์ฒด๋ฅผ ์–˜๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ „์‚ฐํ•™๊ณผ ํ•™๋ถ€๊ณผ์ •์—์„œ ๋ฐฐ์šฐ๋Š” ๋‚ด์šฉ๊ณผ ๊ต์žฌ์— ํ•œ์ •ํ•œ ์–˜๊ธฐ๋ผ๋Š” ์ ์„ ์ „์ œํ•œ๋‹ค).
<!--(PAGEBREAK)-->
์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก 
๊ฐ•์ขŒ๋‚ด์šฉ : ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก ์€ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ปดํ“จํ„ฐ์˜ ๊ธฐ๋ณธ์ ์ธ ํ•˜๋“œ์›จ์–ด์˜ ์ž‘๋™ ์›๋ฆฌ์™€ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๋Š” ๋ถ„์•ผ. ๋ถ€์šธ ๋Œ€์ˆ˜(Boolean Algebra)์™€ ๋…ผ๋ฆฌ ํ‘œํ˜„์„ ์ตํžˆ๊ณ , ์ด๋ฅผ ํ•˜๋“œ์›จ์–ด๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๊ณต๋ถ€ํ•˜๊ณ  ์ง‘์ ํšŒ๋กœ(IC)์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ๋ฐฐ์šด๋‹ค. CPU, ๋ฉ”๋ชจ๋ฆฌ, ์ž…์ถœ๋ ฅ์˜ ๊ตฌ์„ฑ์ด๋‚˜ ์ฃผ๋ณ€ ์žฅ์น˜์™€์˜ ํ†ต์‹ ๋ฐฉ๋ฒ• ๋“ฑ๋„ ํฌํ•จ๋œ๋‹ค.
์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ์ž…์žฅ์—์„œ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก ์€ '์–ด์…ˆ๋ธ”๋ฆฌ์–ด'๋ฅผ ์ตํžˆ๊ณ , ๋™์ž‘์›๋ฆฌ๋ฅผ ์•„๋Š” ๋ฐ ์˜์˜๊ฐ€ ์žˆ๋‹ค. ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก ์€ ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก ์„ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ๊ณผ ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ์ผ์—๋Š” ์•„์ฃผ ํฐ ๊ฒฉ์ฐจ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
๋งŒ์ผ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋‚ฉ๋•œ์งˆ์„ ๋ฐฐ์šฐ๊ฑฐ๋‚˜ ์›์นฉ ๋งˆ์ดํฌ๋กœ ์ปดํ“จํ„ฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค.
์šด์˜์ฒด์ œ
๊ฐ•์ขŒ๋‚ด์šฉ : ์ปดํ“จํ„ฐ์™€ ์šด์˜์ฒด์ œ์˜ ๊ตฌ์กฐ, ๊ฐ€์ƒ ๊ธฐ์–ต ์žฅ์น˜, ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น, ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง ๋“ฑ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ์ด๋“ค๊ณผ ๊ด€๋ จ๋œ ์ด์Šˆ๋ฅผ ๊ณต๋ถ€ํ•œ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๊ฐ•์ขŒ์—์„œ ์œ ๋‹‰์Šค ์šด์˜์ฒด์ œ์˜ ๊ตฌ์กฐ์™€ ์ž‘๋™์›๋ฆฌ๋ฅผ ์‹ค์‚ฌ๋ก€๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์œ ๋‹‰์Šค๋Š” C๋กœ ์†Œ์Šค๊ฐ€ ์“ฐ์—ฌ ์žˆ์–ด ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ธฐ์— ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜๋˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ๋ก ์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ค‘์š”ํ•œ ๋‚ด์šฉ์„ ๋งŽ์ด ๋‹ด๊ณ  ์žˆ๋‹ค. ๋ฌผ๋ก  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, CPU ์Šค์ผ€์ฅด๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ฃผ๋ณ€์žฅ์น˜ ๊ด€๋ฆฌ ๋“ฑ์— ๋Œ€ํ•œ ํ•™์Šต์ด ์‹ค์ œ ์ฝ”๋”ฉ์— ์ง์ ‘ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋”๋ผ๋„, ์กฐ๊ธˆ ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •์ฑ…์— ๋Œ€ํ•œ ๊ตฌํ˜„์€ ์—ฌ๋Ÿฌ๋ถ„์ด ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ์ ์ง€ ์•Š์€ ๋„์›€์„ ์ค€๋‹ค. ํŠนํžˆ '๋ฌด์Šจ ๋ฌด์Šจ ์„œ๋ฒ„'๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด, ์šด์˜์ฒด์ œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ์•„์ฃผ ํ•„์ˆ˜์ ์ด๋‹ค.
์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜
๊ฐ•์ขŒ๋‚ด์šฉ : ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐ์ข… ๊ฒ€์ƒ‰, ์ •๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๊ณ  ๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•œ๋‹ค.
์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•  ํ•„์š”์„ฑ์€ ์ ์ฐจ ์ค„์–ด๋“ค๊ณ  ์žˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋งŽ์€ ๋‚ด์šฉ์ด ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์ถ•๋ผ ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜ํ™”์ ์ธ ํ˜„์ƒ์œผ๋กœ ์ž๋ฆฌ์žก์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋น„์ •ํ˜•ํ™”๋œ ์ž๋ฃŒ๋Š” ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค XML๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์ƒ๋‹นํžˆ ๋ณดํŽธํ™”๋๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๋„๋ก CArray, CList, CMap ๊ฐ™์€ ์„ธ ๊ฐœ์˜ ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฐฐ์—ด, ์–‘๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ์ •๋„๋ฉด ์›ฌ๋งŒํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๋ฐ”๋„ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ฒกํ„ฐ๋‚˜ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋“ฑ์„ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๋” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋ฉด ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ํ‘œ์ค€ํ™”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” C++์˜ STL์„ ์ด์šฉํ•ด๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด ์—†์ด ์ด๋Ÿฐ ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ ์–ด๋„ ์–‘๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ์ˆ˜์ค€๊นŒ์ง€ ํ•ด๋ด์•ผ ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ/ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ธฐ๋ณธ์œผ๋กœ ๊ณต๋ถ€ํ•˜์ง€๋งŒ, ์‹ค์ œ๋Š” ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ํƒ์ƒ‰๊ณผ ์ •๋ ฌ์ด ์˜คํžˆ๋ ค ๋” ์ค‘์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ ฌ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์ •๋„๊นŒ์ง€ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
<!--(PAGEBREAK)-->
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ์ปดํŒŒ์ผ๋Ÿฌ
๊ฐ•์ขŒ๋‚ด์šฉ : ๊ฐ์ข… ์–ธ์–ด์˜ ํŠน์„ฑ์„ ์„œ๋กœ ๋น„๊ตํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ• ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋“ฑ์„ ๋‹ค๋ฃฌ๋‹ค. ๋…ผ๋ฆฌ ์–ธ์–ด, ํ•จ์ˆ˜ ์–ธ์–ด, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ํŠน์„ฑ ๋ฐ ์‘์šฉ ๋ถ„์•ผ ๋“ฑ์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์˜คํ† ๋จธํ„ฐ(Automata) ๊ตฌ์„ฑ, ์–ดํœ˜ ๋ถ„์„(lexical analysis) ๋“ฑ์„ ํ•™์Šตํ•˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ ์ œ์ž‘๋„๊ตฌ์ธ Lex๋‚˜ Yacc๋ฅผ ์ด์šฉํ•ด ๊ฐ„๋‹จํ•œ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌด์ฒ™ ๋ณต์žกํ•˜๊ณ  ๊นŒ๋‹ค๋กœ์šด ๋ถ„์•ผ ์ค‘ ํ•˜๋‚˜๋‹ค. HTML, XML๊ณผ ๊ฐ™์€ ๋งˆํฌ์—… ์–ธ์–ด๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉด์„œ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ•œ ๋ถ€๋ถ„์ธ ํŒŒ์„œ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋†’์•„์กŒ์œผ๋ฉฐ, ์ด์— ๋”ฐ๋ผ ๊ณต๊ฐœ๋œ ํŒŒ์„œ๋„ ๋งŽ์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŒŒ์„œ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์ด๋ก ์ด ํ•„์š”ํ•˜๊ฒ ์ง€๋งŒ, ํ”ํ•˜์ง€ ์•Š์€ ์ผ์ด๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
๊ฐ•์ขŒ๋‚ด์šฉ : ์ฃผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์™€ ๋™์ž‘ ๋“ฑ์— ๋Œ€ํ•œ ์ด์Šˆ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ, ์ •๊ทœํ™” ๋ฐฉ๋ฒ•๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„, ํŠœ๋‹ ๋“ฑ์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด๋ก ์„ ๊ณต๋ถ€ํ•œ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์€ ํ•„์ˆ˜์ ์ธ ์‚ฌํ•ญ์œผ๋กœ SQL, ERD ์ž‘์„ฑ, ์ •๊ทœํ™”, ์„ค๊ณ„, ๊ตฌ์ถ•, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ ๋“ฑ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์š”๊ตฌ๋˜๋Š” ๊ธฐ์ˆ ์ด ๋๋‹ค. ํŠนํžˆ SQL์— ๋Œ€ํ•œ ์ดํ•ด์™€ ์‚ฌ์šฉ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค.
์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ํ•˜๋‚˜๋„ ์—†๋‹ค
์ „์‚ฐํ•™์˜ ๊ธฐ์ดˆ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๋‹ค์„ฏ ๋ถ„์•ผ ์ค‘ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๊ฐ€์žฅ ํฌ๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๋ถ„์•ผ๋ฅผ ๊ผฝ์œผ๋ผ๋ฉด, ์ฃผ์ € ์—†์ด '์šด์˜์ฒด์ œ๋ก '์„ ๊ผฝ์„ ๊ฒƒ์ด๋‹ค. ๋งŒ์ผ, ์—ฌ๋Ÿฌ๋ถ„์˜ ํŒ€์—์„œ ์‹œ๊ฐ„์  ์—ฌ์œ ๊ฐ€ ์ข€ ์žˆ๊ณ , BOOK GROUP(ํŠน์ •ํ•œ ์ฑ…์„ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜๋Š” ํ•œ์‹œ์ ์ธ ํ•™์Šต ์กฐ์ง)์„ ์šด์˜ํ•œ๋‹ค๋ฉด ์šด์˜์ฒด์ œ๋ก ์— ๋Œ€ํ•œ ํ•™์Šต์„ ๊ฐ€์žฅ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ๋‹ค.
ํŠนํžˆ (์—ฌ๋Ÿฌ๋ถ„์ด ์œˆ๋„์šฐ๋ฅผ ์“ด๋‹ค๊ณ  ํ•ด๋„) ์œ ๋‹‰์Šค์— ๋Œ€ํ•œ ํ•™์Šต์€ ์•„์ฃผ ํ•„์ˆ˜์ ์ธ ์ฝ”์Šค ์ค‘ ํ•˜๋‚˜๋‹ค(์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํ•™์Šต์€ ์œ ๋‹‰์Šค ๋ช…๋ น์–ด๋‚˜ ์‚ฌ์šฉ๋ฒ•์„ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค). ์œˆ๋„์šฐ 2000์˜ ๋‚ด๋ถ€์ ์ธ ๊ตฌ์„ฑ์ด ์ด์ „ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•ด ์œ ๋‹‰์Šค๋ฅผ ๋งŽ์ด ๋‹ฎ์•˜๋‹ค๋Š” ์ ๊ณผ ๋งฅ OS X์ด ์™„์ „ํžˆ ์œ ๋‹‰์Šค ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ์ ์€ ์‹œ์‚ฌํ•˜๋Š” ๋ฐ”๊ฐ€ ํฌ๋‹ค. ๋ณด์•ˆ๊ณผ ๊ด€๋ จํ•ด ๋„คํŠธ์›Œํ‚น์„ ๊ณต๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์œ ๋‹‰์Šค๋Š” ๋”์šฑ ์ค‘์š”ํ•˜๋‹ค. TCP/IP ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์ธํ„ฐ๋„ท ๊ด€๋ จ ํ”„๋กœํ† ์ฝœ์ด๋‚˜ ๊ธฐ๋ฐ˜๊ธฐ์ˆ ์ด ์œ ๋‹‰์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ž๋ฐ” VM(Java Virtual Machine, ์ดํ•˜ JVM)์€ ์šด์˜์ฒด์ œ์™€ ๊ทธ ์—ญ์‚ฌ๊ฐ€ ์ „ํ˜€ ๋‹ค๋ฅด์ง€๋งŒ, ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž…์žฅ์—์„œ ๋ณด๋ฉด JVM๋„ ํ•˜๋‚˜์˜ ์šด์˜์ฒด์ œ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์ง€์‹์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” JVM์˜ ํŠน์„ฑ์— ๋Œ€ํ•ด ํ•™์Šตํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
์ž๋ฐ”๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ฑฐ์˜ ํ•œ๊ฒฐ ๊ฐ™์ด ์ž๋ฐ”๊ฐ€ 100% ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ด์ง€๋Š” ์•Š๋‹ค๊ณ  ๋งํ•œ๋‹ค(์•„๋งˆ๋„ ์ •๋„์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์ด๋‹ค). ์ž๋ฐ” ๊ธฐ์ˆ ์€ ๋Œ€๋ถ€๋ถ„ ์ฌ์ด ์ŠคํŽ™์„ ์ œ๊ณตํ•˜๊ณ , ์ด๋ฅผ ์—ฌ๋Ÿฌ ํšŒ์‚ฌ๋“ค์ด ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. JVM๋งŒ ๋ด๋„ ๊ทธ๋ ‡๋‹ค.
์ฌ, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ, IBM ๋“ฑ ์œ ์ˆ˜์˜ ์—…์ฒด๋“ค์ด ๋‚˜๋ฆ„๋Œ€๋กœ ๊ตฌํ˜„ํ•œ JVM์„ ๋‚ด๋†“๊ณ  ์žˆ์œผ๋ฉฐ ์•ˆ์ •์„ฑ, API ๊ตฌํ˜„์ƒ์˜ ํŠน์ด์ , ํ™•์žฅ ๊ธฐ๋Šฅ ์ œ๊ณต๋ฉด์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ณ  ์žˆ๋‹ค. ๊ฐ€๋”์€ ์ด๋Ÿฐ ์ฐจ์ด๊ฐ€ ํŠน์ • JVM์„ ์„ ํƒํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๋˜ํ•œ JVM ์ž์ฒด๊ฐ€ ์šด์˜์ฒด์ œ ์œ„์—์„œ ์šด์˜๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— JVM์˜ ๊ตฌํ˜„ ํŠน์„ฑ๊ณผ ์šด์˜์ฒด์ œ์˜ ํ™˜๊ฒฝ์„ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค.
<!--(PAGEBREAK)-->
๊ทธ ๋‹ค์Œ์œผ๋กœ ์ค‘์š”ํ•œ ๋ถ„์•ผ๋ฅผ ๊ผฝ๋Š”๋‹ค๋ฉด '๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค', '์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜'์ด๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Object-Oriented DBMS)๊ฐ€ ์ฃผ๋ชฉ์„ ๋ฐ›์•„ ๋งŽ์€ ์—ฐ๊ตฌ๊ฐ€ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Relational DBMS)๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜์ง€๋Š” ๋ชปํ•˜๊ณ  ์žˆ๋‹ค(ํ˜„์žฌ๋Š” RDB์— ODB์˜ ํŠน์„ฑ์„ ๊ฐ€๋ฏธํ•œ ORDB๊ฐ€ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์ด๋‹ค).
์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋” ์ด์ƒ ํŠน์ˆ˜ํ•œ ๋ถ„์•ผ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ธํ„ฐ๋„ท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
<ํ‘œ 1>์€ ์ด ๋‹ค์„ฏ ๋ถ„์•ผ์˜ ๊ต์žฌ๋กœ, ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ฑ…์„ ๋‚˜์—ดํ•œ ๊ฒƒ์ด๋‹ค(๋ถ„์•ผ๋ณ„๋กœ ๋‹ค๋ฅธ ์ข‹์€ ์ฑ…์ด ๋งŽ์ด ์žˆ์œผ๋‚˜ ๊ฐœ์ธ์  ์ฒดํ—˜์— ์ž…๊ฐํ•ด ํ•œ ๊ฐœ์”ฉ ์„ ์ •ํ•œ ๊ฒƒ์ด๋‹ค). ์ด ์ฑ…๋“ค์€ ๋ชจ๋‘ ๋ฒˆ์—ญ์„œ๋„ ์žˆ๋‹ค.
<ํ‘œ 1> ๋ถ„์•ผ๋ณ„ ๋Œ€ํ‘œ์ ์ธ ๊ต์žฌ

๊ณผ๋ชฉ

์ €์„œ

์ปดํ“จํ„ฐ ๊ตฌ์กฐ๋ก 

Computer System Architecture 2/e, M. Morris Mano, Prentice-Hall, 1982

์šด์˜์ฒด์ œ๋ก 

Operating System Concepts 4/e, Avi Silberschatz, Peter Galvin, Addision Wesley Longman, Inc., 1998.

์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Fundamentals of DATA STRUCTURES in C++, Horowitz & Sahni, Computer Sci. Press, 1995.

์ปดํŒŒ์ผ๋Ÿฌ

Compilers: Principles, Techniques, and Tools, Alfred Aho, Ravi Sethi,Jeffrey Ullman, Addison-Wesley, 1986.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ก 

An introduction to Database Systems 6/e, C.J.Date, Addison-Wesley, 1995.

๊ทธ ๋ฐ–์˜ ๋ถ„์•ผ๋“ค
์•ž์„œ ๋งํ•œ ๋ถ„์•ผ ์™ธ์— ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™, ๋„คํŠธ์›Œํฌ, ์ธ๊ณต์ง€๋Šฅ ๊ฐ™์€ ๋ถ„์•ผ๋„ ์ด์— ๋ชป์ง€ ์•Š๊ฒŒ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋ถ„์•ผ์ด๋‹ค.
์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์€ ๋ถ„์„ ์„ค๊ณ„ ๊ตฌํ˜„์„ ํฐ ์ถ•์œผ๋กœ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐœ๋ฐœ์‹œ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์™€ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์Šˆ๋ฅผ ์ฃผ๋กœ ๋‹ค๋ฃฌ๋‹ค. ์š”์ฆ˜์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก ๊ณผ ๋ถ„์„/์„ค๊ณ„์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋งŽ์ด ๋ณด๊ฐ•๋˜๊ณ  ์žˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋Š” ์ฃผ๋กœ ๋„คํŠธ์›Œํ‚น์˜ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋˜๋Š” OSI 7 ๊ณ„์ธต์— ๋Œ€ํ•œ ๋‚ด์šฉ๊ณผ ํ”„๋กœํ† ์ฝœ ๊ด€๋ จ ์ด์Šˆ๊ฐ€ ์ฃผ๋ฅ˜๋ฅผ ์ด๋ฃฌ๋‹ค. ์ธ๊ณต์ง€๋Šฅ์—์„  ๋ฌธ์ œ ํ•ด๊ฒฐ, ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ, ์ง€์‹ ์ฒ˜๋ฆฌ, ์ถ”๋ก  ๋จธ์‹ , ๋กœ๋ณดํ‹ฑ์Šค, ์—์ด์ „ํŠธ ๋“ฑ์˜ ์—ฐ๊ตฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค.
์ด ์„ธ ๊ฐ€์ง€์˜ ๋ถ„์•ผ์— ๋Œ€ํ•œ ์ง€์‹์€ ๊ฐ„์ ‘์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋งŽ์€ '๊บผ๋ฆฌ'๋ฅผ ๋˜์ ธ์ค€๋‹ค. ์‹ค๋ฌด์—์„œ ์ผํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋“ค ๋ถ„์•ผ์— ๋Œ€ํ•ด์„  ์ง€๋‚˜์น˜๊ฒŒ ์›๋ก ์ ์ธ ์ด๋ก ์„œ๋ณด๋‹ค๋Š” ํ•œ ๋‹จ๊ณ„ ์‰ฝ๊ณ  ๊ตฌ์ฒด์ ์ธ ์•ˆ๋‚ด์„œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ข‹๋‹ค.
ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ '์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ'์ด๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค(์ฐธ๊ณ ๋กœ ํ”„๋กœ๊ทธ๋žจ์€ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ๋””์Šคํฌ์ƒ์˜ ์ด๋ฏธ์ง€๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค). ๋‹ค์‹œ ๋งํ•ด, ํ”„๋กœ์„ธ์Šค๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋ผ ์žˆ๋˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋ผ ์šด์˜์ฒด์ œ์˜ ์ œ์–ด๋ฅผ ๋ฐ›๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ปดํŒŒ์ผํ•˜๊ณ  ๋งํฌํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค(์œˆ๋„์šฐ๋ผ๋ฉด *.exe๋ผ๋Š” ํŒŒ์ผ์ด, ์œ ๋‹‰์Šค๋ผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ a.out์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค). ์‰˜์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰์‹œํ‚ค๋ฉด, ์ปค๋„์€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ด์— ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์–ด๋‚ธ ํ›„, ์ปค๋„์˜ ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์— ๋“ฑ๋กํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ, ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๊ฐ™์€ ์ž์›์„ ํ• ๋‹นํ•˜๋Š”๋ฐ, ์ด๋•Œ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์€ ์ปค๋„์˜ ํ•œ ํ”„๋กœ์„ธ์Šค๋กœ์„œ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
<!--(PAGEBREAK)-->
ํ”„๋กœ์„ธ์Šค๋Š” Win32์˜ ๊ฒฝ์šฐ์— CreateProcess(), ์œ ๋‹‰์Šค์˜ ๊ฒฝ์šฐ์—๋Š” fork() ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ„์—๋Š” ๋‹ค์–‘ํ•œ IPC(Inter-Process Communication) ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
<๊ทธ๋ฆผ 1>์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ๋ชจ์Šต์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” ์œ ๋‹‰์Šค์™€ ์œˆ๋„์šฐ๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค (JVM์—์„œ ๋Œ์•„๊ฐ€๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ๋„ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค). ๊ทธ๋ฆผ์—์„œ ์œ„์ชฝ์ด ๋‚ฎ์€ ์ฃผ์†Œ๋ฒˆ์ง€๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆผ์—์„œ ๋ณด์ด๋Š” ๋„ค ๊ฐœ์˜ ๋ฒ”์œ„(ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ, ํž™, ์Šคํƒ)๋ฅผ ๊ฐ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋ผ๊ณ  ํ•œ๋‹ค.
๊ฐ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•ด ์ข€๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž(์—ฌ๊ธฐ์„œ๋Š” ์œ ๋‹‰์Šค์™€ C๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„œ์ˆ ํ•˜์ง€๋งŒ, ์œˆ๋„์šฐ์—์„œ๋„ ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ๊ฐ–๋Š”๋‹ค).
โ—† ํ…์ŠคํŠธ : ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ฝ”๋“œ์ธ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ์™€ ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ๊ฐ€์ง„๋‹ค(CPU๊ฐ€ ์ฝ์–ด๋“ค์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ…์ŠคํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ฝ”๋“œ ์˜์—ญ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค).
โ—† ๋ฐ์ดํ„ฐ : C์–ธ์–ด์—์„œ ์ „์—ญ ๋ณ€์ˆ˜, ์ •์  ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ์˜์—ญ(์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ)
โ—† ํž™ : ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์ค‘ malloc(), free() ๋“ฑ์˜ ์‹œ์Šคํ…œ ์ฝœ๋กœ ํ• ๋‹น๋˜๊ณ , ํ•ด์ง€๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
โ—† ์Šคํƒ : C์–ธ์–ด์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜, ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์ด ๋๋‚ฌ์„ ๋•Œ ๋ฆฌํ„ดํ•  ์ฃผ์†Œ(return address)๋ฅผ ํ‘ธ์‹œํ•œ๋‹ค(ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ์ด ๊ฐ’์„ ํŒํ•˜๊ณ  ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค).
์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ…์ŠคํŠธ ๋ถ€๋ถ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ„์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ํ”„๋กœ๊ทธ๋žจ์˜ ํ…์ŠคํŠธ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์นจ๋ฒ”ํ•ด ๊ธฐ๋กํ•˜๋ฉด ๋ฒ„์Šค ์—๋Ÿฌ๋‚˜ ์„ธ๊ทธ๋จผํŠธ ๊ฒฐํ•จ์ด ์ผ์–ด๋‚˜์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์œˆ๋„์šฐ์—์„œ '์ž˜๋ชป๋œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค'๋ž€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณธ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ์—๋Ÿฌ(์ž˜๋ชป๋œ ์—ฐ์‚ฐ)์˜ 95% ์ด์ƒ์ด ๋ฐ”๋กœ ์•ž์„œ ์ด๋Ÿฐ ์—ฐ์œ ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.
C/C++์™€ ๊ฐ™์ด ํฌ์ธํ„ฐ(์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ๋ณ€์ˆ˜)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ๋„ ํ”ํžˆ ์ด์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์ด ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜์˜ 80% ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๋Š” ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
โ—† ์ดˆ๊ธฐํ™”
โ—† ํ•ด์ง€
์ž๋ฐ”๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ง€ํ•˜์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ๋ช…์‹œํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. C/C++์—์„œ๋Š” ์“ฐ์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ์ ์œผ๋กœ delete๋ฅผ ์จ์ค˜์•ผ ํ•œ๋‹ค.
C/C++๋Š” ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ, ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฐ€์žฅ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋‹ค. ๊ผผ๊ผผํžˆ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
<!--(PAGEBREAK)-->
๋ฉ€ํ‹ฐ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด์˜ ์‚ฌ์šฉ
๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ, ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ, ๋ฉ€ํ‹ฐ ์œ ์ €๋Š” ๋น„์Šท๋น„์Šทํ•œ ์šฉ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ˆํ•ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ์˜๋ฏธ๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค.
โ—† ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋ผ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ. ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰๋˜๋‹ค๊ฐ€ ์ž…์ถœ๋ ฅ์„ ํ•˜๋ฉด CPU๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์˜ ์ž…์ถœ๋ ฅ์„ ๊ธฐ์ค€์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰์˜ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚œ๋‹ค(์š”์ฆ˜์€ ์ข€์ฒ˜๋Ÿผ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ง์ด๋‹ค).
โ—† ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ : ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ. ์šด์˜์ฒด์ œ๊ฐ€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค์ˆ˜์˜ CPU๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์—ฌ๋Ÿฌ CPU๊ฐ€ ์šด์˜์ฒด์ œ์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ SMP(๋Œ€์นญํ˜• ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ)๋ผ๊ณ  ํ•œ๋‹ค(์œˆ๋„์šฐ NT๊ฐ€ ์ด๋Ÿฐ ๋ฐฉ์‹์ด๋‹ค).
โ—† ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น(์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ) : ํƒœ์Šคํฌ(Task, ์šด์˜์ฒด์ œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„)๊ฐ€ ์—ฌ๋Ÿฟ์ธ ๊ฒƒ. ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ•์ œ๋กœ CPU ์‹œ๊ฐ„์„ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•œ๋‹ค.
โ—† ๋ฉ€ํ‹ฐ ์œ ์ € : ๋ฉ€ํ‹ฐ ์œ ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์ด ๋˜๋Š” ์‹œ์Šคํ…œ์— ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ ๋‹ค์ค‘ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.
โ—† ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ : ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜ํ–‰๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ™œ์šฉ๋œ๋‹ค(์‰ฝ๊ฒŒ ๋งํ•ด ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์„ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค).
์—ฌ๊ธฐ์„œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•ด ์ข€๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์•Œ์•„๋ณด์ž. ์“ฐ๋ ˆ๋“œ๋Š” '์ˆ˜ํ–‰ ๊ฒฝ๋กœ'๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
CPU๊ฐ€ ํ…์ŠคํŠธ(์ฝ”๋“œ)๋ฅผ ์ฝ์–ด ์ˆ˜ํ–‰ํ•  ๋•Œ ์ˆ˜ํ–‰๋˜๋Š” ์ ˆ์ฐจ๋ฅผ ํ•˜๋‚˜์˜ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ๋ผ๊ณ  ํ•œ๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ž€ ๊ฒฐ๊ตญ ์ด๋Ÿฐ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋„ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฒˆ๊ฐˆ์•„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ, ํž™, ์Šคํƒ์˜ ๊ฐ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ CPU ๋ ˆ์ง€์Šคํ„ฐ์— ๋‹ด๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‚ด์šฉ์„ ๋ฐ”๊ฟ”(์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ) ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ ๊ฐ„์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฝ”๋“œ ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญํ•  ๋•Œ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‚ด์šฉ์„ ์กฐ๊ธˆ๋งŒ ๋ฐ”๊ฟ”๋„ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์— ๋น„ํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ํ•˜๋Š” ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น์ด๋‚˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ, ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ๋™๊ธฐํ™”๊ฐ€ ํ•„์—ฐ์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค.
์ž๋ฐ”๋Š” ์–ธ์–ด ์ฐจ์›์—์„œ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค. synchronized ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์†์‰ฝ๊ฒŒ ๋™๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. synchronized๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์— ๋น„ํ•ด ์•ฝ 3โˆผ4๋ฐฐ์ •๋„ ๋Š๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์œ ๋‹‰์Šค์™€ ์œˆ๋„์šฐ๋Š” ์šด์˜์ฒด์ œ ์ฐจ์›์—์„œ Event, Critical Section, Mutex, Semaphore ๋“ฑ์˜ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค.
๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก ๊ณผ UML
์š”์ฆ˜ ์†Œํ”„ํŠธ์›จ์–ด ์ „๋ฐ˜์— '๊ฐ์ฒด์ง€ํ–ฅ'์ด๋ž€ ๋ง์ด ๋ถ™์ง€ ์•Š์€ ๋ถ„์•ผ๊ฐ€ ์—†๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—๋„ ๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„/์„ค๊ณ„, ๋ฐฉ๋ฒ•๋ก ์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ์ด์ œ UML(Unified Modeling Language)์€ ์ •์ฐฉ ๋‹จ๊ณ„์— ๋“ค์–ด์„ฐ๋‹ค. ์–ด๋Š ๊ธ€์„ ๋ณด๋“ ์ง€, ํ‘œ๊ธฐ๋ฒ•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‘ UML์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
<!--(PAGEBREAK)-->
ํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด UML์„ ์˜คํ•ดํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋‘ ๊ฐ€์ง€๋งŒ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.
1. UML์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
2. UML์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ์ƒ๊ธฐ๋Š” ๋งŽ์€ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.
UML์€ ๋ฐฉ๋ฒ•๋ก (methodology)์ด ์•„๋‹ˆ๋‹ค. UML์€ ํ‘œ๊ธฐ๋ฒ•(notation)์ด๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด UML์„ ์ผ์ข…์˜ ๋ฐฉ๋ฒ•๋ก ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ, UML์€ ๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„/์„ค๊ณ„์˜ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํ‘œ์ค€์ ์ธ ํ‘œ๊ธฐ๋ฒ•์„ ์ œ๊ณตํ•  ๋ฟ์ด์ง€ UML ์ž์ฒด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๊ณ  ์–˜๊ธฐํ•˜๋ ค๋ฉด ํ‘œ๊ธฐ๋ฒ•๊ณผ ํ•จ๊ป˜ ๊ณต์ •์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๋ฐฉ๋ฒ•๋ก  = ํ‘œ๊ธฐ๋ฒ• + ๊ณต์ •
ํ•˜์ง€๋งŒ UML์€ ๊ณต์ •์„ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ RUP(Rational Unified Process)๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ž์ฒด์˜ ๊ณ ์œ ํ•œ ๊ณต์ •์„ ์จ๋„ ์ข‹๋‹ค๋Š” ์–˜๊ธฐ๊ฐ€ ๋œ๋‹ค.
๋˜ ํ•œ ๊ฐ€์ง€ ์‚ฌ์‹ค์€ UML์„ ์“ฐ๋”๋ผ๋„ ์—ฌ์ „ํžˆ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋Š” ์–ด๋–ค ๋ฐฉ๋ฒ•๋ก ์„ ์“ฐ๊ฑด ๋ฐฉ๋ฒ•๋ก ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ํ’€์–ด์•ผ ํ•  ๊ณผ์ œ๋กœ ๋‚จ๊ฒŒ ๋œ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด ์™œ UML์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€. ๊ทธ ๋‹ต์€ '๋‚จ๋“ค์ด ๋ชจ๋‘ ์“ฐ๋‹ˆ๊นŒ'๋‹ค. ์šฐ์Šค๊ฐœ ์†Œ๋ฆฌ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค์ด์ž ๊ณง ํ˜„์‹ค์ด๋‹ค. ์ข€๋” ๊ณ ์ƒํ•˜๊ฒŒ ๋งํ•ด ํ‘œ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. UML์€ ๊ฐœ๋ฐœ์ž๊ฐ„ ํ˜น์€ ๊ฐœ๋ฐœ์ž์™€ ๊ณ ๊ฐ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์— ์žˆ์–ด ํ‘œ์ค€์ ์ธ ํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๋ฐ ๊ฐ€์žฅ ํฐ ์˜์˜๊ฐ€ ์žˆ๋‹ค. ์‚ฌ์‹ค ์‹œ์Šคํ…œ์„ ๋ถ„์„/์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ํ‘œ๊ธฐ๋ฒ•์ด๋‚˜ ๊ณต์ •๋ณด๋‹ค '๊ฒฝํ—˜'์ด ํ›จ์”ฌ ์ค‘์š”ํ•˜๋‹ค. ํ•„์ž๋Š” '๊ฒฝํ—˜'์„ ์•ž์„œ๋Š” ๊ฒƒ์€ ์•„๋ฌด ๊ฒƒ๋„ ์—†๋‹ค๊ณ  ๋ณธ๋‹ค.
<๊ทธ๋ฆผ 2> UML์˜ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

๋งŽ์€ ์‚ฌ๋žŒ์ด ์žฌ์‚ฌ์šฉ์„ ๋ถ€๋ฅด์ง–๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์„ ์žฌ์‚ฌ์šฉ์—์„œ ์ฐพ๊ณ  ์žˆ์ง€๋งŒ, ์‹ค์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ์žฌ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€ ๋Œ์ด์ผœ ๋ณด๋ผ.
์žฌ์‚ฌ์šฉ์ด ๊ฐ€์žฅ ์ž˜ ์ ์šฉ๋˜๋Š” ๋ถ„์•ผ๊ฐ€ ๋ฐ”๋กœ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ(CBD; Component Based Development)์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์กฐ๋ฆฝํ•˜๋Š” ์—ญํ• ๊ณผ ๋ฐฐ๋ถ„์ด ๊ทธ๋ฆฌ ์‰ฝ๊ฒŒ ์ด๋ค„์ง€์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ฒฐ๊ตญ ๊ฐ์ฒด์ง€ํ–ฅ๋ก ์ด๋‚˜ ์žฌ์‚ฌ์šฉ, CBD ๋“ฑ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ์ข€๋” ๋„์›€์ด ๋˜๋„๋ก ํ•˜๋Š” ๋…๋ ค์˜ ๋Œ€์ƒ์ด์ง€ ๊ทธ ์ž์ฒด๊ฐ€ ๋ชฉ์ ์ด ๋  ์ˆ˜๋Š” ์—†๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„์•ผ์—์„œ๋Š” ์•„๋ฌด๋ฆฌ ์ข‹์€ ๊ฐœ๋…์— ์•„๋ฌด๋ฆฌ ์ข‹์€ ์ œํ’ˆ์ด๋ผ๋„ ์‹ค์ œ ํ™œ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด ์†Œ์šฉ์ด ์—†๋‹ค.
์ปดํ“จํ„ฐ์™€ ์ˆ˜ํ•™
์ปดํ“จํ„ฐ์˜ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ์ˆ˜ํ•™์ด๋ผ๋Š” ๊ฒƒ์„ ์•„๋Š” ์‚ฌ๋žŒ์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ทธ๋ฆฌ ๋งŽ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค.
์‚ฌ์‹ค ์ปดํ“จํ„ฐ์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ถ€์šธ ๋Œ€์ˆ˜์ด๊ณ , ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ˆ˜ํ•™์˜ ์ง‘ํ•ฉ๋ก ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ ๋†“์€ ๊ฒƒ์ด๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์น˜๊ณ  70๋…„๋Œ€๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๊นŒ๋‹ญ์€ ์ˆ˜ํ•™์  ์ด๋ก ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ–ˆ๋‹ค๋Š” ๋ง๋„ ์žˆ๋‹ค.
๋ฌผ๋ก  ์ˆ˜ํ•™์— ๋Œ€ํ•œ ์ดํ•ด์™€ ์ง€์‹์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๋ฐ ๋งŽ์€ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด์ง€๋งŒ ์ ˆ๋Œ€ ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์ค‘ํ•™๊ต 3ํ•™๋…„ ์ •๋„์˜ ์ˆ˜ํ•™์ด๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
๊ณ ๋“ฑํ•™๊ต ์ด์ƒ์˜ ์ˆ˜ํ•™ ์‹ค๋ ฅ์ด ํ•„์š”ํ•œ ๋ถ„์•ผ๋Š” ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค๋‹ค(์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ). ๋งŒ์ผ ๋ณด๋‹ค ์‹ฌ๋„ ๊นŠ์€ ์—ฐ๊ตฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ์ด์‚ฐ ์ˆ˜ํ•™(Discrete Mathematics)์ด๋ผ๋Š” ์ˆ˜ํ•™๋ถ„์•ผ๋ฅผ ๊ณต๋ถ€ํ•  ๊ฒƒ์„ ๊ถŒํ•œ๋‹ค. ์ด์‚ฐ ์ˆ˜ํ•™์€ ์ „์‚ฐํ•™์˜ ๊ธฐ์ดˆ ์ด๋ก ์„ ์ˆ˜ํ•™์ ์ธ ์ž…์žฅ์—์„œ ๋‹ค๋ฃฌ๋‹ค. ์ˆ˜ํ•™์ด๋ผ๋Š” ํ•™๋ฌธ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๋Š” ๋ฌดํ•œ(Infinity)์™€ ์—ฐ์†(Continuity)์„ ๋บ€ ์ˆ˜ํ•™์ด๋ผ๊ณ  ๋ณด๋ฉด ํ‹€๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
<!--(PAGEBREAK)-->
๋ฏธ๋ž˜๋ฅผ ์ขŒ์šฐํ•˜๋Š” ๊ฒƒ
์ธํ„ฐ๋„ท์˜ ํ™•์‚ฐ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ๊ณ„๋ฅผ ํ—ˆ๋ฌผ์—ˆ๊ณ , ์†Œํ”„ํŠธ์›จ์–ด ์‚ฐ์—…์ „์ฒด๋ฅผ ๋’ค์ง‘์–ด ๋†“์•˜๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์€ ์›น ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜๋์œผ๋ฉฐ, ์ธํ„ฐ๋„ท์„ ๋นผ๋†“๊ณ ์„  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์กŒ๋‹ค.
๊ทธ ๋‹ค์Œ์€ ๋ฌด์—‡์ธ๊ฐ€. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ '๋ชจ๋ฐ”์ผ'์ผ ๊ฒƒ์ด๋ผ๋Š” ์ ์— ๋งŽ์€ ์‚ฌ๋žŒ์ด ๊ณต๊ฐ์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ๋‹ค.
๋ชจ๋ฐ”์ผ ์‹œ์žฅ์˜ ํ™œ์„ฑํ™”์— ๋”ฐ๋ผ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ์šด์˜์ฒด์ œ๋‚˜ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ฐ๊ด‘๋ฐ›์„ ๊ฒƒ์ด๊ณ  ๋”์šฑ ๋” ๋งŽ์€ ๊ธฐ์ˆ ์ด ๋ฐœํ‘œ๋  ๊ฒƒ์ด๋‹ค. ํ˜„์žฌ๋„ ๊ธฐ์ˆ ์€ ์•ฝ์–ด์ง‘์ด ํ•„์š”ํ•  ์ •๋„๋กœ ์Ÿ์•„์ ธ ๋‚˜์˜ค๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ฐจ ์ฝ”๋”ฉ์€ ๊ธฐ์ˆ ๊ณผ ๊ธฐ์ˆ ์„ ๋ฌถ์–ด๋‚ด๋Š” ๋„๊ตฌ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
๋งŽ์€ ํ”Œ๋žซํผ๊ณผ ์–ธ์–ด๊ฐ€ ํฅ๋ง์„ฑ์‡ ๋ฅผ ๊ฑฐ๋“ญํ•ด ๊ฐ€๋ฉด์„œ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ๊ณผ ๊ธฐ๋ฐ˜๊ธฐ์ˆ ์€ ํฌ๊ฒŒ ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค. ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ 'ํฐ ๋…ธ์ด๋งŒ ๊ตฌ์กฐ(stored program)'๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ  ์žˆ๊ณ , ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“  ๊ธฐ์ˆ ์ด ์ด์ „ ๊ธฐ์ˆ ์„ ๋ฐ”ํƒ•์— ๋‘๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
UML์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. UML์€ ์‚ฌ์‹ค ์ „ํ˜€ ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ด์ „์˜ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ ๊ณผ ๊ฐœ๋…์„ ์ข…ํ•ฉํ•˜๊ณ  ํ‘œ์ค€ํ™”ํ–ˆ์„ ๋ฟ์ด๋‹ค. C#๋„ C++, ์Šค๋ชฐํ† ํฌ, ์ž๋ฐ”์™€ ๊ฐ™์€ ์กฐ์ƒ ์–ธ์–ด์™€ COM/DCOM์— ๊ธฐ๋ฐ˜ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.
ํ•„์ž๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ํ–ฅํ›„ ๋Œ€์ค‘์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋Œ€ํ‘œ ์ฃผ์ž๋Š” ์ž๋ฐ”์™€ C#์ด ๋  ๊ฒƒ์œผ๋กœ ์ ์น˜๊ณ  ์žˆ๋‹ค. C#์€ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด๊ฐ€ COM ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋ผ ์žˆ๊ณ , ์ž๋ฐ”๋Š” EJB๋ฅผ ํ†ตํ•ด CBD๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. JVM๊ณผ .NET ํ”Œ๋žซํผ์„ ๋ณด๋ฉด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ”Œ๋žซํผ์— ํก์ˆ˜๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฐ ์–˜๊ธฐ๊ฐ€ ์‚ฌ๋ญ‡ ๋‹ค๋ฅด๊ฒŒ ๋“ค๋ฆด์ง€ ๋ชฐ๋ผ๋„, ์กฐ๊ธˆ๋งŒ ๊นŠ๊ฒŒ ์‚ดํŽด๋ณด๋ฉด ์‹ค์€ ๋น„์Šทํ•œ ๊ฐœ๋…์˜ ๊ธฐ๋ฐ˜๊ธฐ์ˆ ์„ ๋ฐฐ๊ฒฝ์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์›น๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์„œ๋น„์Šค์—๋„ XML๊ณผ SOAP๋Š” ๋”์šฑ ๋” ๋งŽ์ด ์“ฐ์ด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค(XML๊ณผ SOAP๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋ฌถ์–ด๋‚ด๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ด๋‹ค). ์ด์ œ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์–‘ํ•œ ์ง€์‹์„ ์ž์‹ ์ด ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด๋กœ ์š”๋ฆฌํ•ด ์—ฎ์–ด๋‚ด๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ž์งˆ์ด ์š”๊ตฌ๋˜๊ณ  ์žˆ๋‹ค. @

์ฐธ๊ณ  ๋ฌธํ—Œ
Operating System Concepts 3/e, A. Silberschatz, J. Peterson, P. Galvin, Addison-Wesley, 1992
Digital Logic and Computer Design, M. Morris Mano, Prentice-Hall, 1979
Computer System Architecture 2/e, M. Morris Mano, Prentice-Hall, 1982
Computer Organization and Architecture: Principles of Structure and Function, William Stallings, Macmillan Publishing Company, 1987
Discrete Mathematics with Computer Science Applications, Skvarcius, Robinson, The Benjamin/Cummings Publishing Company, 1986
Fundamentals of Data Structures in C++, Ellis Horowitz, Sartaj Sahni and Dinesh Mehta, Computer Science Press, 1995
Introduction to Algorithms: A Creative Approach, Udi Manber, Addison-Wesley Publishing Company, 1989
Object Lifecycles, Sally Shlaer, Stephen J. Mellor, Prentice-Hall, New Jersey, 1992
Object-Oriented Modeling and Design, J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy, W. Lorensen, Prentice-Hall, 1991

๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

2007๋…„ 07์›” 04์ผ

ํผ์˜จ๊ณณ : http://minjang.egloos.com/1313277

MFC๋Š” ์˜์›ํ•˜๋‹ค?

์š”์ฆ˜ ์•„์ฃผ ์ข‹์•„๋ผ ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค. Adobe์—์„œ ๋‚˜์˜จ Lightroom์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๋ณดํ†ต DSLR ๊ธ‰์˜ ์นด๋ฉ”๋ผ๋“ค์€ JPEGํŒŒ์ผ ์™ธ์—๋„ RAW๋ผ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์›์‹œ ํฌ๋งท ํ˜•ํƒœ๋กœ๋„ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ์ด RAW ํŒŒ์ผ๋“ค์€ ํ™”์ดํŠธ๋ฐธ๋Ÿฐ์Šค ๋ฐ ๋…ธ์ถœ ๋ณด์ •์— ์•„์ฃผ ์ข‹๊ธฐ ๋•Œ๋ฌธ์— JPEG์ด์—ˆ๋‹ค๋ฉด ๋ณต๊ตฌํ•˜๊ธฐ ํž˜๋“  ์‚ฌ์ง„๋„ ๊ฑฐ์˜ ์™„๋ฒฝํ•˜๊ฒŒ ์‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค. Adobe Lightroom์€ ์ด๋Ÿฐ RAW ํŒŒ์ผ์„ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์•„์ฃผ ํŽธ๋ฆฌํ•˜๊ณ  ์•„๋ฆ„๋‹ค์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.

๊ทธ๋ฆผ 1. Adobe Lightroom

์ง์—…์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜€๋˜ ํ„ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ์„์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์„ ์ˆ˜๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋†€๋ž๊ฒŒ๋„ ์œˆ๋„์šฐ ๋ฒ„์ „ ํ”„๋กœ๊ทธ๋žจ์€ MFC (Microsoft Foundation Class)๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค. 2007๋…„์— ๋‚˜์˜จ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฌด๋ ค 10๋…„์ด๋‚˜ ๋” ๋œ, ๊ทธ๋ฆฌ๊ณ  ๋” ์ด์ƒ MS์—์„œ๋„ ์ž˜ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š๋Š” MFC๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์กฐ๊ธˆ ๋†€๋ผ์› ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๊ทธ ๋งŒํผ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š”๋ฐ .NET ๋ณด๋‹ค๋Š” Win32 ๋ฐ MFC๋ฅผ ๊ทธ๋ƒฅ ์“ฐ๋Š” ๊ฒƒ์ด ๋” ํŽธํ•˜๊ณ  ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ์ค€๋‹ค๋Š” ๊ฒƒ์„ ํ•จ์ถ•ํ•œ๋‹ค. ๋œฌ๊ธˆ์—†๋Š” ๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด ์ง€๊ธˆ ์ƒˆ๋กœ์šด ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ActiveX๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†๋‹ค. ๋‹จ, ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”Œ๋žซํผ์„ ์œ„ํ•ด์„œ๋„ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (์ด๊ฒƒ์ด ๊ฒฐ๊ตญ ํ•ต์‹ฌ!)

๊ทธ๋ฆผ 2. Spy++๋กœ Window Class ๋ช…์„ ์‚ดํŽด๋ณธ๋‹ค. AfxFrameOrView๋Š” MFC๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์„ ๋œปํ•œ๋‹ค.

๊ทธ๋ฆผ 3. Dependency Walker๋กœ MFC๊ด€๋ จ DLL์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ๋„ ํŒŒ์•… ๊ฐ€๋Šฅ.

๋ฌผ๋ก , Lightroom์€ ๋งฅ ๋ฒ„์ „๋„ ์žˆ์œผ๋ฏ€๋กœ ์—”์ง„ ๋ถ€๋ถ„์€ ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ด๊ณ , GUI ๋ถ€๋ถ„๋งŒ ์œˆ๋„์šฐ์—์„œ๋Š” MFC๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์—ˆ์„ ๊ฒƒ์ด๋‹ค. Lightroom ๊ฐ™์€ ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋žจ์ด ํ”Œ๋žซํผ ๋…๋ฆฝ์„ ์œ„ํ•ด ์ž๋ฐ”๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ”๋ณด ๊ฐ™์€ ์ง“์ด๋‹ค. ๋‘ ๋ฐฐ์˜ ๋…ธ๋ ฅ์ด ๋“ค์–ด๋„ ๊ฐ๊ฐ ํ”Œ๋žซํผ์—์„œ ๊ฐ€์žฅ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๊ฒƒ์ด ๋” ์ด์ต์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›น ์„œ๋น„์Šค๋„ ๋ฌด์กฐ๊ฑด ํ‘œ์ค€, ํ”Œ๋žซํผ ๋…๋ฆฝ๋งŒ์„ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์ง“์ด๋‹ค. ๊ณต์งœ๋Š” ์—†๋‹ค. ์–ป๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์žƒ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค.

MFC๋Š” ํ•œ ์‹œ๋Œ€๋ฅผ ํ’๋ฏธํ–ˆ๋˜(?) ๋Œ€ํ‘œ์ ์ธ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€๋‹ค. ํ•œ ๋ˆˆ์— ๋ด๋„ ๋„ˆ๋ฌด๋‚˜ MFC ์Šค๋Ÿฌ์šด ๋„ค์ดํŠธ์˜จ ๋ฉ”์‹ ์ €๋‚˜ ACDSee ๋“ฑ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์ด MFC๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ๋” ์ด์ƒ MS๋Š” MFC์— ํฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ Visual Studio๊ฐ€ ๋‚˜์˜ค๋ฉด ์•ฝ๊ฐ„์˜ ์ˆ˜์ • ๋ฐ ๋ณด์•ˆ ์‚ฌํ•ญ์„ ํŒจ์น˜ํ•  ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๊ฐ๋ณด๋‹ค ์—ฌ์ „ํžˆ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์•„์ง๋„ Win32 ํ˜น์€ MFC๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  ์žˆ๋‹ค. ์™œ ์ด๋Ÿด๊นŒ?

๊ทธ๋ฆผ 4. ์—ญ์‹œ NateOn๋„ MFC๋กœ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค. Afx...

IT ๋ถ„์•ผ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด ์Ÿ์•„์ ธ ๋‚˜์˜ค๋Š” ๊ณณ์ด๋‹ค ๋ณด๋‹ˆ ์–ธ์ œ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™์•„ ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์˜์™ธ๋กœ IT ๋ถ„์•ผ๋Š” ๋งค์šฐ ๋ณด์ˆ˜์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, ์€ํ–‰๊ถŒ ๊ฐ™์€ ๊ณณ์˜ ์†”๋ฃจ์…˜๋“ค์€ ์•ˆ์ •์„ฑ์ด ์ตœ์šฐ์„ ์ด๋ฏ€๋กœ ์ƒ๋‹นํžˆ ์˜ค๋ž˜๋œ ๊ฒƒ๋“ค์„ ๊ทธ๋Œ€๋กœ ์“ฐ๊ณ  ์žˆ๋‹ค (๊ทธ๋ž˜์„œ MS ์†”๋ฃจ์…˜์ด ์ง„์ž…ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ํž˜๋“ค๋‹ค). ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ์—…์ฒด์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. Visual Studio 2005๊ฐ€ ๋‚˜์˜จ ์ง€ 2๋…„์ด ์ง€๋‚˜๋„ ์•„์ง๊นŒ์ง€๋„ Visual Studio 6.0์„ ์“ฐ๋Š” ๊ณณ๋„ ํ—ˆ๋‹คํ•˜๋‹ค (e.g. ์ฝฉ๋‚˜๋ฌผ ์ง€๋„๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๊น”๋ฆฌ๋Š” Fasoo๋ผ๋Š” ์†”๋ฃจ์…˜์€ VC++ 6์œผ๋กœ ์ปดํŒŒ์ผ์ด ๋˜์–ด ๋น„์Šคํƒ€์—์„œ ๊ณ„์† ์ฃฝ๋Š”๋‹ค. ๋ฃฐ๋ฃจ๋ž„๋ผ~). ์‚ฌ๋žŒ๋“ค์ด Windows Vista๊ฐ€ ๋‚˜์™€๋„ ์—ฌ์ „ํžˆ 90%๊ฐ€ XP๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๋„ ๋‹ค๋ฅผ ๊ฒƒ์ด ์—†๋‹ค.

2003๋…„, ๋‘ ๋ฒˆ์งธ ํšŒ์‚ฌ์— ๋ง‰ ํ•ฉ๋ฅ˜ํ•˜์˜€์„ ๋•Œ (๋‚ด ๊ธฐ์ค€์œผ๋กœ๋Š”) ์•„์ง๊นŒ์ง€๋„ VC++ 6์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ด๋Œ€๋ฅผ ๋งค๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์„ ๋œ ์ ์ด ์ฐธ ๋งŽ์œผ๋‹ˆ VS 2003์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜์ž๊ณ  ์ œ์•ˆ์„ ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ์—ˆ๋‹ค. ์ˆ˜ ๋งŽ์€ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ VS 2003์—์„œ ๋ฌธ์ œ ์—†์ด ์ปดํŒŒ์ผ์ด ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๊ณ , ๋˜ํ•œ VS 2003์„ ์ด์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํ–ˆ์„ ๋•Œ, ๋ฐฐํฌ ์‹œ ์–ด๋ ค์›€์ด ์—†๋Š”์ง€๋„ ๋”ฐ์ ธ์•ผ๋งŒ ํ–ˆ๋‹ค. ๊ฒฐ๊ตญ ์งง์ง€ ์•Š๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ์ค€๋น„ ๋์— ๊ฐœ๋ฐœ ํˆด์„ VS 2003์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๊ฒƒ๋„ ์‹ ๋ฒ„์ „ ํ”„๋กœ๊ทธ๋žจ์ด ๋‚˜์˜ค๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ๊น”์•„๋ณด๋Š” ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ(โ€ฆ)์ด ์žˆ์—ˆ๊ธฐ์— ๊ทธ๋‚˜๋งˆ ๊ฐ€๋Šฅํ•˜์˜€๋‹ค.

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

๊ทธ ์ „์— ์›์ดˆ์ ์œผ๋กœ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด "์™œ ์˜คํ”ผ์Šค ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ด์•ผ ํ•ด?" ํ˜น์€ "์™œ ์œˆ๋„์šฐ ๋น„์Šคํƒ€๋กœ ๋ฐ”๊ฟ”์•ผ ํ•ด?"๋ผ๊ณ  ์งˆ๋ฌธ์„ ํ•˜๋“ฏ, ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋‹น์žฅ ๋„์ž…ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋‹ต์„ ๊ตฌํ•ด๋ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ โ€ฆ MFC๋ฅผ ์ด์šฉํ•œ ๋‚˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๋ฐ”๋„ ๊ณ„์† ๋œ๋‹ค. ใ…‹

๋ฐ˜์‘ํ˜•

+ Recent posts