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

๋ฐ˜์‘ํ˜•





์›๋ฌธ : madchick.egloos.com

jruby๋‹˜ ๋ธ”๋กœ๊ทธ์— ๋†€๋Ÿฌ๊ฐ”๋‹ค๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๋ฉ‹์ง„ Java 3D ๊ฒŒ์ž„์—”์ง„์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.. ์ž์‹ ๋“ค์˜ ์—”์ง„์˜ ์šฐ์ˆ˜์„ฑ์„ ํ™๋ณดํ•˜๊ธฐ ์œ„ํ•ด Quake 2 ์†Œ์Šค๋ฅผ ์ž๋ฐ”๋กœ ํฌํŒ…ํ•ด๋…ผ ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ–ˆ๋Š”๋ฐ, ์ด์•ผ ์ด๊ฑฐ ์ •๋ง ๋ฉ‹์ง€๋‹ค.. ๊ฐ„๋งŒ์— ์ดํด๋ฆฝ์Šค ๋„์›Œ์„œ ๋นŒ๋“œํ•ด ์‹คํ–‰์‹œ์ผœ๋ณด๋‹ˆ ๋ฉ‹์ง€๊ฒŒ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค.. ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€ ์ด ๋ฉ‹์ง„ ๊ฒƒ์„ ๋งŒ๋“  ์‚ฌ๋žŒ๋“ค์˜ ํ™ˆํŽ˜์ด์ง€๋กœ ๋†€๋Ÿฌ๊ฐ€์„œ ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ , ์†Œ์Šค์— ๊ฐ™์ด ๋“ค์–ด์žˆ๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ ๋‚ด์šฉ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ๋œ๋‹ค.. (ํ™ˆํŽ˜์ด์ง€ ๊ตฌ๊ฒฝํ•˜๊ธฐ)
ํ™ˆ ํŽ˜์ด์ง€์— ๋†€๋Ÿฌ๊ฐ€๋ณด๋ฉด "Jake 2 Play Now" ๋ผ๋Š” ๋ฒ„ํŠผ์ด ์ขŒ์ธก ๋ฉ”๋‰ด ํ•˜๋‹จ์— ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ๋งŒ ํด๋ฆญํ•˜๋ฉด ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์„ ๊ตฌ๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.. ๋ณต์žก์Šค๋Ÿฝ๊ฒŒ ๊ฐœ๋ฐœํˆด ์„ค์น˜ํ•˜๊ณ , ์†Œ์Šค์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ , ๋นŒ๋“œํ•ด์„œ ์‹คํ–‰์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๋‹ค.. Java Web Start ๋ผ๋Š” ๊ฒƒ์ด ๋ญํ•˜๋Š” ๋†ˆ์ธ๊ฐ€ ํ–ˆ๋”๋‹ˆ ์ด๋Ÿด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€ ๋ณด๋‹ค.. ์›น์„ ํ†ตํ•ด ๊น”๋”ํ•˜๊ฒŒ ์„ค์น˜๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์ด ๋ฉ‹์ง€๋‹ค..


์†Œ์Šค์ฝ”๋“œ ๊ฐ์ƒ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ์€
  1. Eclipse : ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ฒ„์ ผ์€ 3.1.2์ธ๋ฐ, ์ตœ์‹ ๋ฒ„์ ผ์€ ์•„๋‹๊ฑฐ๋‹ค.. ์„ค์น˜ํ•œ์ง€ 1๋…„์€ ๋„˜์€ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ.. 3.x ๋ฒ„์ ผ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ์—†์ด ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™๋‹ค..

  2. JDK : ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ ผ์ธ 1.5๋ฅผ ์„ค์น˜ํ•˜๋ผ๊ณ  ํ•œ๋‹ค.. ํ•˜์ง€๋งŒ, 1.4 ๋ฒ„์ ผ์—์„œ๋„ ์‹คํ–‰๋˜๋Š”๋ฐ ๋ฌธ์ œ๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์„œ (Jake 2 Play Now๋กœ ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์„ ๊ตฌ๊ฒฝํ–ˆ๋Š”๋ฐ JDK ์ตœ์‹ ๋ฒ„์ ผ์„ ์„ค์น˜ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋Š” ๋‚˜์˜ค์ง€ ์•Š์•˜์—ˆ๋‹ค.. ๋‚ด ๋…ธํŠธ๋ถ์— JDK 1.4๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ..) ์†Œ์Šค์ฝ”๋“œ ๋นŒ๋“œ๋„ 1.5 ์„ค์น˜์—†์ด ํ•ด๋ดค๋‹ค..
    ์ง€๊ธˆ ์ฐธ์—ฌ์ค‘์ธ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์ด JDK 1.4๋กœ ์„ธํŒ…์ด ๋˜์–ด ์žˆ๋Š”๋ฐ, ๊ดœํžˆ JDK 1.5๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๊ฐ€ ์•ˆ๋˜๋ฉด ๊ณจ์น˜ ์•„ํ”Œ ๊ฒƒ ๊ฐ™์•„์„œ๋ฆฌ.. ๋ฌผ๋ก  JDK๋ฅผ 1.4์™€ 1.5๋ฅผ ๋ชจ๋‘ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋„๋ก ์„ธํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ํ™•์‹คํ•˜์ง€ ์•Š์•„์„œ ๋ชจํ—˜์„ ํ•ด๋ณด๊ธด ์‹ซ์—ˆ๋‹ค.. ์š”์ฆ˜์—” ์ด๋Ÿฐ ์ €๋Ÿฐ ์‹คํ—˜ํ•ด๋ณผ ์‹œ๊ฐ„์ด ๋„‰๋„‰์น˜ ๋ชปํ•˜๊ฑฐ๋ฉ..

  3. Quake 2 : ๊ฒŒ์ž„์ด ์‹คํ–‰๋˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋‹ค.. ์ •ํ’ˆ์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, ๊ทธ๋ƒฅ ๋Œ๋ ค๋ณด๋Š” ์ •๋„๋ผ๋ฉด ๋ฐ๋ชจ๋ฒ„์ ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์„ค์น˜ํ•ด๋„ ๋œ๋‹ค.. ๋ฐ๋ชจ๋ฒ„์ ผ์˜ ๊ฒฝ์šฐ ์ œ์ผ ์ฒ˜์Œ ์‹œ์ž‘ ๋ถ€๋ถ„์˜ ๋งต ๋ช‡๊ฐœ๋งŒ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค..


๊ณต๊ฐœ๋œ C ์†Œ์Šค์ฝ”๋“œ
์™€ ์†๋„๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด, ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋А๋‚„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค.. ํ™ˆํŽ˜์ด์ง€์—์„œ ๋ฒค์น˜๋งˆํฌ ๋ถ€๋ถ„์„ ๋ณด๋ฉด C ์ฝ”๋“œ์™€์˜ ์†๋„๋น„๊ต๋ฅผ ํ•ด๋†จ๋Š”๋ฐ, ์ผ์ • ์ •๋„์˜ ํ•˜๋“œ์›จ์–ด๋งŒ ๊ฐ–์ถฐ์ง€๋ฉด ์˜คํžˆ๋ ค C ์ฝ”๋“œ๋ณด๋‹ค๋„ ๋” ๋น ๋ฅธ ์ƒํ™ฉ์ด ๋œ๋‹ค.. ์ด์ œ ์ž๋ฐ”๋กœ๋„ 3D ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๊ธ€์Ž„ ๋‚ด๊ฐ€ ๋ณด๊ธฐ์—” ๊ทธ ๋ฐ˜๋Œ€์ด๋‹ค.. ์ž๋ฐ”๊ฐ€ ์ฒ˜์Œ ๋“ฑ์žฅํ•œ๊ฒŒ ๋‚ด๊ฐ€ ๋Œ€ํ•™ 4ํ•™๋…„๋•Œ์ธ 96๋…„๋„ ์ธ๋ฐ, ์ด์ œ ์ •๋ง ๋”ฑ 10๋…„์ด ์ง€๋‚ฌ๋‹ค.. ํ•˜์ง€๋งŒ, 10๋…„์ด ์ง€๋‚˜๋„๋ก ํ˜„์žฌ๊นŒ์ง€๋„ VM์˜ ์†๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ๋ชปํ•œ ์ƒํƒœ๊ณ , ๊ทธ ๋•Œ๋ฌธ์— 3D ๊ฒŒ์ž„๋ถ„์•ผ๋Š” ์ž๋ฐ”๊ฐ€ ๋˜๋„ค ์•ˆ๋˜๋„ค ๋…ผ๋ž€์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.. Quake 2์™€ Jake 2๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ด์   ๊ฐ€๋Šฅํ•˜๋‹ค๋ผ๋Š” ์ฃผ์žฅ์€ ์ข€ ์„ค๋“๋ ฅ์ด ์—†๋Š” ๊ฒƒ์ด Quake 2๊ฐ€ 10๋…„์ „ ๊ฒŒ์ž„์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.. ์š”์ฆˆ์Œ์˜ 3D ๊ฒŒ์ž„๋“ค์€ Quake 2์™€ ๋น„๊ตํ•˜๋ฉด ํ›จ์”ฌ ๋” ํ™”๋ คํ•œ 3D ํ™”๋ฉด์„ ์š”๊ตฌํ•œ๋‹ค.. ์ด์ œ์„œ์•ผ 10๋…„์ „ ๊ฒŒ์ž„์„ ๋”ฐ๋ผ ์žก๊ณ ์„œ ์ž๋ฐ”๋„ 3D ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•˜๋Š”๊ฑด ์ข€.. ๋ฌผ๋ก , 2D ๊ฒŒ์ž„๋งŒ ์žˆ๋˜ ์ž„๋ฒ ๋””๋“œ ํ™˜๊ฒฝ์—์„œ ์ด์   Quake 2 ์ •๋„์˜ ๊ทธ๋ž˜ํ”ฝ์ด (Quake 2 ๊ทธ๋ž˜ํ”ฝ์ด ์ง€๊ธˆ ๋ด๋„ ํ—ˆ์ ‘ ์“ฐ๋ ˆ๊ธฐ ์ •๋„๋Š” ์•„๋‹ˆ๋‹ˆ..) ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„๋“ค์ด ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ •๋ง ๊ธฐ์œ ์ผ์ด๊ธด ํ•˜๋‹ค.. ๊ทธ๋ฆฌ๊ณ  Quake 3, Quake 4 ๋“ฑ์˜ ์†Œ์Šค๊ฐ€ ์ž๋ฐ”๋กœ ํฌํŒ…๋˜์–ด C์™€ ๋™๋“ฑํ•œ ์†๋„๋กœ ์‹คํ–‰๋˜๋Š” ๋‚ ์ด ๋‹ค๊ฐ€์˜ค๋Š” ์†๋„๊ฐ€ ์ ์  ๋นจ๋ผ์งˆ ๊ฒƒ์ด๋‹ค.. ํ•˜์ง€๋งŒ, ์š”์ฆ˜์˜ ๊ฒŒ์ž„๋“ค์€ ๊ฐ€์žฅ ์ตœ์ ํ™”, ์ตœ๋Œ€ํ•œ์˜ H/W ์„ฑ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด๋‹ค ๋” ํ™”๋ คํ•œ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์›€์ง์ž„์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š”๋ฐ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง์€ ์ž๋ฐ”์—์„œ์˜ 3D ๊ฒŒ์ž„์€ ๊ฐˆ๊ธธ์ด ๋จผ ๊ฒƒ ๊ฐ™๋‹ค.. ์ž๋ฐ”๋กœ ๋งŒ๋“ค์–ด์ง„ ์˜คํ”ผ์Šค ํ”„๋กœ๊ทธ๋žจ๋„ ๋‚˜์™”์œผ๋‹ˆ ์ด์ œ ๊ณง 3D ๊ฒŒ์ž„ ๋ถ„์•ผ์—๋„ ๊ธฐ๋Œ€๋ฅผ..


๊ทธ๋Ÿด ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†๊ฒ ์ง€๋งŒ, Jake 2 ์†Œ์Šค๋ฅผ JDK 1.4์—์„œ ๋Œ๋ ค๋ณด๋ ค๋Š” ์‚ฌ๋žŒ์€..
  1. ์ดํด๋ฆฝ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚จ ํ›„ CVS ํผ์ŠคํŽ™ํ‹ฐ๋ธŒ๋กœ ์ „ํ™˜ํ•ด์„œ CVS ์ ‘์†์„ ํ•œ๋‹ค..
    (์ƒˆ CVS repository๋ฅผ ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด ๋งŒ๋“ ๋‹ค.)
    host : jake2.cvs.sourceforge.net
    repository path : /cvsroot/jake2
    user : anonymous
    password : ์—†์Œ
    connection type : pserver

  2. ์ ‘ ์†์ด ๋˜๋ฉด ํŠธ๋ฆฌ์— HEAD ๋ผ๊ณ  ๋ณด์ผ ๊ฒƒ์ด๊ณ  ๊ทธ ๋ฐ‘์— jake2๋ผ๊ณ  ์žˆ๋‹ค.. ๋งˆ์šฐ์Šค ์šฐ์ธก ํด๋ฆญ์„ ํ•ด์„œ Checkout As.. ๋ฅผ ์„ ํƒํ•˜๊ณ  ์›ํ•˜๋Š” ์›์ŠคํŽ˜์ด์Šค ๋ช…, ํŒŒ์ผ ๊ฒฝ๋กœ ๋“ฑ์„ ์ž…๋ ฅํ•˜๋ฉด ์ดํด๋ฆฝ์Šค์šฉ ์›์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์„ ํƒํ•œ ๊ฒฝ๋กœ์— ์†Œ์ŠคํŒŒ์ผ๋“ค์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์ค€๋‹ค

  3. Java ํผ์ŠคํŽ™ํ‹ฐ๋ธŒ์—์„œ src/jake2/Jake2.java ๋ฅผ ๋งˆ์šฐ์Šค ์šฐ์ธก ๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ Run As -> Run์„ ์„ ํƒํ•˜๋ฉด ๋‹ค์ด์–ผ๋กœ๊ทธ ์ฐฝ์ด ํ•˜๋‚˜ ๋œฌ๋‹ค.. Java Application์„ ์„ ํƒํ•˜๊ณ  "New" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋Š”๋ฐ Arguments ํƒญ์„ ์„ ํƒํ•œ ํ›„์— VM arguments ๋ถ€๋ถ„์—
    -Xmx80M -Dsun.java2d.noddraw=true
    -Djava.library.path=lib/jogl/windows;lib/joal/windows;lib/lwjgl/windows
    ๋ผ๊ณ  ์ž…๋ ฅ์„ ํ•œ๋‹ค..

  4. ๋นŒ ๋“œ๋ฅผ ํ•ด๋ณด๋ฉด ์—๋Ÿฌ๊ฐ€ ์šฐ์ˆ˜์ˆ˜ ๋–จ์–ด์งˆ ๊ฒƒ์ธ๋ฐ assert (f >= 0) : "negative time and cursor bug"; ์ด๋Ÿฐ ๊ตฌ๋ฌธ ๋•Œ๋ฌธ์ด๋‹ค.. Java 5 ๋ถ€ํ„ฐ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•์ธ๊ฐ€๋ณธ๋ฐ, ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ .. ์ด๋Ÿฐ ์ ๊ฒ€๋ฌธ์€ ์—†์–ด๋„ ์‹คํ–‰๋˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‹ˆ ๋ชจ๋‘ ์ฃผ์„์ฒ˜๋ฆฌ.. ๊ทธ์™ธ์— ๋งŽ์€ ๊ฒฝ๊ณ ๋“ค์ด ๋–จ์–ด์ง€๋Š”๋ฐ ๊ฑด JDK 1.5๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋‚ ๋งŒํ•œ ๊ฒƒ๋“ค์ด๋‹ˆ ๋ฌด์‹œ..

  5. ๋˜ ํ•˜๋‚˜์˜ ์—๋Ÿฌ๋Š” JDK 1.4์—๋Š” ์—†๋Š” System.nanoTime() ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ..
    base = (long)(System.currentTimeMillis() * 1000000); ์ด๋Ÿฐ ์‹์œผ๋กœ nanoTime์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ๋Š” ๋ฐ€๋ฆฌํƒ€์ž„์„ ๋‚˜๋…ธํƒ€์ž„์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค.. 2๊ตฐ๋ฐ๋งŒ ์ฃผ์„์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค..

  6. Q2DataDialog.java ํŒŒ์ผ์˜ ์ปจ์ŠคํŠธ๋Ÿญํ„ฐ ๋ถ€๋ถ„์„ ๋ณด๋ฉด Quake 2 ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค์ด ์žˆ๋Š” ๊ฒฝ๋กœ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ, ๋งค๋ฒˆ ์ง€์ •ํ•ด์ฃผ๊ธฐ ๊ท€์ฐฎ์œผ๋ฏ€๋กœ ๋‚ด ํ•˜๋“œ๋””์Šคํฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์ด๊ณณ์— ํ•˜๋“œ์ฝ”๋”ฉ ํ•ด๋ฒ„๋ ธ๋‹ค..
    // dir = home + sep + "Jake2" + sep + "baseq2";
    dir = "C:\\Project\\madchick\\Game\\Quake II\\baseq2";

์—ญ ์‹œ, ์ž๋ฐ”์ฝ”๋“œ์˜ ๊ฐ€์žฅ ํฐ ๋งค๋ ฅ์€ Write Once, Run Everywhere.. ํ•ญ์ƒ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๊ทธ๋Ÿฐ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, Jake 2์˜ ๊ฒฝ์šฐ๋Š” ์•„์ฃผ ๋Œ€ํ‘œ์ ์ธ ์ ์šฉ ์˜ˆ.. ํ•œ๋ฒˆ ๋นŒ๋“œํ•˜๋ฉด ์œˆ๋„์šฐ์ฆˆ, ๋ฆฌ๋ˆ…์Šค, OS X ๋“ฑ์˜ ํ™˜๊ฒฝ์—์„œ ๋‹ค ์ž˜ ๋Œ์•„๊ฐ€๋Š” ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค.. ์ด๊ฑด ์ •๋ง ๋งค๋ ฅ์ ์ธ ๋ถ€๋ถ„์ด๋‹ค..

2008.08.28
๋…ธํŠธ๋ถ์„ ํฌ๋ฉงํ•ด ์ƒˆ๋กœ ์„ธํŒ…์„ ํ•ด๋ณด๋Š”๋ฐ, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์–‘์ƒ์ด ์ข€ ํ‹€๋ฆฌ๋‹ค.. ์• ํ”Œ๋ฆฟ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”๋ฐ, ์ด๊ฑด ๋ฌด์‹œํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์˜ค๋ฅ˜๋“ค์€ ๋ชจ๋‘ assert ๊ด€๋ จ๋œ ๋ถ€๋ถ„์ธ๋ฐ, ๋ชจ๋‘ ์ฃผ์„์ฒ˜๋ฆฌ~

์”~ ๊ทผ๋ฐ, ์•„๋ฌด๋ฆฌ ํ•ด๋„ ์ƒˆ ์†Œ์Šค๋กœ๋Š” ๋นŒ๋“œ๊ฐ€ ์ž˜ ์•ˆ๋œ๋‹ค.. ์  ์žฅ..
๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•
์›๋ฌธ : http://poseidon.cse.pusan.ac.kr/%7Edhlee/course/f06/java/

CA24148:  JAVA Programming

Fall Semester 2006
Lecture: Monday/Wednesday, 13:00-14:30, A06-6202 

Instructors: DoHoon Lee
AI : Yongho Ju(yhju at pearl dot cs dot pusan dot ac dot kr)

 

Description: syllabus

Textbook:ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ J AVA2, ์ตœ์ข…๋ช…์™ธ2์ธ, ํ™๋ฆ‰์ถœํŒ์‚ฌ
Grading:
Attendence and etc.(5%), Mid(20%), Final Exam (20%), Assignment(20%), Term Project(35%)

NOTICE : ๊ณผ์ œ๋ฌผ๊ณผ ํ•™๊ธฐ๋ง๊ณผ์ œ์— ๊ด€ํ•œ ์‚ฌํ•ญ์ด๋‚˜ ๋ณด๋‹ค ์ž์„ธํ•œ ์ผ์ •์€ ์ถ”ํ›„ ์ˆ˜์—…์ด ์ง„ํ–‰๋˜๋ฉด์„œ ๊ณต์ง€ํ•  ์˜ˆ์ •์ž„.

Preliminary syllabus

Week

Contents

Textbook Reading

Lecture Note/Slide

Lab

Assignments/Term Project

1

๊ต๊ณผ๋ชฉ ์†Œ๊ฐœ ๋ฐ JAVA ์–ธ์–ด ๊ฐœ์š”

1-83

Chap00, Chap01-slide, Chap01-slide4

 

Lab01, ๋ฒ”ํ•˜๊ธฐ์‰ฌ์šด์‹ค์ˆ˜๋ฆฌ์ŠคํŠธ

ESPA ๋“ฑ๋ก๋ฐ์‚ฌ์šฉ๋ฒ•, jbuilder์„ค์น˜๋ฐ์‚ฌ์šฉ๋ฒ•, jedit ์„ค์น˜๋ฐ์‚ฌ์šฉ๋ฒ•, eclipse ์„ค์น˜๋ฐ์‚ฌ์šฉ๋ฒ• 

2

์—ฐ์‚ฐ์ž์™€ ์ œ์–ด๊ตฌ์กฐ

84-86

Chap02-slide, Chap02-slide4,

 Lab02 dec2bin.java dec2bin1.java dec2bin2.java TimeChk.java

 

3

๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ์ž…์ถœ๋ ฅ

11์žฅ

Chap11-slide, Chap11-slide4

ConsoleReader.java ConsoleWriter.java

Lab03 ,lab3_1.java TestBufferedReader.java TestPrintWriter.java TestScanner.java

lab3_2.in, lab3_3.in

 

4

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐI

3์žฅ

chap03-slide, chap03-slide4

lab04

HomeWork#01 Due:10/13

5

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐII

4์žฅ

chap04-slide, chap04-slide4

 

 

6

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐIII

5์žฅ

 

lab05

 

7

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐIV

6์žฅ

chap0501-slide, chap0501-slide4

 

Mid Exam(๋ฌธ์ œ์ง€)

8

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ

7-10์žฅ

 

lab06

Term Project ๊ณต์ง€์‚ฌํ•ญ

proposal for term project

๋ฐœํ‘œํ‰๊ฐ€์„œ

9

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

 

lab07(update), SetTest.java

 

10

์ž๋ฐ”GUIํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

chap0502, chap0502-slide4

 

PresentationI /

11

GUI

 

chap07, chap07-slide4

Lab08

Presentation2

12

GUI

 

 Chap08, chap08-slide4

Lab09

 

13

 

 

 Chap10-13

 Lab10, Lab10.zip

์ค‘๊ฐ„๋ณด๊ณ ์„œ์ œ์ถœ

14

๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

Chap10-13-slide4

 Lab11

 

15

       

Final Exam

12/16 10:00-13:00

์žฅ์†Œ:์ œ๋„๊ด€4์ธต ์‹ค์Šต์‹ค(1) - ์ค‘๊ฐ„๊ณ ์‚ฌ์™€ ๋™์ผ

 

      ์ตœ์ข…๋ฐœํ‘œ๊ณต์ง€์‚ฌํ•ญ

Presentation for final report

12/23 10:00-

์žฅ์†Œ:์ž์—ฐ๋Œ€์—ฐ๊ตฌ์‹คํ—˜๋™(์ฒจ๋‹จ๊ด€) 404ํ˜ธ ์„ธ๋ฏธ๋‚˜์‹ค

 

 

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•
๊ฐ„๋‹จํ•œ ๋ฉ”๋‰ด๋ฐ”๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! :)
๊ตฌ๊ตฌ์ ˆ์ ˆ ์„ค๋ช…์—†๊ณ  ์†Œ์Šค์— ๊ฐ„๋‹จํ•œ ์ฃผ์„๊ณผ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ์žˆ์œผ๋‹ˆ ์ง๊ด€์ ์œผ๋กœ ๋ฐฐ์›Œ๋ณด์‹œ๊ธธ. ใ…Žใ…Ž


/*
 * fileName : Test.java
 */
import java.awt.*;


public class Test
{

	public static void main(String [] args)
	{
		//๋ฉ”๋‰ด๋ฐ”-๋ฉ”๋‰ด-์•„์ดํ…œ
		MenuItem menuItem = new MenuItem("์ฐธ์น˜๊น€๋ฐฅ");
		
		//๋ฉ”๋‰ด๋ฐ”-๋ฉ”๋‰ด
		Menu menu = new Menu("๊น€๋ฐฅ");
		menu.add(menuItem);
		
		//๋ฉ”๋‰ด๋ฐ”
		MenuBar menuBar = new MenuBar();
		menuBar.add(menu);
		
		//์œˆ๋„์šฐ ํ”„๋ ˆ์ž„
		Frame frame = new Frame("๊น€๋ฐฅ์ฒœ๊ตญ");
		frame.setSize(800,600);
		frame.setMenuBar(menuBar);
		frame.setVisible(true);
		
	}
}

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•






Levenshtein Distance Algorithm: C++ Implementation

by Anders Sewerin Johansen




// Include STL string type

#include 

// Include STL vector type (dynamic array)

#include 

int distance(const std::string source, const std::string target) {

  // Step 1

  const int n = source.length();
  const int m = target.length();
  if (n == 0) {
    return m;
  }
  if (m == 0) {
    return n;
  }

  // Good form to declare a TYPEDEF

  typedef std::vector< std::vector > Tmatrix; 

  Tmatrix matrix(n+1);

  // Size the vectors in the 2.nd dimension. Unfortunately C++ doesn't
  // allow for allocation on declaration of 2.nd dimension of vec of vec

  for (int i = 0; i <= n; i++) {
    matrix[i].resize(m+1);
  }

  // Step 2

  for (int i = 0; i <= n; i++) {
    matrix[i][0]=i;
  }

  for (int j = 0; j <= m; j++) {
    matrix[0][j]=j;
  }

  // Step 3

  for (int i = 1; i <= n; i++) {

    const char s_i = source[i-1];

    // Step 4

    for (int j = 1; j <= m; j++) {

      const char t_j = target[j-1];

      // Step 5

      int cost;
      if (s_i == t_j) {
        cost = 0;
      }
      else {
        cost = 1;
      }

      // Step 6

      const int above = matrix[i-1][j];
      const int left = matrix[i][j-1];
      const int diag = matrix[i-1][j-1];
      const int cell = min( above + 1, min(left + 1, diag + cost));

      // Step 6A: Cover transposition, in addition to deletion,
      // insertion and substitution. This step is taken from:
      // Berghel, Hal ; Roach, David : "An Extension of Ukkonen's 
      // Enhanced Dynamic Programming ASM Algorithm"
      // (http://www.acm.org/~hlb/publications/asm/asm.html)

      if (i>2 && j>2) {
        int trans=matrix[i-2][j-2]+1;
        if (source[i-2]!=t_j) trans++;
        if (s_i!=target[j-2]) trans++;
        if (cell>trans) cell=trans;
      }

      matrix[i][j]=cell;
    }
  }

  // Step 7

  return matrix[n][m];
}

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : http://www.jspgeek.com/tt/index.php?pl=17426&PHPSESSID=18639be6718deed229e55fb4b90c6897


Java์˜ ์—ญ์‚ฌ๋Š” Java์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ธ Java VM์˜ ์‹คํ–‰ ์†๋„์— ๋Œ€ํ•œ ๋„์ „์˜ ์—ญ์‚ฌ์˜€๋‹ค๊ณ  ํ•ด๋„ ๊ณผ์–ธ์€ ์•„๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ๋นจ๋ฆฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋Š” Java VM์ด ๊ฑธ์–ด์˜จ ๊ทธ ๊ธธ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ๋ณ€์ฒœ์‚ฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, Java VM์— ๋Œ€ํ•ด์„œ ๋”์šฑ ๊นŠ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Java์˜ ์—ญ์‚ฌ


Java๋Š” 1995๋…„ 5์›” 23์ผ์— ๊ฐœ์ตœ๋œ ใ€ŒSun World Expoใ€์˜ ๋””๋ฒจ๋กœํผ ์ปจํผ๋Ÿฐ์Šค์—์„œ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค. ใ€ŒJava ํƒ„์ƒ์˜ ํŽ˜์ด์ง€ใ€์— ์˜ํ•˜๋ฉด ์ด๋‚ ์ด Java์˜ ์ƒ์ผ์ด๋ผ๊ณ  ๋˜๊ณ  ์žˆ๋‹ค. ์ฌ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ด ๋งํ•˜๋‹ˆ๊นŒ ํ‹€๋ฆผ์ด์•ผ ์—†๊ฒ ์ง€๋งŒ, ์›๋ž˜ Java์˜ ์ „์‹ ์€ Oak๋ผ๊ณ  ํ•˜๋Š” ์–ธ์–ด์˜€๋‹ค. Oak๋Š”1990๋…„ 12์›”์— ์‹œ์ž‘๋œ Green Project์˜ ์ผํ™˜์œผ๋กœ์„œ ๊ฐœ๋ฐœ๋œ ์–ธ์–ด์ด๋‹ค. ํ•˜์ง€๋งŒ, Java๋Š” 1995๋…„์— ํƒœ์–ด๋‚ฌ์œผ๋‹ˆ๊นŒ Oak๊ฐ€ ํƒ„์ƒํ•œ 1990๋…„์— ๋ฒŒ์จ ํƒœ์–ด๋‚  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค.


์šฐ๋ฆฌ์—๊ฒŒ ์นœ์ˆ™ํ•œ ๋งˆ์Šค์ฝ”ํŠธ "Duke"๋„ ์ด Green Project์˜ "์ค‘์š”ํ•œ ๋ถ€์‚ฐ๋ฌผ"์ด๋ผ๊ณ  Green Project์˜ ํ™ˆํŽ˜์ด์ง€์— ๊ฒŒ์žฌ๋˜์–ด ์žˆ๋‹ค. ๊ฐ€์ „์—…๊ณ„์˜ ์—ด์•…ํ•œ ์ž๊ธˆ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐ›์•„๋“ค์—ฌ์ง€์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์‹ค์ œ๋กœ Green Project์˜ ์ฃผ ์„ฑ๊ณผ๋ฌผ์ธ "*7"(StarSeven๏ผš๋Œ€ํ˜• PDA๋ผ๊ณ ๋„ ํ•œ๋‹ค.)๋„ ํ–‡๋น›์„ ๋ณด์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค. ๋ฌผ๋ก , ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์‚ฌ์ • ๋•Œ๋ฌธ์—, ๋˜๋Š” ๋‹จ์ง€ ์šด์ด ์—†์—ˆ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒฌํ•ด๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ทธ ํฌ๊ธฐ, ๋ฌด๊ฒŒ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด, ๊ทธ ๊ฒƒ์„ ํ•œ ์†์— ์ฅ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒด๊ฒฉ์€ ๋ฏธ๊ตญ์ธ๋ฐ–์— ์—†์„ ๊ฒƒ์ด๋‹ค.


์—ฌ๋‹ด์€ ์ ‘์–ด๋‘๊ณ , ์–ธ์–ด๋กœ์„œ Oak์˜ ๊ณ„๋ณด๋ฅผ ๊ตณ์ด ํ‘œํ˜„ํ•˜์ž๋ฉด, ์•„๋ฒ„์ง€๋Š” C++, ์–ด๋จธ๋‹ˆ๋Š”Smalltalk(interpreter๋ผ๊ณ  ํ•˜๋Š” ๊ด€์ ์—์„œ)๋ฅผ ๋“ค ์ˆ˜ ์žˆ๊ฒ ๊ณ , ๋ฌผ๋ก  ๊ฐ์ฒด ์ง€ํ–ฅ์–ธ์–ด์˜ ์ •ํ†ต์ด๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (์•„๋ฒ„์ง€๊ฐ€ Smalltalk๋กœ ์–ด๋จธ๋‹ˆ๊ฐ€ C++ ์ผ๊นŒ? ์•„๋‹ˆ, ์•„๋ฒ„์ง€๊ฐ€ C++, ์–ด๋จธ๋‹ˆ๊ฐ€ Green Project์ด๋‹ค!). Gosling์”จ์— ์˜ํ•˜๋ฉด, Oak๋Š” lisp๋‚˜ ๋‹ค๋ฅธ ์–ธ์–ด์—๋„ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์ดˆ๊ธฐ์˜ Oak ๋งค๋‰ด์–ผ์— ๋”ฐ๋ฅด๋ฉด, Green Project์˜ ํŽ˜์ด์ง€์— ๊ฐ€๋ฉด PostScript(๊ทธ๋ฆฝ๋‹ค!)์˜ Ver0.2์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.


1995๋…„ 5์›”์— ํƒ„์ƒํ•œ Java๋Š” 1996๋…„์— ๊ฐœ์ตœ๋œ ใ€ŒJavaOneใ€์—์„œ ์†Œ๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, 80 ์ด์ƒ์˜ ํ˜‘์ฐฌ ๊ธฐ์—…๊ณผ 5000๋ช… ์ด์ƒ์˜ ์ฐธ๊ฐ€์ž๋กœ ๋Œ€์„ฑํ™ฉ์„ ๊ฑฐ๋‘์—ˆ๋‹ค. ์ด ํ–‰์‚ฌ๋Š” OpenSurce ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ํฌ์ธํ„ฐ๋ฅผ ์ค‘์‹œํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์˜ค๋ธŒ์ ํŠธ ์–ธ์–ด๊ฐ€ Web์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์–ผ๋งˆ๋‚˜ ๋”ฑ ๋“ค์–ด ๋งž๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์ƒ์ง•์ ์ธ ์ผ์ด์—ˆ๋‹ค.


์—ญ์‚ฌ์ ์œผ๋กœ ๋ณด๋ฉด, Java์˜ ๋‹น์ดˆ ์ƒ๊ฐ๋“ค์€ Gosling์”จ์˜ ํ™ˆํŽ˜์ด์ง€์— ์žˆ๋Š” Java ํƒ„์ƒ ๋‹น์‹œ์˜ ใ€Œoriginal Java White Paperใ€์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค. ์ด ์ •์ฑ…์— ๋”ฐ๋ฅด๋ฉด James Gosling์”จ๊ฐ€ Green Project์—์„œ ๊ฐ€์ „์ œํ’ˆ์— ๋‚ด์žฅ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ Oak๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ทธ ์ •์‹ ์€ ์•„์ง ์‚ด์•„ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค. (ํŽธ์ง‘: ํ˜„์žฌ, Gosling์”จ์˜ ํ™ˆํŽ˜์ด์ง€๋Š” ํ์‡„๋˜๊ณ  ์žˆ๋‹ค. original Java White Paper๋Š” ํ˜„์žฌ ๋‹ค์Œ URL๋กœ ์ฐธ์กฐํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ใ€ŒFocus on Java๏ผšon Overview, original Java White Paper by James Goslingใ€).


(1)Simple

ใ€€ใ€€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋‹จ์ˆœํ•ด์•ผ ์•Œ๊ธฐ ์‰ฝ๋‹ค.

(2)Object-Oriented

ใ€€ใ€€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด๋‹ค.

(3)Distributed

ใ€€ใ€€ ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

(4)Robust

ใ€€ใ€€ ์•ˆ์ •ํ•˜๋‹ค.

(5)Secure

ใ€€ใ€€ ์•ˆ์ „ํ•˜๋‹ค.

(6)Architecture Neutral

ใ€€ใ€€ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ๋…๋ฆฝ์ ์ด๋‹ค.

(7)Portable

ใ€€ใ€€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ†ต์ผ๋˜์–ด ์žˆ๋‹ค.

(8)Interpreted

ใ€€ใ€€ Java์˜ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค.

(9)High performance

ใ€€ใ€€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ, ๋™์ž‘ ์†๋„๊ฐ€ ๊ณ ์„ฑ๋Šฅ์ด๋‹ค.

(10)Multithreaded

ใ€€ใ€€ multi-thread์ด๋‹ค.

(11)Dynamic

ใ€€ใ€€ ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ๋‹ค.


์œ„์˜ 11๊ฐœ ํ•ญ๋ชฉ์€ White Paper์— ๋ฒˆํ˜ธ ์—†์ด ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค. ์•ž์œผ๋กœ, ์ด "์œ„๋Œ€ํ•œ ์ •์‹ "์˜ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ, Java VM์˜ ์•„ํ‚คํ…์ฒ˜ ๋ณ€์ฒœ์„ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.


Simple, Object-Oriented, Distribute


Java๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์–ธ์–ด๋กœ์จ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ํŽธ๋ฆฌํ•ด์กŒ๋‹ค. ๊ตฌ๋ฌธ๋„ ๋งค์šฐ ๋ช…์พŒํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  C++์˜ ๊ฐ์ฒด ์ง€ํ–ฅ์„ ๊ณ„์Šนํ•˜๊ณ  ์žˆ๋‹ค. URL์„ ์ง€์ •ํ•ด ์›๊ฒฉ์˜ ์˜ค๋ธŒ์ ํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์ด ๋ถ„์‚ฐ์˜ค๋ธŒ์ ํŠธ ํ™˜๊ฒฝ์— ๋”ฑ ๋“ค์–ด ๋งž๋Š” ๊ฒƒ์ด๋‹ค.


White Paper์—๋Š” ์—†์ง€๋งŒ, ๋„คํŠธ์›Œํฌ์ƒ์˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ ํ™˜๊ฒฝ์— ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”Œ ์ˆ˜๋„ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ Java ๋ฐ–์— ๋ชจ๋ฅด๋Š”(ํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋ฅด๋Š”) ์šด(?)์ด ์ข‹์€ ๋…์ž๋ฅผ ์œ„ํ•ด์„œ, ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ํ•ด ๋ณด์ž. ํฌ์ธํ„ฐ๋ž€, ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋Œ€์ž…๋œ๋‹ค๋Š” ๊ฐœ๋…์—์„œ, ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ์†Œ์˜ ๊ด€๊ณ„๋ฅผ ์‹คํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์šฐ์„  ๋ณ€์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋Œ€์ž…ํ•ด ๋‘”๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ ํฌ์ธํ„ฐ์ด๋‹ค. ํฌ์ธํ„ฐ ์ž์ฒด์˜ ํ˜•ํƒœ๋Š” ํฌ์ธํ„ฐํ˜•์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ํฌ์ธํ„ฐ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฃผ์†Œ์— ์–ด๋–ค ํ˜•ํƒœ์˜ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ์„ ๋•Œ์˜ ํ˜•ํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ์ธํ„ฐ๋Š” ์ทจ๊ธ‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํ˜•ํƒœ๋Š” ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์‚ฌํ•ญ๋“ค์€ ๋ถ„์‚ฐ์˜ค๋ธŒ์ ํŠธ์—์„œ๋Š” ๊ณค๋ž€ํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์–ด๋А ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ ์˜ค๋ธŒ์ ํŠธ์— ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ƒ๋Œ€๋ฐฉ์˜ ์‹œ์Šคํ…œ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์นดํ”ผํ•ด ์˜ค์ง€ ์•Š์œผ๋ฉด ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.


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


ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์ด ์—†๋Š” Java์—์„œ๋Š”, ์ด๋Ÿฌํ•œ ์ผ์ด ๋ชจ๋‘ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ํ—ˆ๋ฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. CORBA ์ŠคํŒฉ์—์„œ๋„ Java์˜ ์ž„ํ”Œ๋ฆฌ๋ฉ˜ํ…Œ์ด์…˜์ด ์žˆ๋‹ค. Java์—๋Š” RMI๋ผ๊ณ  ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์›๊ฒฉ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ŠคํŒฉ์ด ์žˆ์–ด, ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ, ์ „์„ฑ๊ธฐ์ธ J2EE ์ŠคํŒฉ, SOAP ๋“ฑ์— ์žˆ์–ด๋„ ๋ง์ด๋‹ค. ์ด๊ฒƒ์€ ๊ณง, Simple, Object-Oriented, Distributed๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ์ƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Robust, Secure, Architecture Neutral, Portable


์•ˆ์ •, ์•ˆ์ „, ์•„ํ‚คํ…์ฒ˜ ๋…๋ฆฝ, ํœด๋Œ€์šฉ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ๋…์€, ๋‹ค์–‘ํ•œ ๊ธฐ์ข…, OS, ์–ธ์–ดํ™˜๊ฒฝ์ด ํ˜ผ์žฌํ•˜๋Š” ์ธํ„ฐ๋„ท์—์„œ๋Š” ํ•„์ˆ˜ ๋ถˆ๊ฐ€๊ฒฐํ•œ ์š”์†Œ์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๊ฐ•์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— '์•ˆ์ •์„ฑ'์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด null exception ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, try-catch๊ตฌ๋ฌธ์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ๋ฉด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์•…์šฉํ•ด PC์˜ ๋ถ€ํŠธ ๋ ˆ์ด์–ด์— ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์‹ฌ์œผ๋ ค๊ณ  ํ•ด๋„ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.


White Paper์—์„œ๋Š” Secure ๊ตฌํ˜„ ์ •์ฑ…์œผ๋กœ virus-free, tamper-free๋ฅผ ์ œ์ฐฝํ•˜๊ณ  ์žˆ๋‹ค. ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ตฌ๋ฉ์ด ๋ฐœ๊ฒฌ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ด์ง€๋งŒ, ์ด์ƒ์ ์ธ ๋ชฉํ‘œ๋กœ๋Š” virus-free, tamper-free์ด๋‹ค.


์ธํ„ฐ๋„ท์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ, ์‹คํ–‰ ํ˜•์‹์„ ์˜์‹ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์ด๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์ด Architecture Neutral, Portable์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ด ์˜ค๋ธŒ์ ํŠธ๋Š” ์ด ๋ฉ”์ด์ปค์˜ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ •์ˆ˜๋Š” 16bit๊ฐ€ ๋˜์–ด์•ผ ํ•ด. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด์ชฝ์˜ ์‹œ์Šคํ…œ์—์„œ ๋ณด๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” 16bit ์ดํ•˜๋กœ ๋–จ์–ด๋œจ๋ ค ๋‘์ง€ ์•Š์œผ๋ฉดโ€ฆโ€ฆ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์ด ์ ‘์†๋œ ์ธํ„ฐ๋„ท์ƒ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๋‹ค.


Interpreted


๋“œ๋””์–ด ๊ตฌํ˜„์˜ ์ด์•ผ๊ธฐ ์ฐจ๋ก€์ด๋‹ค. Interpreted๋ž€, ๋ฒˆ์—ญํ•ด ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์„ ๋ฐฐ์ œํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ์ฑ…์ž„์„ ์–ธ์–ด์ธก๋ฉด์—์„œ ํก์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์ด์™€ ๋”๋ถˆ์–ด, ํ”Œ๋žซํผ ์˜์กด์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ , ์–ด๋А ์‹œ์Šคํ…œ์—์„œ๋‚˜ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋„ ํ”Œ๋žซํผ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ†ต์ผ๋œ ํ‘œํ˜„์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, Smalltalk์™€ ๊ฐ™์€ interpreter ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


interpreter์˜ ์ƒ๋Œ€์–ด๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฏธ๋ฆฌ ์ž์—ฐ ์–ธ์–ด์— ๊ฐ€๊นŒ์šด ์›์‹œ์ฝ”๋“œ๋ฅผ CPU๊ฐ€ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด, ๋‚˜์ค‘์— ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด interpreter๋Š”, ์›์‹œ ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ, ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค. interpreter์˜ ์‹œ์ดˆ๋ผ๊ณ  ํ•˜๋ฉด Bill Gates๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ BASIC์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Java๋Š” BASIC๊ณผ ๋‹ฌ๋ฆฌ, ์›์‹œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ผ๊ณ  ํ•˜๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ๋‚˜์„œ, ๊ทธ๊ฒƒ์„ interpreter๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ, Java์™€ ๊ฐ™์€ ์ค‘๊ฐ„ ์ฝ”๋“œ ๋ฐฉ์‹์˜ interpreter๋Š”, Java๊ฐ€ ์ตœ์ดˆ์ด๋‹ค. Smalltalk๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์„ธ์ƒ์˜ ์—ฐ๊ตฌ์ž์˜ ๋…ผ๋ฌธ์„ ๋‹ฅ์น˜๋Š” ๋Œ€๋กœ ์ฝ์–ด ๋ณด์ง€ ์•Š์œผ๋ฉด ์ •๋ง๋กœ ๋ฌด์—‡์ด ์ตœ์ดˆ ์ธ๊ฐ€, ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๋ก ์€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ƒ์šฉ ์—ฌ๋ถ€์™€ ๋Œ€์ค‘์ ์ธ ์˜๋ฏธ์—์„œ ๊ทธ ์‹œ์ž‘์„ ์ฐพ์•„๋ณด๋ฉด UCSD Pascal์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 1970๋…„๋Œ€ ์ดˆ์˜ ๋งˆ์ดํฌ๋กœ ์ปดํ“จํ„ฐ ์‹œ๋Œ€๋Š”, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งค์šฐ ๊ณ ๊ฐ€์—ฌ์„œ CPU๋Š” ์“ธ๋ฐ์—†์ด ๋Šฆ์€ ๊ธฐ๊ธฐ๊ฐ€ ๋  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ํ™˜๊ฒฝ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฐ€์šด๋ฐ, ๊ตฌ์กฐํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ’๋ถ€ํ•œ ํฌ๋งท ์„ ์–ธ์„ ๊ฐ€์กŒ๋˜ UCSD Pascal์˜ ์ค‘๊ฐ„ ์ฝ”๋“œ ์ปดํŒŒ์ผ ๋ฐฉ์‹์€, ๊ฐœ๋ฐœ์ž NiklausWirth ๋ฐ•์‚ฌ์˜ "์–ธ์–ด์ŠคํŒฉ๊ณผ ์ตœ์ ํ™”๋Š” ๋…๋ฆฝ๋œ ๋ฌธ์ œ์ด๋‹ค"๋ผ๊ณ  ํ•˜๋Š” ๋…ผ์˜๋ฅผ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ ๋„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์‹ค์ œ๋กœ ์ž„ํ”Œ๋ฆฌ๋ฉ˜ํ…Œ์ด์…˜ ์ธก๋ฉด์—์„œ๋Š” ๊ฝค ์œ ๋ฆฌํ–ˆ๋‹ค.


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


์‹ค์ œ๋กœ, ์ž์—ฐ ์–ธ์–ด์— ๊ฐ€๊นŒ์šด ํ”„๋กœ๊ทธ๋žจ ๊ธฐ์ˆ ์ธ Java ์–ธ์–ด๋ฅผ *.java ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•˜๊ณ  javac ์ปค๋งจ๋“œ๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ์ธ *.class ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค. java.exe๋Š” ์ด ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Ÿฐ ํ๋ฆ„์€ UCSD Pascal๊ณผ ์™„์ „ํžˆ ๋˜‘๊ฐ™๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Java์˜ ๊ฒฝ์šฐ, ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜ ํšจ์œจํ™”๋ฅผ ์ƒ๊ฐํ•ด์„œ, ZIP์œผ๋กœ ์••์ถ•๋˜์–ด ์žˆ๊ธฐ๋„ ํ•œ๋‹ค. CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ด€๊ณ„์™€ ๋น„๊ตํ•˜๋ฉด, ์ธํ„ฐ๋„ท์˜ ํ†ต์‹  ์†๋„๋‚˜, ๋””์Šคํฌ์˜ I/O ์†๋„๊ฐ€ ๋” ๋Šฆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ CPU๋กœ ZIP์œผ๋กœ ์••์ถ•ํ•ด ์ „์†ก ๋Ÿ‰์„ ์ค„์ด๋˜์ง€, ์••์ถ•์„ ํ•˜์ง€ ์•Š๊ณ  CPU์˜ ๋ถ€ํ•˜๋ฅผ ์ €ํ•˜์‹œํ‚ค๋˜์ง€ ์˜ ์„ ํƒ์—์„œ ์ „์ž๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.


์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ํ˜•์‹(/opt/java/bin/java๋ผ๋“ ์ง€ java.exe)์„ Java Virtual Machine(Java ๊ฐ€์ƒ ์‹œ์Šคํ…œ, ์ดํ•˜JVM)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ์ข…์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ OS๋กœ JVM์„ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆฌ๋ฉด, ์–ด๋А ์‹œ์Šคํ…œ์—์„œ๋„, ์™„์ „ํžˆ ๋˜‘๊ฐ™์€ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์–ด๋А ์‹œ์Šคํ…œ์—์„œ๋„ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ์„œ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์–ด๋А ์ •๋„ ๊ธฐ๊ณ„์–ด์— ๊ฐ€๊นŒ์šฐ๋ฉด ์‹คํ–‰๋„ ๊ฐ€๋ฒผ์šด ๋ฒ•์ด๋‹ค. ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ€์ • ์‚ฌ์šฉ์ด ์žˆ์œผ๋ฉด, ๋ฒˆ์—ญํ•œ ์‹œ์ ์—์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ์จ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ฃฝ๋Š” ์ผ์€ ์—†์–ด์ง„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ, ์ธํ„ฐ๋„ท์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  ์š”๊ฑด๋“ค์ด JVM์ด ๋“ฑ์žฅํ•จ์œผ๋กœ์จ ๋‹จ๋ฒˆ์— ํ•ด๊ฒฐ๋œ๋‹ค.


High Performance


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


HotJava ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š”, ์• ํ”Œ๋ฆฟ์„ ์›€์ง์ด๊ณ  ์žˆ์—ˆ๊ณ  ์ด ์ •๋„์ด๋ฉด ์œ„์˜ ๋ฐฉ์‹์œผ๋กœ๋„ ์ถฉ๋ถ„ํ–ˆ๋‹ค. ์‹ค์ œ๋กœ, HotJava ๋ธŒ๋ผ์šฐ์ €์˜ Duke ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์ž˜ ๋˜์–ด ์žˆ์–ด์„œ, ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ๋Š” ๋Œ€๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์ด ๋™์ž‘ํ•˜๊ณ  ์žˆ์„ ๋•Œ๋Š” ์กฐ๊ธˆ ๋ฉˆ์ถ”์ง€๋งŒ, ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์• ๊ต ์ •๋„๋กœ ๋ด์ค˜๋„ ๋ฌด๊ด€ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์˜ค๋Š˜๋‚ ์—๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์œ„ํ—˜ํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ์ดˆ๋‹น ๋ช‡ ์ฒœ ๊ฐœ์˜ request๋ฅผ ์‹ค์ˆ˜ ์—†์ด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


JIT์˜ ๋“ฑ์žฅ


์•ž์—์„œ ์†Œ๊ฐœํ•œ ํผํฌ๋จผ์Šค์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ์žฅํ–ˆ๋˜ ๊ฒƒ์ด JIT(Just In Time Compiler๏ผš์‹คํ–‰ ์‹œ ์ปดํŒŒ์ผ)๋‹ค. ์ด๊ฒƒ์€, ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค, ์ค‘๊ฐ„์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋ฐœ์ƒ์ด๋‹ค. ๋‹น์—ฐํ•œ ๋ง์ด๊ฒ ์ง€๋งŒ, ์‹คํ–‰ ์‹œ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ดˆ๋กœ ์‹คํ–‰ํ•  ๋•Œ๋Š” ์‹œ๊ฐ„์ด ์•ฝ๊ฐ„ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š”, ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ •์˜๋Š” constructor๋ผ๊ณ  ํ•˜๋ฉฐ, ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ปดํŒŒ์ผ์€ ์ฒซ ํšŒ ์ฆ‰ ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ๋™์ž‘ํ•˜๋ฏ€๋กœ, constructor๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ž์ฃผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผ์ด ๋ฌด๊ฑฐ์›Œ์ ธ ๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒฐ์ ์ด ์žˆ์ง€๋งŒ, ๋ณดํ†ต ์ธํ„ฐ๋„ท ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ˜๋ณต์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, interpreter์— ๋น„ํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ๋œ๋‹ค. ์•„๋งˆ๋„, ๋ฐ˜๋ณต์ด ์ „ํ˜€ ์—†๋Š” ์ง์„  ๋„๋กœ์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์€(๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์–ด๋ ต๊ฒ ์ง€๋งŒ) interpreter๊ฐ€ ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค.


๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ๋˜๋ฉด ์ด์‹์„ฑ์ด ์—†์–ด์งˆ ๊ฑฐ๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  ์‚ฌ์šฉ๋  ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋กœ๋“œ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, java.exe์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค. ๋‹ค๋ฅธ UNIX ์‹œ์Šคํ…œ์œผ๋กœ ๊ธฐ๋™ํ•  ๋•Œ๋Š”, ๊ทธ ์‹œ์Šคํ…œ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๊ณ„์–ด๊ฐ€ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ์ด์‹์— ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฌผ๋ก  ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹๋„ ์œ ์ง€๋˜๋ฏ€๋กœ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.


JIT๋Š” ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด์˜ ์„ฑ๋Šฅ๋ณด๋‹ค๋Š” ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ์‚ฌํ•ญ์ด๋‹ค.


๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๊ฐœ์„ 


Java๋Š” ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ JVM์ด ์ž๋™์ ์œผ๋กœ ์‹ค์‹œํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ , JVM์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹คํ–‰ํ•  ๋•Œ ์ง€์ •ํ•œ๋‹ค(์ด ์˜์—ญ์„ heap ์ด๋ผ๊ณ  ํ•œ๋‹ค). ์ดˆ๊ธฐ์˜ Java์—์„œ๋Š” heap์„ ๋Œ€์ถฉ๋Œ€์ถฉ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋นˆ ๊ณณ์ด ์—†์œผ๋ฉด ์ •๋ฆฌํ•ด์„œ ๋ฆด๋ฆฌ์Šคํ•˜์˜€๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ณณ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋™์ž‘์‹œํ‚ค๋ฉด, ์ •๋ฆฌํ•ด์„œ ๋ฆด๋ฆฌ์Šคํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๊ธˆ๋ฐฉ ์ฐจ ๋ฒ„๋ฆฐ๋‹ค. Heap ์‚ฌ์ด์ฆˆ๋ฅผ ํฌ๊ฒŒ ์žก์•„์ฃผ๋ฉด, heap์ด ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€ ์ˆœ์กฐ๋กญ๊ฒŒ ์›€์ง์ด๋‹ค๊ฐ€ ์กฐ๊ธˆ ๋ฉˆ์ถ”๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


๊ผญ Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ๋ผ๋„, ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๊ฝค ์˜ค๋žซ๋™์•ˆ ์˜ค๋ธŒ์ ํŠธ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋งค๋‹ˆ์ง€๋จผํŠธ ์˜์—ญ์—์„œ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค.


๊ทธ๋ž˜์„œ, New์™€ Old๋กœ heap์˜ ๋‚ด์šฉ์„ 2๊ฐœ๋กœ ๋‚˜๋ˆˆ ๊ตฌ์กฐ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ๋‹จ๊ธฐ์ ์œผ๋กœ ์ฐธ์กฐ๋˜์ž ๋งˆ์ž ํ•„์š” ์—†๊ฒŒ ๋˜๋Š” ๋ณ€์ˆ˜๋Š”, New์˜ heap์— ๋†“๊ณ , ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฆด๋ฆฌ์Šค์‹œํ‚จ๋‹ค. ํ•œํŽธ, ์–ด๋А ์ •๋„ ์˜ค๋žซ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๋Š”, Old์˜ heap์— ๋†“๊ณ , ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์— ๋ฆด๋ฆฌ์Šค์‹œํ‚จ๋‹ค. ์ด Old๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์— ์ผ์–ด๋‚˜๋Š” ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์„ Full GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


HotSpot์˜ ๋“ฑ์žฅ


heap์˜ ๊ฐœ์„ ์€ Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์‹คํ–‰์— ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค. ์ด์™€ ๋™์‹œ์—, Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋”์šฑ ๋งŽ์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ํ”„๋กœ๊ทธ๋žจ๋„ ๊ฑฐ๋Œ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ๊ฑฐ๋Œ€ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š”, JIT์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๊ฒƒ๋„ ์ข‹์ง€ ์•Š์€ ๋ฐฉ์‹์ด๋‹ค. ์•„๋ฌด๋ฆฌ JIT๊ฐ€ ๊ณ ์†์œผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค๊ณ  ํ•ด๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ํ•ด์„ํ•˜๋Š” ๋„์ค‘์— ํ”„๋กœํŒŒ์ผ์„ ์ทจํ•ด, ํŠนํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„๋งŒ ์ปดํŒŒ์ผํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฐ€๋งŒํžˆ ๋‘๋ฉด, ์ข€ ๋” ๋นจ๋ผ์ง€์ง€ ์•Š์„๊นŒ? ๋งž๋Š” ๋ง์ด๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์ด ๋ฐ”๋กœ HotSpot์ด๋‹ค. ์ด ๊ธฐ์ˆ ์€ ํœด๋ ›ํŒฉ์ปค๋“œ(์ดํ•˜ HP)๊ฐ€ JavaSoft์— ์ œ์•ˆํ•ด, ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค. ์•„~ JavaSoft๋Š” ์–ธ์ œ ์˜คํ”ˆ ๋˜์—ˆ๋‹จ ๋ง์ธ๊ฐ€!


๋งŽ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „์ฒด ์ฒ˜๋ฆฌ์˜ 20%๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์˜ 80%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜›๋‚ , CISC ์‹œ์Šคํ…œ๊ณผ RISC ์‹œ์Šคํ…œ ์ค‘ ์–ด๋А ์ชฝ์ด ๋” ์šฐ์ˆ˜ํ•˜๋ƒ๋Š” ๋…ผ์Ÿ์ด ์žˆ์—ˆ๋Š”๋ฐ, HP๊ฐ€ ์žฌ๋นจ๋ฆฌ RISC๋ฅผ ์ƒ์šฉํ™”ํ–ˆ๋‹ค. ์ด๊ฒƒ์€, CISC ์‹œ์Šคํ…œ์—์„œ๋Š”, ์‹คํ–‰ ์‹œ๊ฐ„์˜ ๋Œ€๋ถ€๋ถ„์„ ์ผ๋ถ€์˜ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์†Œ๋น„๋˜๊ณ  ์žˆ์–ด, ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ๋Š” ๋‚˜๋จธ์ง€์˜ ๋ช‡ ์•ˆ ๋˜๋Š” ์‹œ๊ฐ„๋งŒ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์‹คํ–‰ ์‹œ๊ฐ„์˜ ๋Œ€๋ถ€๋ถ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๋ช…๋ น์„ธํŠธ๋ฅผ ๊ณ ์†ํ™”ํ•ด์„œ, ๋ณต์žกํ•œ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์—ฌ์œ  ์žˆ๊ฒŒ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–จ๊นŒ? HotSpot์ด ์ด์™€ ๊ฐ™์€ ํ˜•์‹์ด๋‹ค.


์˜ˆ์ „์— C์™€ Java ์ค‘ ์–ด๋А ์ชฝ์ด ๋” ๋น ๋ฅธ๊ฐ€? ๋ผ๋Š” ์งˆ๋ฌธ์—, ์ตœ์ ํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ด ์ž˜ ์ปดํŒŒ์ผ ๋œ C๋ณด๋‹ค Java๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๋Š” ๋Œ€๋‹ต์„ ํ•œ ์ ์ด ์žˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์ž˜ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ด๊ธธ ์ˆ˜ ์—†๊ฒ ์ง€๋งŒ, ์•„๋งˆ์ถ”์–ด๊ฐ€ ๋‹จ์ง€ ์ตœ์ ํ™” ์˜ต์…˜์„ ์ง€์ •ํ•ด ์ปดํŒŒ์ผ ํ•œ C์˜ ๊ณ„์‚ฐ ํ”„๋กœ๊ทธ๋žจ๊ณผ Java๋ฅผ ๋น„๊ตํ•˜์˜€์„ ๋•Œ, Java๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์˜ˆ๊ฐ€ ์‹ค์ œ๋กœ ์žˆ์—ˆ๋‹ค. ๋ช‡ ๋ฒˆ์ด๋‚˜ interpreter๋กœ ์‹คํ–‰ํ•œ ํ›„, ํ”„๋กœํŒŒ์ผ์„ ์ทจ๋“ํ•ด์„œ, ์ด๊ฒƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ปดํŒŒ์ผ ํ•˜๋ฏ€๋กœ, C๋กœ ๋งํ•˜์ž๋ฉด, prof ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” "์ตœ์ ํ™” ์ปดํŒŒ์ผ"๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.


์ตœ๊ทผ Intel์˜ Itanium์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์ธ EPIC(Explicitly Parallel Instruction Computing๏ผš๋ช…์‹œ์  ๋ณ‘๋ ฌ ๋ช…๋ น ์ปดํ“จํŒ…)์—์„œ๋Š”, ์ปดํŒŒ์ผ ์‹œ์— ์ตœ์ ํ™”ํ•ด, ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋‚ญ๋น„ ์—†๊ฒŒ ์‚ฌ์šฉํ•ด, ๊ณ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•œ๋‹ค. HotSpot ๊ธฐ์ˆ ๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. HP๋Š” Itanium์„ ํƒ‘์žฌํ•œ HP-UX์‹œ์Šคํ…œ์— HotSpot์„ ๊ตฌํ˜„ํ•œ JVM์„ ๋ฒŒ์จ ๋ฆด๋ฆฌ์Šค ํ–ˆ์œผ๋ฉฐ, ๋†’์€ ์„ฑ๋Šฅ์„ ์‹คํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.


๊ทธ๋Ÿผ, ์ตœ์ดˆ์˜ ์ปดํŒŒ์ผ ์‹œ์— ํ”„๋กœํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๋„๋ก ์ง€์ •ํ•ด์„œ, ํ…Œ์ŠคํŠธ Run์„ ํ•œ๋ฒˆ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ ํ™” ์ปดํŒŒ์ผ์— ๋ฐ˜์˜ํ•œ๋‹ค. ์ด๋Š” ๊ณ ๋„์˜ ์ปดํŒŒ์ผ ํ…Œํฌ๋‹‰์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ, Java์—์„œ๋Š” ์ ๋‹นํ•˜๊ฒŒ ํ•ด๋„ ์ž๋™์ ์œผ๋กœ ํ•ด ์ค€๋‹ค. ๊ณ„์‚ฐ์— ์‚ฌ์šฉํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ฐ”๋€” ๊ฒฝ์šฐ, C++์—์„œ๋Š” prof๋ฅผ ๊ณ ์ณ ์ปดํŒŒ์ผ์„ ๋‹ค์‹œ ํ•˜์ง€๋งŒ, Java์—์„œ๋Š” ๋‹จ์ง€ ์‹คํ–‰๋งŒํ•˜๋ฉด, ๊ทธ ๋•Œ์— ์‘ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


HotSpot๊ณผ heap์˜ ๊ฐœ์„ ์€ JDK(Java Development Kit) 1.3.x๋ถ€ํ„ฐ ์‹คํ˜„๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ, EC ์‚ฌ์ดํŠธ์—์„œ Java๋ฅผ ์„ฑ๋Šฅ์˜ ์ €ํ•ด์—†์ด ์ด์šฉ๋˜๊ธฐ์— ์ด๋ฅธ ๊ฒƒ์ด๋‹ค. HP์˜ Itanium์šฉ JDK์˜ ์ตœ์‹  ๋ฒ„์ „์€ 1.4.2์ด๋‹ค.


Multithreaded (multi-thread)


HotJava์™€ ๊ฐ™์ด ๋™์˜์ƒ์„ ์ทจ๊ธ‰ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ multi-thread๋Š” ํ•„์ˆ˜ ์š”๊ฑด์ด๋‹ค. 1๊ฐœ์˜ ๋™์˜์ƒ์ด ์›€์ง์ด๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ๋‹ค๋ฅธ ๋ฒ„ํŠผ์˜ ์กฐ์ž‘์„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋ฉด, ์™„์ „ํžˆ ์“ธ๋ชจ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก , ์š”์ฆ˜์—๋Š” Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋ณต์ˆ˜์˜ request๋ฅผ multi-thread๋กœ ๋ณ‘ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š” ๋ถˆ๊ฐ€๊ฒฐํ•œ ์š”์†Œ์ด๋‹ค. ๋‹น์ดˆ์˜ Java์—์„œ multi-thread๋Š” ๋ชจ๋‘ JVM์œผ๋กœ ์‹คํ˜„๋˜๊ณ  ์žˆ์—ˆ๋‹ค. interpreter๊ฐ€ ํƒ€์ž„ ์‰์–ด๋ง์„ ํ†ตํ•ด์„œ ๊ฐ€์ƒ์ ์œผ๋กœ ๋ณต์ˆ˜์˜ thread๋ฅผ ๋™์ž‘์‹œํ‚ค๊ฒŒ ๋˜์–ด ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ interpreter๋กœ ์‹คํ–‰๋˜๋Š” thread๋ฅผ green thread๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์•„๋งˆ Green Project์˜ ํ”์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. JIT, HotSpot์˜ ๋“ฑ์žฅ์œผ๋กœ ์‹คํ–‰ ์‹œ์— ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ, ๊ฐ€์ƒ ์‹œ์Šคํ…œ์ƒ์˜ thread๋„, OS๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” thread๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด๊ฒƒ์„ native thread๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Green thread์— ๋น„ํ•˜๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ˜„๊ฒฉํžˆ ์ ๋‹ค.


Dynamic


C++์—๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ๋…์ด ์žˆ์ง€๋งŒ, Java์—๋Š” ์—†๋‹ค. ๋น„์Šทํ•œ ๊ฒƒ์„ ์ฐพ์ž๋ฉด Class Path๊ฐ€ ์žˆ๋‹ค. Class Path๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ CLASS_PATH์— ์„ค์ •ํ•ด Java๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. OS์˜ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ด์œ ๋Š” ์‹คํ–‰ ์‹œ์— ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ด๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Java๋Š” ํ”„๋กœ๊ทธ๋žจ์„ *.java๋กœ ๊ธฐ์ˆ ํ•ด, javac ์ปค๋งจ๋“œ๋กœ ์ปดํŒŒ์ผ ํ•ด์„œ, *.class๋ผ๋Š” ์ด๋ฆ„์˜ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ์ง€๋งŒ, ์ด ํด๋ž˜์Šค ํŒŒ์ผ์ด ์‹คํ–‰ ์‹œ์— ์ฝํ˜€์ง€๋ฏ€๋กœ, ์ฝ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด๋‘์ง€ ์•Š์œผ๋ฉด ์ฐพ์ง€๋ฅผ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.


UNIX์—๋Š”, gnuzip์ด๋ผ๋Š” ํ‘œ์ค€ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค. ๋Œ€์ฒด๋กœ ๋ชจ๋“  UNIX OS์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ZIP์—๋Š” ์—†๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. Windows์˜ WinZip๋กœ ์ž‘์„ฑํ•œ ZIP ํŒŒ์ผ์€ UNIX์—์„œ ์••์ถ•์„ ํ’€๊ณ  ์‹ถ์–ด๋„ ํ’€ ์ˆ˜ ์—†๋‹ค! ์ด๋Ÿด ๊ฒฝ์šฐ์—๋Š”, JDK์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” jar ์ปค๋งจ๋“œ๋ผ๊ณ  ํ•˜๋Š” Java ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Windows์˜ ์—”์ง€๋‹ˆ์–ด๋ผ๋ฉด ์ต์ˆ™ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋Œ€๋กœ, UNIX์˜ tar ์ปค๋งจ๋“œ๋กœ ์ž‘์„ฑํ•œ ํŒŒ์ผ์„ Windows์—์„œ ํ’€๊ณ  ์‹ถ์„ ๋•Œ๋Š”, jar ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค, Windows์—๋Š” tar ์ปค๋งจ๋“œ์˜ ๋ฌด๋ฃŒ ๋ฒ„์ „์€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


jar์ปค๋งจ๋“œ๋ฅผ ๊ฐ‘์ž๊ธฐ ๋“ฑ์žฅ์‹œ์ผœ ๋ฏธ์•ˆํ•˜์ง€๋งŒ, Class Path์— ๋‹ค์ˆ˜์˜ class ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒƒ๋„ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ๋Š” ๊ท€์ฐฎ์€ ์ผ์ด๋‹ค. ๊ทธ๋Ÿฐ ์ธก๋ฉด์—์„œ Java์—์„œ๋Š” WinZip๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ jar ์ปค๋งจ๋“œ๋กœ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ์••์ถ•ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋˜์–ด ์žˆ๋‹ค. ์ด ํŒŒ์ผ์€ *.jar ๋ผ๊ณ  ํ•˜๋Š” ํ™•์žฅ์ž๋ฅผ ๋ถ™์ด๊ธฐ ๋•Œ๋ฌธ์— jarํŒŒ์ผ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. JavaํŒ์˜ tar๋‹ˆ๊นŒ jar๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?


ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ๋“ค์–ด ๋†“์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ „๋ถ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Jar๋กœ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •๋ฆฌํ•ด์„œ ๊ฑฐ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋„, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Swing๋„ ๊ทธ๋ ‡๋‹ค. ์ „๋ถ€ ์ฝ์–ด ๋“ค์ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํฐ์ผ์ผ ๊ฒƒ์ด๋‹ค.


๊ทธ๋Ÿฐ๋ฐ, ์‹คํ–‰ ์‹œ์— ํด๋ž˜์Šค๋ฅผ ์ฝ์–ด ๋“ค์ด๋Š” ๋ฐฉ์‹์€ ์˜ค๋Š˜๋‚  Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ํ…Œํฌ๋†€๋กœ์ง€ ๋ฐœ์ƒ์„ ์žฌ์ด‰ํ•˜๋Š” ํฐ ์—ญํ• ์„ ํ•˜์˜€๋‹ค. ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ด๋Š” ๊ธฐ๋Šฅ์ด ์—†์—ˆ๋‹ค๋ฉด, JSP(Java Server Pages)์™€ ๊ฐ™์€ ์ŠคํŒฉ๋„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, *.jsp ํŒŒ์ผ ์•ˆ์— Java์–ธ์–ด๋ฅผ ๋ฌป์–ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ํ†ต์ƒ์ ์œผ๋กœ JSP๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š” *.java๊ฐ€ ์‹ ๊ทœ๋กœ ์ƒ์„ฑ๋˜์–ด javac๋กœ ์ปดํŒŒ์ผ ๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ *.class๊ฐ€ ์ž‘์„ฑ๋œ๋‹ค. ์ด *.class๋Š” Servlet์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.


๊ทธ๋Ÿฌ๋‚˜, JSP๋„ ๊ณ ๋„๋กœ ๋น„๋Œ€ํ™”๋˜๊ณ  ์žˆ๋Š” ์˜ค๋Š˜๋‚ , ์‚ฌ์ „์— ์ปดํŒŒ์ผ ํ•ด ๋‘๋Š” ๊ธฐ๋Šฅ์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ๋Š” ํ‘œ์ค€์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. JSP๋ฅผ *.java๋กœ ๋ณ€ํ™˜ํ•œ ์‹œ์ ์—์„œ 2Gbytes๋ฅผ ๋„˜์–ด ๋ฒ„๋ ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š”, ์‚ฌ์ „์— ์ปดํŒŒ์ผํ•ด ๋‘๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ•˜๊ณ  ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์›ƒ๊ธฐ์ง€๋„ ์•Š๋‹ค.


ํ•œ ๋ฒˆ ์šด์˜์„ ์‹œ์ž‘ํ•˜๋ฉด ๋ฉˆ์ถœ ์ˆ˜ ์—†๋Š” Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ, ๋ฒ„๊ทธ์— ์˜ํ•œ ์›์‹œ์ฝ”๋“œ์˜ ์ˆ˜์ •์„ ๋ฐ˜์˜์‹œํ‚ค๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ(deployment)๊ฐ€ ์ˆœ์กฐ๋กญ๊ฒŒ ํ–‰ํ•ด์ ธ์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” Java์˜ ์ƒ๊ฐ์ด Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—๋„ ๊ณ„์†๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


โ—†ใ€€์ปดํ“จํ„ฐ ๊ทธ ์ž์ฒด์˜ ์—ญ์‚ฌ๊ฐ€, ์ด์ œ ๊ฒจ์šฐ ๋ฐ˜์„ธ๊ธฐ๋ฅผ ์ง€๋‚˜๊ณ  ์žˆ๋Š” ๊ฐ€์šด๋ฐ, ๋ฒŒ์จ 8๋…„์˜ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Java๋Š” ์–ด๋А๋ง ๊ฒฐ์ฝ” ์ƒˆ๋กœ์šด ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์ปดํ“จํ„ฐ ์†Œ๋…„์˜ ์‹œ๋Œ€๋ถ€ํ„ฐ, Jobs์”จ๋‚˜, Gosling์”จ์™€ ๊ฐ™์€ ์„ธ๋Œ€๋ฅผ ๋ณด๋‚ธ ์—”์ง€๋‹ˆ์–ด๋กœ์„œ Java์˜ ์ŠคํŒฉ์€ ๋Œ€๋‹จํ•˜๋‹ค๊ณ  ๋А๋‚€๋‹ค. ์ด๋Ÿฐ ๋‚˜์˜ ์ƒ๊ฐ์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์ „ํ•ด์ง€๋ฉด ๋‹คํ–‰์ผ ๊ฒƒ์ด๋‹ค. Java๋ฅผ ๋„“์€ ๋…์ž์ธต์—๊ฒŒ ์•„์ฃผ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜๋Š” ์—†์—ˆ์ง€๋งŒ, ์ „์ˆ ํ•œ Original Java Whitepaper๋‚˜, Java ํƒ„์ƒ์˜ ํŽ˜์ด์ง€๋ฅผ ์•„์ง ๋ณด์ง€ ์•Š์€ ์•Š์•˜๋‹ค๋ฉด, ๊ผญ ๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•

ํ•™๊ต ๊ณผ์ œ๋กœ ์ œ์ถœํ–ˆ๋˜ ์Šค์บ”๋ผ์ธ ํด๋ฆฌ๊ณค ํ•„ ๋ฐ ๋ฐ”์šด๋”๋ฆฌ 4-์›จ์ด ํด๋ฆฌ๊ณค ํ•„ ^.^

๋‹ค๊ฐํ˜•์ฑ„์šฐ๊ธฐ!!


์ฃผ์š” ์†Œ์Šค ์ฝ”๋“œ


//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
                         
//  โ”€โ” ์ œ์ž‘์ž : ํ˜ผ๋ˆ์†์˜ ์ง€๋‚จ์ฐจ
//  โ”€โ” ๋ชฉ  ์  : ํ•™๊ต ๊ณผ์ œ
//  โ”€โ” ๊ณผ  ๋ชฉ : ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค
//  โ”€โ” ์ฃผ  ์ œ : ๋‹ค๊ฐํ˜• ์ƒ‰ ์ฑ„์šฐ๊ธฐ.
//  โ”€โ” ๋ฐฉ  ๋ฒ• : Scanline fill & Flood Fill
//  โ”€โ” ๋‚   ์งœ : 2008. 10. 3 03:46 AM

//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”›
#include <windows.h>
#include "defines.h"  //์•ˆ์— ๊ฐ์ข… ํ—ค๋”ํŒŒ์ผ ๋ฐ define๋“ค์ด ์“ฐ์—ฌ์ ธ์žˆ์Œ.
#include "GLPoints.h" //(x,y)ํŠœํ”Œ

void scanLine(vector<CGLPoints>& vecGLPoints); //vertex๋ญ‰์น˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ScanlineFill

// ์žฌ๊ท€ํ•จ์ˆ˜ ์ด์šฉํ•œ version 1 (๋„ํ˜•ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ)

/*

void boundary_fill(int x, int y, BYTE* byBoundaryColor)
{

    cout << x << " " << y << endl;
    //ํ˜„์žฌํ”ฝ์…€์ด ํ…Œ๋‘๋ฆฌ์ƒ‰์ด๋ž‘ ๊ฐ™์œผ๋ฉด ์ค‘๋‹จ.
    BYTE byCurrerntColor[3];
    glReadPixels(x,WINSIZEY-y,1,1,GL_RGB,GL_UNSIGNED_BYTE,byCurrerntColor);
    if((byBoundaryColor[0] == byCurrerntColor[0]
        && byBoundaryColor[1] == byCurrerntColor[1]
        && byBoundaryColor[2] == byCurrerntColor[2] )|| x<=0||WINSIZEY<=y||WINSIZEX<=x||WINSIZEY<=WINSIZEY-y || matrix[x][WINSIZEY-y] == true )
    {
        return ;
    }
    else
    {
        matrix[x][WINSIZEY-y]=true;
        glColor3f(1.0, 1.0, 0.0);
        setPixel(x,WINSIZEY-y);

        boundary_fill(x+1, y, byBoundaryColor);
        boundary_fill(x, y-1, byBoundaryColor);

        boundary_fill(x-1, y, byBoundaryColor);
        boundary_fill(x, y+1, byBoundaryColor);

    }

}

*/



// ์ž์ฒด ์Šคํƒ์„ ์ด์šฉํ•œ version2 - ๋„ํ˜•์˜ ํฌ๊ธฐ๊ฐ€ ์ปค๋„ ์ž˜ ๋™์ž‘ !! :)
void
boundary_fill(int x, int y, BYTE* byBoundaryColor)
{

  stack< CGLPoints > stackStoreCoords;

  stackStoreCoords.push(*(new CGLPoints(x,y)));
  cout << x << " " << y << endl;
  //ํ˜„์žฌํ”ฝ์…€์ด ํ…Œ๋‘๋ฆฌ์ƒ‰์ด๋ž‘ ๊ฐ™์œผ๋ฉด ์ค‘๋‹จ.
  BYTE byCurrerntColor[3];
  do
  {
    int nX = stackStoreCoords.top().GetX();
    int nY = stackStoreCoords.top().GetY();
    glReadPixels(nX
      ,WINSIZEY-(nY),1,1,GL_RGB,GL_UNSIGNED_BYTE,byCurrerntColor);
    if((byBoundaryColor[0] == byCurrerntColor[0]
      && byBoundaryColor[1] == byCurrerntColor[1]
      && byBoundaryColor[2] == byCurrerntColor[2] )
    )//  || nX<=0  \
      ||WINSIZEY<=nY  \
      ||WINSIZEX<=nX  \
      ||WINSIZEY<=WINSIZEY-nY  \
      || matrix[nX][WINSIZEY-nY] == true )
    {
      stackStoreCoords.pop();

    }
    else
    {
    //  matrix[nX][WINSIZEY-nY]=true;
      glColor3f(1.0, 1.0, 0.0);
      setPixel(nX,WINSIZEY-nY); //์ ์„ ์ฐ๊ณ  ์Šคํƒ์—๋‹ค 4๋ฐฉํ–ฅ์„ ์Œ“๋Š”๋‹ค.
      stackStoreCoords.push(*(new CGLPoints(nX+1,nY)));
      stackStoreCoords.push(*(new CGLPoints(nX,nY-1)));
      stackStoreCoords.push(*(new CGLPoints(nX-1,nY)));
      stackStoreCoords.push(*(new CGLPoints(nX,nY+1)));
     
    }

  } while(!stackStoreCoords.empty()); //์Šคํƒ์ด ๋น„๋ฉด ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์˜จ๋‹ค.


}
//CGLPointsํด๋ž˜์Šค๋ฅผ y์ขŒํ‘œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ• ๋•Œ ๋น„๊ตํ•จ์ˆ˜.
bool LessByY(CGLPoints pt1, CGLPoints pt2)
{
  return (pt1.GetY()<pt2.GetY());
}
//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
//      โ”€โ”   ๋ฉ”์ธ ์‹œ์ž‘ โ”โ”€
//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
void main(int argc, char** argv)
{
 //์ƒ๋žต
}
//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
//      โ”€โ”   ํ•จ์ˆ˜๋“ค ์ •์˜ โ”โ”€
//โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”

//์ดˆ๊ธฐํ™”
void init(void)
{
 //์ƒ๋žต
 
}



//์  ์ฐ๊ธฐ
void setPixel(GLint x, GLint y)
{
   //์ƒ๋žต
}

//์„  ๊ธ‹๊ธฐ
void setLine(GLint x, GLint y, GLint x2, GLint y2)
{
  //์ƒ๋žต
}


//๋‹ค๊ฐํ˜• ์„ ๊ธ‹๊ธฐ (์ ๋“ค์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค)
void setPolyLine(vector<CGLPoints>& vecGLPoints)
{
  int nNumOfvertice = vecGLPoints.size();
  int i;
  for(i = 1 ; i < nNumOfvertice ; i++)
  {
    setLine(vecGLPoints[i-1].GetX(), vecGLPoints[i-1].GetY(), vecGLPoints[i].GetX(), vecGLPoints[i].GetY());
  }
  setLine(vecGLPoints[nNumOfvertice-1].GetX(), vecGLPoints[nNumOfvertice-1].GetY(), vecGLPoints[0].GetX(), vecGLPoints[0].GetY());
}

//์Šค์บ”๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๊ฐํ˜• ๋‚ด๋ถ€ ์น ํ•˜๊ธฐ(์ ๋“ค์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค)
void scanLine(vector<CGLPoints>& vecGLPoints)
{
  int i,j;
  int color;
  int minY, maxY;
 
  //X์ขŒํ‘œ์šฉ
  //y์ขŒํ‘œ๋ฅผ ํ‚ค์ด๋ฉฐ x์ขŒํ‘œ๋ฅผ value๋กœ ํ•˜๋Š” ๋งต
  vector<int>*  vecScanLineYCoord = new vector<int>[WINSIZEY];

  CGLPoints* temp = new CGLPoints(0,0);
  //๋‹ค๊ฐํ˜•์˜ y์˜ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
  temp = min_element(vecGLPoints.begin(),vecGLPoints.end(),LessByY); //์ตœ์†Œ๊ฐ’
  minY = temp->GetY();
  temp = max_element(vecGLPoints.begin(),vecGLPoints.end(),LessByY); //์ตœ๋Œ€๊ฐ’
  maxY = temp->GetY();

  //์ตœ์†Œ์ตœ๋Œ€๊ฐ’ ์ฝ˜์†”์ถœ๋ ฅ(ํ…Œ์ŠคํŠธ์šฉ)
  cout << minY << " "<< maxY << endl;

  int nLenth = vecGLPoints.size(); //์ ๋“ค์˜ ๊ฐฏ์ˆ˜
  for(i = 1 ; i <= nLenth ; i++)
  {
    //๋‘์ ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ๊ตฌํ•จ.
    float fSlope =  float(vecGLPoints[i-1].GetY() - vecGLPoints[i%nLenth].GetY()) 
            / float(vecGLPoints[i-1].GetX() - vecGLPoints[i%nLenth].GetX());
    //๋‘์ ์˜ ์ง์„ ์˜ ๋ฐฉ์ •์‹์˜ y์ ˆํŽธ
    // y-y2 == (y2-y1)/(x2-x1) * (x-x2)  where x == 0
    float yInterCept = fSlope*(-vecGLPoints[i-1].GetX())+vecGLPoints[i-1].GetY();
    //for๋ฌธ์„ ์˜ฌ๋ฐ”๋กœ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋‘ vertex์˜ y์ขŒํ‘œ ๋Œ€์†Œ๋น„๊ตํ•œ๋‹ค.
    int minimum, maximum;
    if(vecGLPoints[i-1].GetY()<vecGLPoints[i%nLenth].GetY())
    {
      minimum = vecGLPoints[i-1].GetY();
      maximum = vecGLPoints[i%nLenth].GetY();
    }
    else
    {
      minimum = vecGLPoints[i%nLenth].GetY();
      maximum = vecGLPoints[i-1].GetY();
    }
    for(j = minimum ; j < maximum ; j++ )
    {
      // j๋Š” y์ขŒํ‘œ์ด๋ฉฐ x์ขŒํ‘œ๋Š” y์ขŒํ‘œ์— ์ ˆํŽธ์„ ๋บ€๊ฐ’์„ (1/๊ธฐ์šธ๊ธฐ)๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๋‚˜์˜จ๋‹ค. (y = mx + b ์—์„œ๋„์ถœ)
      vecScanLineYCoord[j].push_back((j-yInterCept)*(1.0f/fSlope));
    }

  }



  //๊ฐ scanLine y์ขŒํ‘œ์—์— ์ €์žฅ๋œ x์ขŒํ‘œ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  for(i = minY ; i <= maxY ; i++)
    sort(vecScanLineYCoord[i].begin(),vecScanLineYCoord[i].end());
 

  //์Šค์บ”๋ผ์ธ์˜ ์ตœ์†Œ๊ฐ’์—์„œ ์ตœ๋Œ€๊ฐ’๊นŒ์ง€
  for(i = minY ; i < maxY ; i++)
  {

    //์ •๋ ฌ๋œ X์ขŒํ‘œ๋“ค์˜ PAIR๋“ค์„ ์„ ์„ ๊ทธ์–ด ํด๋ฆฌ๊ณค์— ์ƒ‰์„ ์ฑ„์šด๋‹ค.
    int nSize = vecScanLineYCoord[i].size();
    for(j = 0 ; j < nSize ; j+=2)
    {

      //์ฝ˜์†” ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ
//      cout << "scanLine Y :  " << i << "X์ขŒํ‘œ Pair : " \
        <<vecScanLineYCoord[i][j%nSize]  << " "<< vecScanLineYCoord[i][(j+1)%nSize] << endl;
      setLine(vecScanLineYCoord[i][j%nSize],i,vecScanLineYCoord[i][(j+1)%nSize],i);//์„ ๊ธ‹๊ธฐ
    }
  }
}
void displayFunc(void)
{
  int i;
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(1.0, 1.0, 0.0);
  //  (x,y)ํŠœํ”Œ๋“ค์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ์„ ์–ธ
  vector<CGLPoints> vecPtVertice;

  //๋žœ๋ค๋„ํ˜•
  srand(GetTickCount());
//  for(i = 0 ; i < 100 ; i++)
//    vecPtVertice.push_back(*(new CGLPoints(rand()%WINSIZEX, rand()%WINSIZEY)     ));


  //ํฐ๋„ํ˜•
  vecPtVertice.push_back(*(new CGLPoints(100,400)));
  vecPtVertice.push_back(*(new CGLPoints(300,200)));
  vecPtVertice.push_back(*(new CGLPoints(500,100)));
  vecPtVertice.push_back(*(new CGLPoints(700,300)));
  vecPtVertice.push_back(*(new CGLPoints(500,500)));
  vecPtVertice.push_back(*(new CGLPoints(400,350)));
  vecPtVertice.push_back(*(new CGLPoints(300,600)));

  //์ž‘์€๋„ํ˜•
/* 
  vecPtVertice.push_back(*(new CGLPoints(226, 143)));
  vecPtVertice.push_back(*(new CGLPoints(216, 174)));
  vecPtVertice.push_back(*(new CGLPoints(270, 184)));
  vecPtVertice.push_back(*(new CGLPoints(287, 139)));
  vecPtVertice.push_back(*(new CGLPoints(247, 132)));
*/

  //ํ…Œ๋‘๋ฆฌ
  setPolyLine(vecPtVertice);

  if(g_MouseState.rightButton == true)
    scanLine(vecPtVertice); //์Šค์บ”๋ผ์ธ์œผ๋กœ ๋‹ค๊ฐํ˜•์„ ์ฑ„์šด๋‹ค. (์ธ์ž๋กœ vertice๋„˜๊น€)

  //๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น์˜์—ญ๋ถ€ํ„ฐ Boundary_fill ์‹œ์ž‘.
  if(g_MouseState.leftButton==true)
  {
    glColor3f(1.0, 1.0, 0.0);
    BYTE byBoundaryColor[3]={255,255,0};
    DWORD dwBegin  = GetTickCount();
    boundary_fill(g_MouseState.x,g_MouseState.y,byBoundaryColor);
    DWORD dwEnd    = GetTickCount();
    cout << "Boundary_FILL ์†Œ์š”์‹œ๊ฐ„ : " << float((dwEnd - dwBegin)/1000.0f) << endl;
  }
  glFlush();
 
}

void HandleMouseState(int button, int state, int x, int y)
{
//์ƒ๋žต
}

 

์‹ค ํ–‰ ํ™” ๋ฉด

 

Boundary Fill์„ ์ด์šฉ

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ Boundary_fill

image
๊ทธ๋ฆผ1) ์ด ์ •๋„ ํฌ๊ธฐ๋Š” ๋ฌธ์ œ์—†๋‹ค

 
๊ทธ๋ฆผ2) ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉŽ์–ด๋ฒ„๋ฆฐ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ์ด ์žฌ๊ท€ํ•จ์ˆ˜์˜ ๋ฌธ์ œ์ ์€ ํด๋ฆฌ๊ณค์˜ ํฌ๊ธฐ๊ฐ€ ์‹œ์Šคํ…œ ์Šคํƒ์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž„๊ณ„๊ฐ’์„ ๋„˜์œผ๋ฉด Stack Overflow๊ฐ€ ๋‚˜์„œ
๋” ์ด์ƒ ์ง„ํ–‰์„ ๋ชปํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฐ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ž์ฒด์ ์ธ ์Šคํƒ์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š”๋ฐ (ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์จ์„œ ํ•œ๊ณ„๊ฐ’์ด ํ›จ์”ฌ ํผ) STL์˜ stack์„ ์ผ๋‹ค.

 


๊ทธ๋ฆผ3> ์ž์ฒด์ ์ธ ์Šคํƒ์„ ์ด์šฉํ•œ ๋น„๊ต์  ํฐ ์‚ฌ์ด์ฆˆ์˜ ๋„ํ˜• ์ƒ‰์ฑ„์šฐ๊ธฐ.

Scanline ์ด์šฉํ•˜์—ฌ ์ฑ„์šฐ๊ธฐ.

๊ฐ™์€ ๋„ํ˜•์œผ๋กœ ์‹คํ—˜ํ–ˆ์„๋•Œ ๋˜‘๊ฐ™์ด ์ฑ„์›Œ์กŒ๋‹ค.
์ฐจ์ด์ ์ด๋ผ๋ฉด ์ˆ˜ํ–‰์†๋„๋Š” 0์ดˆ์— ๊ฐ€๊น๊ฒŒ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ฑ„์›Œ์กŒ๋‹ค.

์  ๋ฐฑ๊ฐœ๋ฅผ ๋žœ๋ค์œผ๋กœ ์ฐ์–ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ–ˆ๋‹ค.

๋„ํ˜•์˜ ๋‚ด๋ถ€ ์™ธ๋ถ€๋ฅผ ์ž˜ ๊ตฌ๋ถ„ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ‰์น ์ด ๋˜์—ˆ๋‹ค.

 

 

 

Discussion


๋˜‘๊ฐ™์€ ๋„ํ˜•์„ ๋‹ค๋ฅธ ๋‘ ๋ฐฉ์‹์œผ๋กœ ์ฑ„์› ์„๋•Œ ์ˆ˜ํ–‰์‹œ๊ฐ„

 
๋‘ ๋ฐฉ์‹์€ ์†Œ์š”์‹œ๊ฐ„์—์„œ ์—„์ฒญ๋‚œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

 

Scanline_fill ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ง์„ ์˜ ๋ฐฉ์ •์‹์„ ์ด์šฉํ•œ coherence ํŠน์ง•์„ ์ด์šฉํ•ด์„œ ๊ฑฐ์˜ 0์ดˆ์— ๊ฐ€๊น๊ฒŒ ๋‚˜์™”์ง€๋งŒ
Boundary_fill ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ”ฝ์…€ํ•˜๋‚˜์”ฉ ์ฐ์„๋•Œ ๋งˆ๋‹ค glReadPixels๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐ ํ•œ์  ํ•œ์  ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 21~24์ดˆ์— ๊ฐ€๊นŒ์šด ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.(์‹คํ–‰ํ™”๋ฉด์— ์žˆ๋Š” ํฐ ๋„ํ˜•์˜ ๊ฒฝ์šฐ)

๊ตฌํ˜„์‹œ ์–ด๋ ค์› ๋˜ ์ ์€ glReadPixels์˜ y์ธ์ž๋ฅผ ์ฐฝ์˜ Yํฌ๊ธฐ์—์„œ ๋บ€ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
์ด ๊ฒƒ ๋•Œ๋ฌธ์— ์ˆ˜ ๊ตฌํ˜„์ƒ ์ˆ˜ ๋งŽ์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์—ˆ๋‹ค.
OPENGL์—์„œ๋Š” ๋งจ ์•„๋ž˜๊ฐ€ y์ขŒํ‘œ 0์ธ ๋ฐ˜๋ฉด ์œˆ๋„์šฐ์ƒ์—์„œ ์‹ค์ œ๋กœ ๋””์Šคํ”Œ๋ ˆ์ด ๋  ๋•Œ๋Š” ๋งจ ์œ—์ชฝ์ด 0์œผ๋กœ ์ฐํ˜”๋‹ค.

Scanline_fill ๊ตฌํ˜„ ์‹œ ,๋‘ ์ ์˜ ์ง์„ ์˜ ๋ฐฉ์ •์‹์„ ์ด์šฉ y-y1 = (y2-y1)/(x2-x1)(x-x1)
๋‘ ์  ์‚ฌ์ด์—์„œ ์Šค์บ”๋ผ์ธ๊ฐ’์„ 1์ฆ๊ฐ€ ํ˜น์€ ๊ฐ์†Œ ์‹œํ‚ฌ๋•Œ x๊ฐ’์„ ์ถ”์ •ํ›„ ๊ทธ x๊ฐ’์˜ y์ธ๋ฑ์Šค์— x์˜ ๋ฐธ๋ฅ˜๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ 
๋‹ค๋ฅธ์ ๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์ด์™€ ๊ฐ™์ด ๋ฐ˜๋ณตํ›„ ์Šค์บ”๋ผ์ธ์˜ ํŠน์ • vector๋ฅผ sortํ•œํ›„ pair๋ฅผ ์ด๋ฃจ๊ฒŒ ํ•˜์—ฌ ์„ ์„ ๊ทธ์–ด์ฃผ์—ˆ๋‹ค.

์›๋ž˜ ์ข€ ๋” ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์ธ ์•„๋ž˜์—์„œ ๋ถ€ํ„ฐ ํ”ฝ์…€ํ•˜๋‚˜ํ•˜๋‚˜ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์ ์„ ๋งŒ๋‚˜๋ฉด ๊ทธ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ๋‹ค์‹œ ๋งŒ๋‚˜๋ฉด ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์ค‘๋‹จํ•˜๋Š” ์‹์œผ๋กœ ํ• ๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์‹œ๊ฐ„๋„ ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ์˜ˆ์™ธ์‚ฌํ•ญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋‚˜์™€์„œ "์ง๊ด€์ "์ด๊ธด ํ•˜์ง€๋งŒ ๊ตฌํ˜„์‹œ์—๋Š”
coherence ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ๋งŽ์€ ์ˆ˜๊ณ ๋กœ์›€์ด ํ•„์š”ํ–ˆ๋‹ค. (์‹ค์ œ๋กœ OPENGL์„ ์ด์šฉํ•˜์—ฌ ์„ ์„ ๊ทธ์œผ๋ฉด x์ขŒํ‘œ์— ๊ฐ๋„์— ๋”ฐ๋ผ 2๊ฐœ์ด์ƒ์˜ ์ ์ด ์ฐํžˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ฑ…์—์„œ ๋‚˜์˜จ ์˜ˆ์™ธ์‚ฌํ•ญ ์™ธ์—๋„ ์ƒ๊ฐํ•  ๊ฑฐ๋ฆฌ๊ฐ€ ๋งŽ๋‹ค.)

Boundary fill ์ด ๋„ํ˜•ํฌ๊ธฐ์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด ๋‹ฌ๋ฆฌ ์†Œ์š”๋˜๊ธด ํ•˜์ง€๋งŒ ์œ„์˜ ์‹คํ—˜์—์„œ 23์ดˆ์ฏ”์Œ ๊ฑธ๋ฆฌ๋Š”๊ฒƒ์„ ๋ณด๊ณ  ์•ฝ๊ฐ„ ์˜๋ฌธ์ ์ด ๋“œ๋Š”๊ฒƒ์ด , ํฌํ†ต Graphic ํˆด์—์„œ๋„ Boundary_fill ์ด๋‚˜ ์ˆ™์ œ์—” ๋‚˜์˜ค์ง€ ์•Š์€ Flood_fill ๊ฐ™์€ ๋ฐฉ๋ฒ• ๋˜ํ•œ ์‚ฌ์šฉํ• ํ…๋ฐ
์–ด๋–ป๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ์งง์€ ์ˆœ๊ฐ„์— ๋‹ค๊ฐํ˜•์„ ์น ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ๋ณด๋„ˆ์Šค๋กœ STL์—์„œ ์ œ๊ณตํ•˜๋Š” vector ๋ฐ stack์— ๋Œ€ํ•ด์„œ  ์ข€ ๋” ์นœ์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ƒˆ์‚ผ ์ƒ์šฉ๊ทธ๋ž˜ํ”ฝํˆด์˜ ์œ„๋Œ€ํ•จ์„ ๋А๋ผ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•


์›๋ฌธ :

๏ปฟ๊ฐœ๋ฐœ์ž์˜ 10๋…„์ผ๊ธฐ

http://devdev.tistory.com/74

๋ฌธ์ž์„ธํŠธ ๋ฐ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ๊ทธ๋ฆฌ๊ณ  ์œˆ๋„์šฐ32์—์„œ๋Š” ์–ด๋–ค ์‹์œผ๋กœ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. ์ด ๊ธ€์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตญ์ œํ™”์— ๋Œ€ํ•œ ๊ด€์‹ฌ๋„๋ฅผ ๋†’์ด๊ณ  ๊ตญ์ œํ™”์˜ ์‹คํ˜„์— ๋Œ€ํ•œ ์ „์ฒด์ ์ธ ์•ˆ๋ชฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

๋ฌธ์ž ์„ธํŠธ

๋ฌธ์ž์„ธํŠธ๋ž€ ํ•˜๋‚˜์˜ ๋ฌธ์ž์™€ ๊ทธ ๋ฌธ์ž์— ๋ถ€์—ฌ๋œ ๊ฐ’์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ์ข…์˜ ํ…Œ์ด๋ธ”๊ณผ๋„ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค. ์ปดํ“จํ„ฐ ๋ถ„์•ผ์—์„œ์‚ฌ์šฉ๋˜๊ณ ์žˆ๋Š” ๋ฌธ์ž์„ธํŠธ๋ฅผ ํฌ๊ฒŒ ๋ณธ๋‹ค๋ฉด SBCS(Single Byte Character Set), MBCS(Multi ByteCharacter Set), DBCS(double Byte Character Set), WBCS(Wide ByteCharacter Set ๋˜๋Š” Unicode) ๋“ฑ ๋„ค ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

SBCS๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž์„ธํŠธ์— ๋ถ€์—ฌ๋œ ๊ธ€์ž ๊ฐ’์ด Single Byte, ์ฆ‰ 0-255์˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Œ์„ ๋งํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž˜์•Œ๊ณ ์žˆ๋Š” ASCII ๋˜๋Š” ISO-8859-1 ๋ฌธ์ž ์„ธํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. ์ฃผ๋กœ 0x00๋ถ€ํ„ฐ 0x7F๊นŒ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ ์žˆ๋Š”ASCII๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ด ์ค‘์—์„œ๋„ 0x20๋ถ€ํ„ฐ 0x7F๊นŒ์ง€๋Š” ํ™”๋ฉด ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์„ธํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. SBCS๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ ์–ธ์–ด๋“ค์€ 0x80๋ถ€ํ„ฐ 0xFE๊นŒ์ง€์˜ ๋ฌธ์ž์„ธํŠธ๋ฅผ ์ œ๊ฐ๊ธฐ ๋”ฐ๋กœ ์ •์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๋“ค ๊ฐ ๋ฌธ์ž์„ธํŠธ๋“ค์„ ๊ฐ๊ฐ ๋‹ค๋ฅธ์ฝ”๋“œํŽ˜์ด์ง€(Codepage)๋กœ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

DBCS๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž์„ธํŠธ์— ๋ถ€์—ฌ๋œ ๊ธ€์ž๊ฐ’์ด ๋‘ ๋ฐ”์ดํŠธ, ์ฆ‰ 0-65535์˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Œ์„ ๋งํ•œ๋‹ค. ์ด๋Š” ์›๋ž˜์˜8๋น„ํŠธ์—์„œ ๋˜ ๋‹ค๋ฅธ 8๋น„ํŠธ๋ฅผ ๋‹จ์ˆœํžˆ ํ™•์žฅํ•œ ๊ฒƒ์ด๋‹ค. DBCS๋Š” 8๋น„ํŠธ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๋ฌธ์ž์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์€ ์ค‘๊ตญ, ํ•œ๊ตญ,์ผ๋ณธ ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋งŒ ๋“ฑ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. DBCS๋Š” SBCS์˜ ํ•œ๊ณ„๋ฅผ ๋„“ํžˆ๋Š” ๋ชฉ์ ์€ ์ด๋ฃจ์—ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ƒ์˜๋งŽ์€ ๋ถˆํŽธํ•œ ์ ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ๋Š” ์ผ์ข…์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์•ˆ๊ณ  ์˜จ ์…ˆ์ด๊ธฐ๋„ ํ•˜๋‹ค(์—ฌ๊ธฐ์„œ ํ•„์ž๊ฐ€ ๋งํ•˜๋Š” ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ž€DBCS ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๊ฒƒ์€ ๊ฒฐ์ฝ” ์•„๋‹ˆ๋ฉฐ, DBCS๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ๋„ ์›๋ž˜์˜ SBCS๋ฅผ ๊ณ„์† ์ง€์›ํ•ด์•ผ๋งŒ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์˜ค๋Š”ํ”„๋กœ๊ทธ๋žจ์ƒ์˜ ๋ณต์žก์„ฑ์—์„œ ์˜ค๋Š” ๋ถˆํŽธํ•จ์„ ์˜๋ฏธํ•œ๋‹ค).

MBCS๋ž€ SBCS์™€ DBCS๋ฅผ ํ•œ๋ฐ ๋ฌถ์–ด๋†“์€ ๋ฌธ์ž์„ธํŠธ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, DBCS์˜ ๋ฌธ์ž์„ธํŠธ์—๋Š” ๊ฑฐ์˜ SBCS์˜ ๋ฌธ์ž๊ฐ€ํฌํ•จ๋˜๋ฏ€๋กœ, ์šฐ๋ฆฌ๊ฐ€ ๋งํ•˜๋Š” DBCS๋Š” ์‚ฌ์‹ค์€ ์ฃผ๋กœ MBCS๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํ•œ๊ธ€์˜ KSC5601์„ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ๋ฌธ์ž์„ธํŠธ์˜ ์ฒ˜์Œ๋ถ€๋ถ„์ธ 0x00๋ถ€ํ„ฐ 0x7E ๊นŒ์ง€๋Š” ASCII์™€ ๋™์ผํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด์€ ์ค‘๊ตญ, ์ผ๋ณธ, ๋Œ€๋งŒ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ฉฐ ๋‚˜์ค‘์—์„ค๋ช…ํ•  Unicode์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. DBCS์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๋ฅผ ๋ฆฌ๋”ฉ ๋ฐ”์ดํŠธ(Leading Byte)๋ผ ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ๋ฐ”์ดํŠธ๋ฅผ ํŠธ๋ž˜์ผ๋ง ๋ฐ”์ดํŠธ(Trailing Byte)๋ผ ํ•˜๋ฉฐ, ์ฒซ ๋ฒˆ์งธ 128 ๋ฌธ์ž๋Š” ASCII๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ ๋‚˜์ค‘ 128 ๋ฌธ์ž๋Š”๊ฐ ์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ง€์ •๋˜์–ด์žˆ๋‹ค. ์ผ๋ณธ ์ฝ”๋“œํŽ˜์ด์ง€ 932, ์ค‘๊ตญ 936, ํ•œ๊ตญ 949 ๊ทธ๋ฆฌ๊ณ  ๋Œ€๋งŒ ์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œํŽ˜์ด์ง€950 ๋“ฑ์ด DBCS์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ASCII๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ฐ DBCS๋“ค์ด ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆํ”„๋กœ๊ทธ๋žจ์—์„œ strlen()๋Š” MBCS์—์„œ๋Š” ๋” ์ด์ƒ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๊ฒŒ๋œ๋‹ค. ์ฆ‰, strlen()์€ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ๋˜๋Š”๋ฐ, SBCS์—์„œ๋Š” ๋ฌธ์ž์˜ ์ˆ˜๊ฐ€ ๋ฐ”์ดํŠธ ์ˆ˜์™€ ์ผ์น˜ํ•˜๋ฏ€๋กœ strlen()์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ์‚ฌ์‹ค ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ”์ดํŠธ์˜ ์ˆซ์ž์ผ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ MBCS์—์„œ๋Š” ๋ฌธ์ž์˜ ์ˆ˜์™€ ๊ทธ ๋ฌธ์ž๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ”์ดํŠธ์˜ ์ˆ˜๋Š” ๊ทธ ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ strlen()์œผ๋กœ ๋ฌธ์ž์˜์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค.

์ด์™€ ๊ฐ™์ด MBCS ์‚ฌ์šฉ์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ ์ด๋ผ๋ฉด I/O์— ์—ฐ๊ด€๋œ ๋ฌธ์ž์˜ ์ฒ˜๋ฆฌ์— ํ•ด๋‹น๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๋กœ์ง์„์ผ์ผ์ด DBCS์™€ SBCS์„ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ SBCS์™€ DBCS๋ฅผ ๋™์‹œ์— ์—ผ๋‘์— ๋‘๊ณ ์ž…์ถœ๋ ฅ์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์žˆ์–ด์„œ๋Š” ๊ท€์ฐฎ์€ ์ผ์ด๋ฉฐ ์ž์นซ ์‹ค์ˆ˜ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ƒ์˜ BUG(๋ฒ„๊ทธ ๋˜๋Š” ์˜ค๋ฅ˜)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”์š”์ธ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. SBCS๋กœ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตญ์ œํ™”(Internationalization ํ˜น์€ ๊ฐ„๋‹จํ•˜๊ฒŒ i18n)ํ•  ์ˆ˜ ์—†๊ณ MBCS๋ฅผ ์‚ฌ์šฉํ•˜์ž๋‹ˆ ํ”„๋กœ๊ทธ๋žจ์ƒ์˜ ๋‚œ์ด๋„๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ๊ฐ ์–ธ์–ด๋งˆ๋‹ค ์ œ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฌธ์ž์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋‹ˆ ํ”„๋กœ๊ทธ๋žจ๊ตญ์ œํ™”์˜ ๊ธธ์€ ์ ์  ๋ฉ€์–ด์ง€๊ฒŒ๋˜๋Š” ๋А๋‚Œ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ ์œ ๋‹ˆ์ฝ”๋“œ์ด๋‹ค.


์œ ๋‹ˆ์ฝ”๋“œ

์œ ๋‹ˆ์ฝ”๋“œ๋Š” ํ”ํžˆ WBCS๋ผ ๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด SBCS์™€ DBCS๊ฐ€ ๊ณต์กดํ•˜๋Š” MBCS์™€๋Š” ๋‹ฌ๋ฆฌ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ’์ด์ผ๊ด„์ ์œผ๋กœ 16๋น„ํŠธ๋กœ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์‚ดํŽด๋ณด๋ฉด ๊ธฐ์กด์˜ ๊ตญ์ œ ํ‘œ์ค€ํ™”์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์ตœ๋Œ€ํ•œ ์ง€ํ‚ค๋ ค์• ์ผ์Œ์„ ํ•œ ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ๋„ DBCS์—์„œ์ฒ˜๋Ÿผ ๋ฌธ์ž๊ฐ’์˜ ํ‘œํ˜„์— ์žˆ์–ด์„œ 16๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ 0-65535 ๋ฒ”์œ„์˜๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ์ด ๊ฐ’์œผ๋กœ ์ง€๊ตฌ์ƒ์˜ ๋ชจ๋“  ์–ธ์–ด๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์—” ์ถฉ๋ถ„ํ•œ ์…ˆ์ด๋‹ค.

๊ทธ๋ฆผ 1์—์„œ ๋ณด๋Š” ๋ฐ”์™€ ๊ฐ™์ด, ์ฒ˜์Œ 127 ๋ฌธ์ž์ธ 0x0000๋ถ€ํ„ฐ 0x00 7F๋Š” ASCII์˜ 0x00๋ถ€ํ„ฐ 0x7F์˜๋ฌธ์ž์™€ ๋™์ผํ•˜๋ฉฐ, 0x0080๋ถ€ํ„ฐ 0x00FE๋Š” ๊ตญ์ œํ‘œ์ค€ํ™” ISO8859-1์˜ ์ˆœ์„œ์™€ ๋™์ผํ•˜๊ฒŒ ๋ฐฐ์—ดํ•˜์˜€๋‹ค. ์ด๋กœ์จ ์œ ๋‹ˆ์ฝ”๋“œ์™€SBCS์˜ ๊ตญ์ œ ํ‘œ์ค€ํ™” ๋ฌธ์ž์„ธํŠธ์™€์˜ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ํ•˜์˜€๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ๋Š” ๋˜ํ•œ ํ•œ๊ธ€์˜ ์กฐํ•ฉํ˜•๊ณผ ์ฝ”๋“œ ๊ฐ’๋งŒ ๋‹ค๋ฅผ ๋ฟ ๊ทธ ๋ฐฐ์—ด์€๋™์ผํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ Unicode์™€ ์กฐํ•ฉํ˜• ์ฝ”๋“œ์™€์˜ ๋ณ€ํ™˜์ด ๋งค์šฐ ์šฉ์ดํ•˜๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ ์ •์˜ํ•œ ํ•œ๊ธ€ ์กฐํ•ฉํ˜•์€ ๊ทธ๋ฆผ 1์—์„œ ๋ณด๋“ฏ์ดAC00๋ถ€ํ„ฐ D7A3, ์ฆ‰ 11172๊ฐœ์ด๋‹ค. ๊ทธ๋ฆผ 1์—์„œ ์ฒ˜์Œ 256๊ฐœ์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์€ ISO/ANSI 8859-1์™€ ๊ทธ ๋ฌธ์ž๋ฐฐ์—ด์ด ๋™์ผํ•˜๋ฉฐ (ISO/ANSI 8859-1์˜ ์ฒ˜์Œ 127๊ฐœ์˜ ๊ธ€์ž ๊ฐ’์€ ASCII 7๋น„ํŠธ์™€ ๋™์ผํ•˜๋‹ค.), ์ค‘๋ณต๋˜๋Š” ์—ฌ๋Ÿฌ๊ธฐํ˜ธ๋“ค ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ตญ, ์ผ๋ณธ ๋ฐ ์ค‘๊ตญ, ๋Œ€๋งŒ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•œ์ž ํ‘œ๊ธฐ๋Š” ๊ทธ ๋ชจ์–‘์ด ๋™์ผํ•˜๋ฉด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์ฝ”๋“œ๊ฐ’์œผ๋กœ ๋ฌถ์–ด๋†“์•˜๋‹ค.


ยทGeneral Scripts : ์ฃผ๋กœ SBCS์ธ Latin, Cyrillic, Greek, Hebrew, Arabic, Devanagari, Thai ๋“ฑ์˜ ๋ฌธ์ž์„ธํŠธ๋“ค์„ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

ยทSymbols : ๊ตฌ๋‘์ , ํ•™์ˆ ๊ธฐํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ข… ์‹ฌ๋ฒŒ๋“ค์„ ์ •์˜ํ•œ๋‹ค.

ยทCJK Misc.: CJK(Chinese, Japanese, Korean)์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ข…   ์Œ์„ฑ๊ธฐํ˜ธ

ยทCJK Ideographs : ํ•œ์ž ํ‘œ๊ธฐ(20902)

ยทHangul : ํ•œ๊ธ€ ํ‘œ๊ธฐ(11172)

ยทSurrogate: Future Expansion(2048)

ยทPrivate Usage : ํŠน์ • ๋ฒค๋” ๋˜๋Š” ์‚ฌ์šฉ์ž ์‚ฌ์šฉ(6400)

ยทCompatibility : ์œ ๋‹ˆ์ฝ”๋“œ์™€ ๋‹ค๋ฅธ ์ธ์ฝ”๋”ฉ ์‹œ์Šคํ…œ๊ณผ์˜ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์— ๋Œ€๋น„ํ•˜์—ฌ ์ค€๋น„ํ•œ ๋ฒ”์œ„


ํ•œ๊ธ€ ์ดˆ์„ฑ์ด 19๊ฐœ, ์ค‘์„ฑ์ด 21๊ฐœ, ๊ทธ๋ฆฌ๊ณ  ์ข…์„ฑ์ด 27๊ฐœ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ข…์„ฑ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ ์ข…์„ฑ์€28๊ฐœ๊ฐ€ ๋˜๋Š” ์…ˆ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์กฐํ•ฉํ˜• ํ•œ๊ธ€์ด ์ง€์›ํ•˜๋Š” ์ด ๊ธ€์ž ์ˆ˜๋Š” 19ร—21ร—28 = 11,172๋กœ์„œ ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ ์ง€์›ํ•˜๋Š”๊ธ€์ž ์ˆ˜์™€ ์ผ์น˜ํ•œ๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ๋Š” ์™„์„ฑ๋œ ํ•œ๊ธ€ ๊ธ€์ž ์™ธ์—๋„ ํ•œ๊ธ€ ์ดˆ์„ฑ, ์ค‘์„ฑ, ์ข…์„ฑ์„ ๋”ฐ๋กœ ์ •์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋“ค ์ž๋ชจ๊ฐ’์˜์ฒด๊ณ„์ ์ธ ๋ฐฐ์น˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋‚ด์˜ ์™„์„ฑ๋œ ํ•œ๊ธ€๋กœ์˜ ๋ณ€ํ™˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ณ ์žˆ๋‹ค. ํ‘œ 1์˜ ์ž๋ชจํŒ์„ ๋ณด๋ฉด์„œ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ๊ธ€์ž๊ฐ’์„ ํ•จ๊ป˜๊ณ„์‚ฐํ•ด ๋ณด๋„๋ก ํ•˜์ž.

์œ ๋‹ˆ์ฝ”๋“œ์— ์ •์˜๋œ ์ž๋ชจ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์™„์„ฑ๋œ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ๊ธ€์ž๊ฐ’๊ณผ ์กฐํ•ฉํ˜• ๊ธ€์ž๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฒˆํ˜ธ๋Š” ๊ฐ ์ž๋ชจ์—ํ• ๋‹น๋œ ์ธ๋ฑ์Šค๊ฐ’์ด๋ฉฐ ๋‘ ๋ฒˆ์งธ ๋ฒˆํ˜ธ๋Š” ํ•ด๋‹น ์ž๋ชจ์˜ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ’์ด๋‹ค. ์กฐํ•ฉํ˜• ๋ฌธ์ž์„ธํŠธ๋กœ์˜ ์ฝ”๋“œ๊ฐ’ ๋ณ€ํ™˜์€ ์ดˆ์„ฑ, ์ค‘์„ฑ, ์ข…์„ฑ์— ๊ฐ๊ฐ์ฑ„์›€์ด ์žˆ์œผ๋ฏ€๋กœ ์œ„์˜ ์ธ๋ฑ์Šค๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ณ€๊ฒฝํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

์ž๋ชจ๊ฐ’์„ ํฌํ•จํ•œ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ง์„ ๋ฐ›์•„ ํ•œ๊ธ€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „ 2์—์„œ ์ œ์‹œํ•˜๊ณ ์žˆ๋‹ค. ์ดˆ์„ฑ, ์ค‘์„ฑ, ์ข…์„ฑ์˜ ๊ฐ์ธ๋ฑ์Šค๊ฐ’์„ ๊ฐ๊ฐ Cho_i, Jung_i, Jong_i๋กœ ์ •์˜ํ•œ๋‹ค๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ ๊ธ€์ž๊ฐ’(V)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


V = { [(Cho_i ร— 21) + Jung_i] ร— 28 } + Jong_i + 0xAC00


์˜ˆ๋ฅผ ๋“ค์–ด, ์œ ๋‹ˆ์ฝ”๋“œ ์ž…๋ ฅ ์ŠคํŠธ๋ง์˜ ๊ฐ’์ด 0x1111(์ดˆ์„ฑ), 0x1171(์ค‘์„ฑ), 0x11B6(์ข…์„ฑ)๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด์œ„์˜ ์ž๋ชจ๊ฐ’์— ์˜ํ•˜๋ฉด 0x1111=ใ…, 0x1171=ใ…Ÿ, 0x11B6=ใ…€์ด ๋˜๋ฏ€๋กœ ์™„์„ฑ๋œ ๊ธ€์ž๋Š” โ€˜โ€™ ์ด ๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์— ์ฃผ์–ด์ง„ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜์ž.

0x1111์€ ์ดˆ์„ฑ์œผ๋กœ ์œ„ ํ…Œ์ด๋ธ” 1์— ์˜ํ•œ ์ธ๋ฑ์Šค ๊ฐ’์€ 17 (0๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•จ), 0x1171์€ 16, ๊ทธ๋ฆฌ๊ณ 0x11B6์€ 14๊ฐ€ ๋˜๋ฏ€๋กœ Cho_i=17, Jung_i=16, Jong_i=14๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฐ’์— ํ•ด๋‹น๋˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ์˜ํ•œ๊ธ€๊ฐ’ V = ( [ (17 ร— 21)+16 ] ร— 28 ) + (14 + 1) + 0xAC00 = D4DB ()์ด ๋œ๋‹ค.ํ•œ๊ธ€์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฐฐ์—ด์ด 0xAC00์—์„œ ์‹œ์ž‘๋˜๋ฏ€๋กœ ํ•œ๊ธ€์˜ ์ฒซ ๊ธ€์ž โ€˜๊ฐ€โ€™์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์ด ๋ฐ”๋กœ 0xAC 00์ด ๋œ๋‹ค. ์—ญ์‹œ ์œ„์˜๊ณต์‹์— ์˜ํ•˜๋ฉด {((0 ร— 21)+0) ร— 28 + 0 + 0xAC00} = 0xAC00์ด ๋œ๋‹ค.

์ด ๊ณต์‹์„ ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉํ•œ๋‹ค๋ฉด ๊ฒฐ๊ตญ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ๋กœ์ง์ด ๋  ๊ฒƒ์ด๋‹ค.


void IndexToUnicode (unsigned short Cho_i, Jung_i, Jong_i)

{

   unicodeValue = ((Cho_i * 21 + Jung_i)) * 28;

   if(Jong_i)

   {

    unicodeValue += Jong_i + 1;

   }

   unicodeValue += 0xAC00;

}


ํ•œ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ์ด ์žˆ๋‹ค๋ฉด ์—ญ์‹œ ์ข…์„ฑ์˜ ์ธ๋ฑ์Šค ๊ฐ’(Jong_i) ๊ณ„์‚ฐ์ธ๋ฐ, ์ข…์„ฑ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ํ…Œ์ด๋ธ” 1์— ํ‘œ๊ธฐ๋œ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ข…์„ฑ์ด ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ๋Š” Jong_i + 1์„ ์ข…์„ฑ์˜ ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š”๊ฒƒ์ด๋‹ค(์œ ๋‹ˆ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ์ž๋ชจ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๋ฆฝ๋œ ํ•œ๊ธ€์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค). ํ…Œ์ด๋ธ” 1์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์กฐํ•ฉํ˜• ๋ฌธ์ž ์„ธํŠธ์—์„œ์˜ ๊ฐ’์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


void toJohab(unsigned short Cho_i, Jung_i, Jong_i)

{

   Cho_i += 2;

   Jung_i += 3;

   if(Jung_i >= 25) Jung+=2;

     /* ์ค‘์„ฑ ์ธ๋ฑ์Šค 24, 25๋Š” ์œ ๋‹ˆ์ฝ”๋“œ์— ์ •์˜๋˜์ง€ ์•Š์•˜์Œ */

   if(Jung_i >= 18) Jung+=2;

     /* ์ค‘์„ฑ ์ธ๋ฑ์Šค 16, 17์€ ์œ ๋‹ˆ์ฝ”๋“œ์— ์ •์˜๋˜์ง€ ์•Š์•˜์Œ */

   if(Jung_i >= 9)  Jung+=2;

     /* ์ค‘์„ฑ ์ธ๋ฑ์Šค 8, 9๋Š” ์œ ๋‹ˆ์ฝ”๋“œ์— ์ •์˜๋˜์ง€ ์•Š์•˜์Œ */

   Jong_i += 2;

       

   johabValue = (1 << 15)|(Cho_i << 10)|(Jung_i << 5)|Jong_i;

}


์•ž์„œ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด์„œ ์‚ฌ์šฉํ•œ โ€˜โ€™ ์˜ ์กฐํ•ฉํ˜• ๋ฌธ์ž๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.


V = (1 << 15) | (19 << 10) | (23 << 5) | 16


๋”ฐ๋ผ์„œ โ€˜โ€™ ์— ํ• ๋‹น๋œ ์กฐํ•ฉํ˜• ๋ฌธ์ž๊ฐ’์„ ๋น„ํŠธ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉด โ€˜1100 1110 1111 0000โ€™์ด ๋˜๋ฏ€๋กœ 0xCDF0์ด ๋œ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋‚˜๋ผ์˜ ๋ฌธ์ž์„ธํŠธ๋“ค, ์œ ๋‹ˆ์ฝ”๋“œ, ์œ ๋‹ˆ์ฝ”๋“œ์™€ ASCII์˜ ๊ด€๊ณ„ ๊ทธ๋ฆฌ๊ณ  ์œ ๋‹ˆ์ฝ”๋“œ์™€ ํ•œ๊ธ€ ์กฐํ•ฉํ˜• ๋ฌธ์ž์„ธํŠธ์™€์˜๊ด€๊ณ„๋“ค์„ ์•Œ์•„๋ณด์•˜๋‹ค. ํ˜น ์–ด๋–ค ๋…์ž๋“ค์€ ์ง€๊ธˆ๊นŒ์ง€์˜ ์„ค๋ช…๋“ค์ด ์•„์ง ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ์˜ ์ดํ•ด๊ฐ€ ์•„์ง์€ ์œˆ๋„์šฐ I/O ์•„ํ‚คํ…์ฒ˜์—์˜ ์ดํ•ด์— ์žˆ์–ด์„œ ํ•„์ˆ˜๋ผ๊ณ ๋Š” ๋งํ•  ์ˆ˜๋Š” ์—†๊ธฐ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ์˜ ํ•„์š”๋ฅผ ์‹ค๊ฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตญ์ œํ™”์˜ ์ธก๋ฉด์— ์žˆ์–ด์„œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ๊ฐ€๊นŒ์šด๋ฏธ๋ž˜์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ํŠนํžˆ ์œˆ๋„์šฐ NT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋…์ž๋ผ๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ์˜ ์ดํ•ด๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜๋ผ ๋งํ•˜๊ณ  ์‹ถ๋‹ค.


Unicode์™€ ์œˆ๋„์šฐ

์œ„์—์„œ ์šฐ๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตญ์ œํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์™œ ๋ฐ”๋žŒ์งํ•œ ํ•ด๊ฒฐ์ฑ…์ธ๊ฐ€๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค. ์œ ๋‹ˆ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ์†Œํ”„ํŠธ์›จ์–ด๊ตญ์ œํ™”๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐœ๋ฐœ๋œ OS๊ฐ€ ๋ฐ”๋กœ ์œˆ๋„์šฐ NT๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์œˆ๋„์šฐ 95 ๋˜๋Š” ์œˆ๋„์šฐ 98๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์›๋ž˜๋ถ€ํ„ฐ์œ ๋‹ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ตœ์ ํ™”๋˜์–ด ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ ๋”ฐ๋ผ์„œ ์ง€์—ญํ™”๋ฅผ ๋”์šฑ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฌธ์ž๋“ค์„ ๋ณด๋‹ค ์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฏธ๋งŽ์€ ์—…์ฒด์—์„œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตญ์ œํ™”๋ฅผ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์ „ํ†ต์ ์ธ ๋ฌธ์ž์„ธํŠธ์™€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์•„์ง์€ ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€์™„์ „ํ•œ ๋ฟŒ๋ฆฌ๋ฅผ ๋‚ด๋ฆฌ์ง€ ๋ชปํ•œ ์ƒํ™ฉ์ด๋ฏ€๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ๋Š” ์ „ํ†ต์ ์ธ ๋ฌธ์ž์„ธํŠธ์™€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋™์‹œ์— ์ง€์›ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ˜„์žฌ๋กœ์„œ๋Š”์†Œํ”„ํŠธ์›จ์–ด ๊ตญ์ œํ™”์˜ ๋ฐ”๋žŒ์งํ•œ ์ ‘๊ทผ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋‘ ๋ฌธ์ž์ฒด๊ณ„๋ฅผ ๋™์‹œ์— ์ง€์›ํ•˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊ธธ์„ ์„ ํƒํ•  ์ˆ˜์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ž…์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ž๋“ค์„ ๋ณ€ํ™˜ํ•˜๋Š” ์žฅ์น˜๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋‹ค์†Œ ๊ทธ ๊ธฐ๋Šฅ์ด ๋–จ์–ด์ง€๋Š”๋‹จ์ ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์•ž์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋‚จ์€ ์ง€๋ฉด์„ ํ†ตํ•ด ์œ ๋‹ˆ์ฝ”๋“œ์™€ ์ „ํ†ต์ ์ธ ๋ฌธ์ž์„ธํŠธ๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตญ์ œํ™” ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒWIN32 ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋งŽ์€ ์œˆ๋„์šฐ32 API๊ฐ€ ์ด๋ฏธ ์œ ๋‹ˆ์ฝ”๋“œ์™€ SBCS์„ ์ง€์›ํ•˜๋„๋ก ๋”ฐ๋กœ ๊ฐœ๋ฐœ๋˜์–ด์žˆ๋‹ค. ๋ฌผ๋ก  ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๋‘ ๊ฐœ์˜๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด ANSI์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์œ ๋‹ˆ์ฝ”๋“œ API์™€ ํ˜ธํ™˜๋˜๊ฒŒํ•˜๋Š” ์ผ ๋˜ํ•œ ์ค‘์š”ํ•œ ๊ณผ์ œ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ANSI์šฉ API๋ž€ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜ API๋ฅผ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Š” API ์ฐจ์›์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ์œผ๋กœ ๋ณดํ†ต SBCS ๋˜๋Š” DBCS์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”๋‹ค. ๋ฐ˜๋ฉด์— ์œ ๋‹ˆ์ฝ”๋“œ์šฉAPI๋ผ๋Š” ๊ฐœ๋…์€ API ์ฐจ์›์—์„œ 16๋น„ํŠธ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐœ๋ฐœ๋œ API๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์œˆ๋„์šฐ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋‹ค์ด์–ผ๋กœ๊ทธ๋ฐ•์Šค MessageBox()๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ๋Š” โ€˜MessageBox()โ€™๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹ค์ œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€์‚ฌ์šฉํ•˜๋Š” MessageBox() ๋ฒ„์ „์€ MessageBoxA() ๋˜๋Š” MessageBoxW() ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค. ์–ด๋А ๋ฒ„์ „์„์‚ฌ์šฉํ•˜๋А๋ƒ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ 16๋น„ํŠธ ์ฝ”๋“œ์ธ ์œ ๋‹ˆ์ฝ”๋“œ ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€ ์•„๋‹ˆ๋ฉด 8๋น„ํŠธ ์ฝ”๋“œ ANSI ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€์—๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํŒŒ์ผ์˜ ๊ด€์ ์—์„œ ๋ณผ๋•Œ, ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€? ๋ฌผ๋ก  ์ง€๊ธˆ๊นŒ์ง€์˜ ์„ค๋ช…์„ ์ข…ํ•ฉํ•ด ๋ณผ ๋•Œ ์œ ๋‹ˆ์ฝ”๋“œ๋Š” 16๋น„ํŠธ๋ฅผ์‚ฌ์šฉํ•˜๋ฏ€๋กœ 8๋น„ํŠธ ๋ฒ„์ „์— ๋น„ํ•ด ๋‘ ๋ฐฐ์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋จ์„ ์•Œ๊ณ ์žˆ๋‹ค. ๋˜ํ•œ OS์˜ ๋ฌธ์ž์ฒ˜๋ฆฌ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋‹ค๋ฅผ๋•Œ๋Š” ๋ฌธ์ž ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ๋ฉด์—์„œ ์ด๋ก ์ ์œผ๋กœ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ์„ ์„ค๋ช…ํ•œ ๋ฐ” ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค์Œ๊ณผ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž.


char charV;

char * pch;

์œˆ๋„์šฐ32 ์•„ํ‚คํ…์ฒ˜์—์„œ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์˜ charV๋Š” 1 ๋ฐ”์ดํŠธ ๋ณ€์ˆ˜๋กœ์„œ ๊ทธ ๊ฐ’์€ โ€˜\0โ€™๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.์—ฌ๊ธฐ์„œ charV์— โ€˜Aโ€™๋ฅผ ํ• ๋‹นํ•˜๋ฉด (charV=โ€˜Aโ€™), charV๋Š” โ€˜Aโ€™์˜ ์ฝ”๋“œ๊ฐ’์ธ 0x41๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋‘ ๋ฒˆ์งธ์ค„์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํŠธ๋ฅผ pch๋กœ ์ •์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, pch๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋Š” ์œˆ๋„์šฐ32 ์•„ํ‚คํ…์ฒ˜ ์ƒ4๋ฐ”์ดํŠธ(32๋น„ํŠธ)๊ฐ€ ๋œ๋‹ค. pch=โ€œABCDโ€์ฒ˜๋Ÿผ ํ–ˆ์„ ๋•Œ โ€˜ABCDโ€™๋Š” 5๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด(โ€˜0x41โ€™, โ€˜0x42โ€™,โ€˜0x43โ€™, โ€˜0x44โ€™, โ€˜0x00โ€™)๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค. ํ•œํŽธ, ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ charV๋Š” 2 ๋ฐ”์ดํŠธ ๋ณ€์ˆ˜๋กœ๋ณ€ํ•˜๋ฉฐ ๋”ฐ๋ผ์„œ ๊ทธ ๊ฐ’์€ 0x0041์ด ๋˜๋ฉฐ, ํฌ์ธํ„ฐ๋กœ ์ •์˜๋œ pch๋Š” ๊ทธ ์ž์‹ ์˜ ํฌ๊ธฐ๋Š” ๋ณ€ํ•จ์—†์ด 4๋ฐ”์ดํŠธ์ด๋‚˜ โ€˜ABCDโ€™์˜ ๊ฐ’์€โ€˜0x0041โ€™, โ€˜0x0042โ€™, โ€˜0x0043โ€™, โ€˜0x0044โ€™, โ€˜0x0000โ€™๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ 12๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด์ด๋˜๋Š” ์…ˆ์ด๋‹ค. ANSI ๋ฌธ์ž์™€ UNICODE ์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ์˜ ์ด๋Ÿฌํ•œ ์ฐจ์ด๋Š” ์•ฝ๊ฐ„์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์˜ ๋ณ€ํ™”๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ž…, ์ถœ๋ ฅ ์†Œ์Šค๋กœ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ๋Š” ์œˆ๋„์šฐ NT์—์„œ ANSI ์ŠคํŠธ๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๊ทธ ์ˆœ์„œ๋ฅผ๋ณด๋ฉด ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


1. ANSI ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ANSI ๋ฌธ์ž์—ด์„ ์œˆ๋„์šฐ NT์˜ ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด๋‚ธ๋‹ค

2. ์œˆ๋„์šฐ NT์˜ ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์€ ์ž…๋ ฅ๋œ ANSI ๋ฌธ์ž์—ด์„ 16๋น„ํŠธ ๋ฌธ์ž์—ด ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์œˆ๋„์šฐ NT์˜ OS๋กœ ๋ณด๋‚ธ๋‹ค.

3. ์œˆ๋„์šฐ OS๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„ ๊ทธ ๋ฐ˜ํ™˜๊ฐ’์„ ์œˆ๋„์šฐ NT ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด๋‚ธ๋‹ค

4. ์œˆ๋„์šฐ NT ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์€ ๋‹ค์‹œ ์ด ๊ฐ’์„ ANSI ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณด๋‚ธ๋‹ค. ์ด ๋•Œ ANSI ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์ดANSI๊ฐ’์„ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์œˆ๋„์šฐ NT ์‹œ์Šคํ…œ์€ ์œˆ๋„์šฐ NT OS์—์„œ ๋ฐ˜ํ™˜๋ฐ›์€ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์„ ANSI ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ANSI์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.


์œˆ๋„์šฐ NT๋Š” native unicode, ์ฆ‰ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์ฒ˜์Œ๋ถ€ํ„ฐ ๋””์ž์ธ๋œ OS์ด๋‹ค. ์œˆ๋„์šฐ NT๋Š” ๋ฌธ์ž์—ด์ฒ˜๋ฆฌ์— ์žˆ์–ด์„œ 16๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‚˜ ์•„์ง ๋Œ€๋ถ€๋ถ„์ด 8๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ NT๋Š” ์œ„์—์„œ ๋‚˜์—ดํ•œ๋Œ€๋กœ ๋ณ€ํ™˜๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ์…ˆ์ด๋‹ค.

์œˆ๋„์šฐ 9x๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ˜„ ์‹œ์ ์—์„œ์˜ ๊ฐ€์žฅ ๋ฐ”๋žŒ์งํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์—ญ์‹œ ANSI์™€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋™์‹œ์—์ง€์›ํ•˜๋Š” ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ด์ œ ๋‚จ์€ ์ง€๋ฉด์„ ํ†ตํ•ด SBCS์™€ ์œ ๋‹ˆ์ฝ”๋“œ์™€์˜ ๊ด€๊ณ„๋ฅผ API ์ฐจ์›์—์„œ ์‚ดํŽด๋ณด๋ฉด์„œ ์œ ๋‹ˆ์ฝ”๋“œ,DBCS ๊ทธ๋ฆฌ๊ณ  SBCS๊ณผ ๊ด€๋ จ๋œ API๋“ค์„ ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.


Uncode ํ”„๋กœ๊ทธ๋žจ

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

ยทANSI ๋ฒ„์ „ : ANSI ๋ฌธ์ž๋งŒ ์ˆ˜์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

ยทUNICODE ๋ฒ„์ „ : Unicode ๋ฌธ์ž๋งŒ ์ˆ˜์šฉํ•˜๋Š” ๋ฒ„์ „

ยทํ†ตํ•ฉ๋ฒ„์ „ : ์œ ๋‹ˆ์ฝ”๋“œ์™€ ANSI๋ฅผ ๋™์‹œ์— ์ˆ˜์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ    


์–ด๋–ค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋“ ์ง€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋กœ์ง์€ ๋งํ•  ํ•„์š”์—†์ด ๋™์ผํ•˜๋‹ค. ๋‹ค๋งŒ ๋‹ค๋ฅธ ์ ์ด๋ผ๋ฉด ์œ ๋‹ˆ์ฝ”๋“œ์—์„œ๋Š” 16๋น„ํŠธ๋กœ ๋ฌธ์ž๋ฅผ์ฒ˜๋ฆฌํ•˜๋ฉฐ(ANSI ๋ฒ„์ „), ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ„์ „ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”ํ•œ head ํŒŒ์ผ์„ ๋ง๋ถ™์ด๋ฉฐ(UNICODE๋ฒ„์ „) ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ํŒŒ์ผ์— _UNIC ODE๋ฅผ ์ •์˜ํ•ด ์ฃผ๋Š” ๊ฒƒ(ํ†ตํ•ฉ๋ฒ„์ „) ๋“ฑ์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์œˆ๋„์šฐ32 API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌํ•˜๋‚˜์˜ ์†Œ์Šคํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์œ ๋‹ˆ์ฝ”๋“œ์™€ ANSI I/O๋ฅผ ๋™์‹œ์— ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š”์ง€๋ฅผ ์ฃผ๋กœ Run-Time์—์„œ ์‚ฌ์šฉ๋˜๋Š”๋ฌธ์ž์—ด์˜ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ API๋“ค์„ ์•Œ์•„๋ณด๊ณ  ๋์œผ๋กœ i18n๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ WIN32 API๋“ค์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์šฐ์„  ๊ฐ€์žฅ ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ์ดํ•ดํ•ด์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ์œ ๋‹ˆ์ฝ”๋“œ ๋˜๋Š” Wide Character(WC)๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š”โ€˜WCHAR.Hโ€™ ํŒŒ์ผ์ด๋‹ค. C๋‚˜ C++์—์„œ ์ •์˜ํ•˜๋Š” WC๋Š” ๋‹ค๋ฅธ ์–ด๋А ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ •์˜ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹จ์ˆœํ•˜๋‹ค.


typedef unsigned short wchar_t;

wchar_t c = Lโ€˜Aโ€™์—์„œ, c์˜ ๊ฐ’์€ 0x0041์ด ๋œ๋‹ค. CPU์—์„œ 0x0041์ด ์ €์žฅ๋  ๋•Œ๋Š” LSB(LeastSignifica nt Byte)์„ ๋จผ์ € ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ 0x0041์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ์‚ฌ์‹ค โ€˜41 00โ€™๋กœ ์ €์žฅ๋œ๋‹ค. ๋˜ํ•œwchar_t * p = Lโ€œABCDโ€;๋ผ๊ณ  ์ •์˜ํ–ˆ๋‹ค๋ฉด CPU๊ฐ€ p์˜ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•  ๋•Œ๋Š” โ€˜4100 4200 43004400โ€™์ฒ˜๋Ÿผ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์œ ์˜ํ•ด์•ผ ํ•  ์ ์€ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์„ WC๋กœ ์ •์˜ํ–ˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ WC๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋ ‡์ง€์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ’ 41์„ ์ฝ์€ ํ›„ 00๊ฐ€ ๋‹ค์Œ ๋ฌธ์ž๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ๋ฌธ์ž์—ด์˜ ๋์ด ๋˜์–ด ๋ฒ„๋ฆฌ๋Š” ์…ˆ์ด๋‹ค. ๋„ˆ๋ฌด ๋‹น์—ฐํ•œ ์ด์น˜์ด์ง€๋งŒ์ž์นซ ์ž˜๋ชปํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๊ธฐ๋„ ํ•˜๋‹ค. ์žฌ๋ฏธ ์‚ผ์•„ ๋‹ค์Œ ์ฝ”๋”ฉ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด์ž.


wchar_t * p = Lโ€œABCDโ€;

    printf(โ€œ%dโ€, strlen(p));

strlen() ๋Ÿฐ-ํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” WC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ณ ์•ˆ๋˜์ง€ ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ์ถœ๋ ฅ๊ฐ’์€ 1์ด ๋  ๊ฒƒ์ด๋‹ค.


int strlen (const char * str)

       {

           int length = 0;

           while( *str++ )

                   ++length;

           return( length );

}

stelen()์„ wcslen()์œผ๋กœ ๋Œ€์น˜์‹œํ‚ค๋ฉด ์ œ ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. wcslen()์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 2 ๋ฐ”์ดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ ์ž…๋ ฅ๋˜๋Š” ๋ฌธ์ž์˜ ์„ฑ์งˆ์— ๋ฌด๊ด€ํ•˜๊ฒŒ 2 ๋ฐ”์ดํŠธ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.  


size_t __cdecl wcslen(const wchar_t *wcs)

{

    const wchar_t * eos = wcs;

    while(*eos++);

    return ((size_t) (eos - wcs -1));

}


๋”ฐ๋ผ์„œ strlen()์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ˜๋Œ€์˜ ์˜ค๋ฅ˜๊ฐ€ wcslen()์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, strlen()๋ฅผ ์ •์ž‘์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ณณ์— wcslen()์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๊ฐ’์ด ๋ฐ˜์œผ๋กœ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ƒํ™ฉ์— ๋”ฐ๋ผstrlen()์ด๋‚˜ wcslen()์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด (WC์™€ SBCS์˜ ๋‘ ๊ฐ€์ง€ ํ™˜๊ฒฝ์—์„œ ํ•˜๋‚˜์˜ ์†Œ์Šค์ฝ”๋“œ๋กœ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด), ๋‹ค์‹œ ๋งํ•ด์„œ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตญ์ œํ™”๋ฅผ ์ด๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋Š”๊ฐ€?

์ด์— ๋Œ€ํ•œ ๋‹ต์€ ๋ฐ”๋กœ ํ†ตํ•ฉํ˜• ๋ฒ„์ „์˜ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ—ค๋“œํŒŒ์ผ์€ TCHAR.H์ด๋‹ค. โ€˜#_UNICODEโ€™์™€โ€˜#define TCHAR.Hโ€™์ด ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์— ์ •์˜๋˜์—ˆ์„ ๋•Œ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ ์œ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ˆ˜์ •ํ•ด ์ฃผ๋ฏ€๋กœ_UNICODE๊ฐ€ ์ •์˜๋˜์—ˆ์œผ๋ฉด _tstrlen()๋Š” wcslen()๋กœ ์‹คํ–‰ํ•˜๊ณ , _UNCODE๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด_tstrlen()๋Š” strlen()๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.


#define _UNICODE

    #include <TCHAR.H>


    wchar_t * p = Lโ€œABCDโ€;

    printf(โ€œ%dโ€, _tstrlen(p));


๋ฌธ์ž์—ด์„ WC ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ ๋ฐ”๋กœ ์•ž์— L์„ ๋ง๋ถ™์—ฌ ์ฃผ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•œ ๋ฐ” ์žˆ๋‹ค. ํ•˜์ง€๋งŒ๋ฐ˜๋“œ์‹œ WC๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฌธ์ž์—ด ์ €์žฅ ๋ฐฉ๋ฒ• ์—ญ์‹œ ์œ„์—์„œ ์„ค๋ช…ํ•œ Run-Time Library์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•œ๋ฐ, TEXT()๊ฐ€ ๋ฐ”๋กœ ๊ทธ๊ฒƒ์ด๋‹ค.


ifdef UNICODE #define __T(x) L##x

else #define __T(x) x

. . .

#define _T(x)  __T(x)

. . .

#define _TEXT(x) __T(x)

. . .

#define TEXT(x) _TEXT(x)

์œ„์˜ ๋กœ์ง์€ ๋‹จ์ˆœํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, UNCODE๊ฐ€ ์ •์˜๋˜์—ˆ์œผ๋ฉด __T(โ€œABCEโ€)๋ฅผ Lโ€œABCDโ€๋กœ ๋ณ€ํ™˜ํ•˜๊ณ UNICODE๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜์œผ๋ฉด __T(โ€œABCDโ€)๋Š” ๊ธฐ๋ณธํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ง€์‹œ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ธฐ๋ณธํ˜•ํƒœ๋ž€ ANSI ๋ฌธ์ž์„ธํŠธ๋ฅผ์˜๋ฏธํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  __T๋Š” _T ๋˜๋Š” _TEXT๋กœ ๋ณ€ํ™˜๋˜๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๋งคํฌ๋กœ๋Š” _TEXT()์˜ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.๋งจ ๋งˆ์ง€๋ง‰ ์ค„์˜ โ€˜define TEXT(x) _TEXT(x)โ€™๋Š” winnt.h์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ๋Š”๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒโ€˜windows.hโ€™๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฑฑ์ •ํ•  ํ•„์š”์—†์ด ๋ฌธ์ž์—ด์„ ํ•ญ์ƒ TEXT๋กœ ๊ฐ์‹ธ์ฃผ๋ฏ€๋กœ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜์–ด์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์—์„œ ์‚ฌ์šฉ๋œ ๋กœ์ง์„ ์—ผ๋‘์— ๋‘๊ณ  ๋‹ค์‹œ ์ˆ˜์ •ํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


#define _UNICODE

#include <TCHAR.H>


TCHAR * p = TEXT(โ€œABCDโ€);


printf(โ€œ%dโ€, _tstrlen(p));


๋…์ž์˜ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

๋ณธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ํ˜•ํƒœ๋กœ ์ˆ˜์ •ํ•ด ๊ฐ€๋ฉด์„œ ๋ณธ ๊ธ€์—์„œ ๋ช…์‹œ๋œ ํ”„๋กœ๊ทธ๋žจ ๊ตญ์ œํ™”์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๋“ค์„ ํ•˜๋‚˜์”ฉ ์‹ค์Šตํ•ด ๋ณด๊ธฐ๋ฐ”๋ž€๋‹ค.  


#define _UNICODE


#include <TCHAR.H>


#include <windows.h>


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,

        LPSTR lpCmdLine, int nCmdShow)

{

    TCHAR *wc = TEXT(โ€œABCDโ€);

    TCHAR msg[80];


    wsprintf(msg,โ€œ_tcslen=%u, sizeof(msg)=%uโ€,

          _tcslen(wc),sizeof(msg));

    MessageBox(NULL, msg, โ€œUNICODEโ€, MB_OK);


    return 0;

}


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


/* Generic types */

#ifdef UNICODE

  typedef wchar_t TCHAR;

 #else

  typedef unsigned char TCHAR;

#endif

typedef TCHAR * LPTSTR, *LPTCH;


/* 8-bit character specific */

typedef unsigned char CHAR;

typedef CHAR *LPSTR, *LPCH;


/* Unicode specific (wide characters) */

typedef unsigned wchar_t WCHAR;

typedef WCHAR *LPWSTR, *LPWCH;

๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” Win32 API๋“ค์€ ๋Œ€๊ฐœ๊ฐ€ ๋‘๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ ํ•˜๋‚˜๋Š” API ์ด๋ฆ„์ด A๋กœ ๋๋‚˜๋Š”๊ฒƒ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ทธ ์ด๋ฆ„์ด W๋กœ ๋๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ A๋Š” ANSI ํ‘œ์ค€์„ ์˜๋ฏธํ•˜๊ณ  W๋Š” Wide ๋ฌธ์ž, ์ฆ‰ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ†ตํ•ฉํ˜• API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  xxxA() ๋˜๋Š”xxxW()์™€ ๊ฐ™์ด ํŠน์ • API๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ถ€๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค. ํ•„์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์ด์œ  ๋•Œ๋ฌธ์— ์–ธ์ œ๋‚˜ ํ†ตํ•ฉํ˜• API๋ฅผ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒํ•˜๊ณ  ์‹ถ๋‹ค.


ยท์ฝ”๋“œ์˜ ํฌํŒ…์ด ์‰ฝ๋‹ค (WIN NT, Win9x)

ยท์ฝ”๋”ฉ์ด ์šฉ์ดํ•˜๋‹ค

ยทํ”„๋กœ๊ทธ๋žจ์„ ๊ตญ์ œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค


์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ํฌํŒ…์ด๋ž€ ๋‹จ์ˆœํžˆ ์œˆ๋„์šฐ NT์™€ ์œˆ๋„์šฐ 95/98 ๊ฐ„์˜ ํฌํŒ…์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด์ปดํŒŒ์ผ ํ•  ๋•Œ, ์œˆ๋„์šฐ NT์šฉ์ด๋ฉด UNICODE๋ฅผ ์ •์˜ํ•ด ์ฃผ๊ณ , 95/8์šฉ์ด๋ฉด UINCODE๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋กœ์ธํ•ด ํ†ตํ•ฉํ˜•API๋“ค์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ ์ ˆํ•œ API๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ฝ”๋”ฉ ๋˜ํ•œ ์šฉ์ดํ•˜๊ฒŒ๋˜๋ฉฐ, ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ์ธ์ฝ”๋”ฉ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตญ์ œํ™”๋ฅผ ์‰ฝ๊ฒŒ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.๋ฌธ์ž์—ด์˜ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ API๋“ค์˜ ๋งคํฌ๋กœ๋Š” ๋Œ€๋žต lstrcatA(W), lstrc mp(wcscmp),lstrcmpi(wcscmpi), lstrcpy, lstrlen, lstrcmp and lstrcmpi ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ์ด ์ค‘lstrcatA(W), lstrcmp(wcscmp), lstrcmpi(wcscm pi), lstrcpy, lstrlen์€ ๊ฐ™์€์ผ์„ ํ•˜๋Š” ๋‘๊ฐœ์˜ API๊ฐ€ ์žˆ์œผ๋ฉฐ, lstrcmp and lstrcmpi์€ CompareString()๋ฅผ ๋ถˆ๋Ÿฌ UNICODE์™€ANSI๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

์œ„์˜ ์˜ˆ์ œ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์— ๋‚˜์—ด๋œ API ๋งคํฌ๋กœ๋“ค์„ ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋ฐ”๋ž€๋‹ค. ์•ž์„œ ์•ฝ์†ํ•œ ๋Œ€๋กœ, ์œ ๋‹ˆ์ฝ”๋“œ ๋ฐ ANSI์™€ ๊ด€๋ จ๋œ WIN32 API๋“ค ์ค‘ ์šฐ๋ฆฌ๊ฐ€ ์ดํ•ดํ•˜์—ฌ์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ API๋“ค์„ ๋‚˜์—ดํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


GetCPInfo

MultiByteToWideChar

WideCharToMultiByte

IsTextUnicode

IsDBCSLeadByte

IsWindowUnicode

CharNext,

CharPrev

GetInfo()๋Š” CPINFO ์ŠคํŠธ๋Ÿญ์ฒ˜์— ๋กœ์ผ€์ผ์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ฑ„์›Œ์ฃผ๋ฉฐ CPINFO์— ํฌํ•จ๋˜๋Š” ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


struct _cpinfo {  

    UINT MaxCharSize;

    BYTE DefaultChar[MAX_DEFAULTCHAR];

    BYTE LeadByte[MAX_LEADBYTES];

} CPINFO;


MaxCharSize๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ์ค‘์ธ ์ฝ”๋“œํŽ˜์ด์ง€ ๋‚ด์—์„œ์˜ ๋ฌธ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ์ฝ”๋“œํŽ˜์ด์ง€ 949ํ•œ๊ธ€ ์™„์„ฑํ˜•์˜ ๊ฒฝ์šฐ๋Š” SBCS๊ณผ DBCS์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ MaxCharSize๋Š” ๋‘ ๋ฐ”์ดํŠธ, ์ฆ‰ 2๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.DefaultChar๋ž€ ๋‹ค๋ฅธ ๋ฌธ์ž ์„ธํŠธ๊ฐ€ ํ˜„ ์‹œ์Šคํ…œ์˜ ์ฝ”๋“œํŽ˜์ด์ง€๋กœ ๋ณ€ํ™˜๋  ๋•Œ ์‚ฌ์šฉํ•  ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด๊ฒƒ์€ WideCharToMultiByte์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. LeadByte๋ž€ ์‚ฌ์šฉ์ค‘์ธ ์ฝ”๋“œ ํŽ˜์ด์ง€์˜ LeadByte ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚˜๋ฉฐLeadByte๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” LeadByte[]๋Š” NULL๋กœ ์ฑ„์›Œ์ง„๋‹ค. MultiByteToWideChar์™€WideCharToMulti Byte๋Š” SBCS๊ณผ DBCS์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž๋“ค์„ ๋งคํ•‘ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ,IsTextUnicode๋Š” ๋Œ€์ƒ ๋ฌธ์ž์—ด ์ค‘ UNICODE๊ฐ€ ํฌํ•จ๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด๋ คํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. WIN9x์˜ ๊ฒฝ์šฐ๋Š”UNICODE๋ฅผ ๊ฑฐ์˜ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณธ API๋Š” ์‹œ์Šคํ…œ ์ฐจ์›์—์„œ ๋ฌด์‹œ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  IsDBC SLeadByte๋Š” ๋Œ€์ƒ ๋ฌธ์ž๊ฐ€DBCS์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์ธ์ง€๋ฅผ ์•Œ๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, IsWindow Unicode๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œˆ๋„์šฐ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฌธ์ž์—ด์˜ ํƒ€์ž…์ด UNICODE์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•œ ์ˆ˜ ์žˆ๋‹ค.

๋์œผ๋กœ CharNext์™€ CharPrev๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์— ์˜ค๋Š” ๋ฌธ์ž๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‘ API๋Š” WIN16ANSI C๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด AnsiNext์™€ AnsiPrev๋ฅผ ์—ฐ์ƒํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. WIN32์—์„œ๋Š” ์ด์ „ ์ฝ”๋“œ์™€์˜ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.


#define AnsiNext CharNext

#define AnsiPrev CharPrev

๋ฐ˜์‘ํ˜•

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

๋ฐ˜์‘ํ˜•
ํ•œ๊ธ€์ฝ”๋“œํ‘œ
EUC-KR(KSC 5601)



B0

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๊ฐ€  ๊ฐ  ๊ฐ„  ๊ฐ‡  ๊ฐˆ  ๊ฐ‰  ๊ฐŠ  ๊ฐ  ๊ฐ‘  ๊ฐ’  ๊ฐ“  ๊ฐ”  ๊ฐ•  ๊ฐ–  ๊ฐ—

  ๊ฐ™  ๊ฐš  ๊ฐ›  ๊ฐœ  ๊ฐ  ๊ฐ   ๊ฐค  ๊ฐฌ  ๊ฐญ  ๊ฐฏ  ๊ฐฐ  ๊ฐฑ  ๊ฐธ  ๊ฐน  ๊ฐผ  ๊ฑ€

  ๊ฑ‹  ๊ฑ  ๊ฑ”  ๊ฑ˜  ๊ฑœ  ๊ฑฐ  ๊ฑฑ  ๊ฑด  ๊ฑท  ๊ฑธ  ๊ฑบ  ๊ฒ€  ๊ฒ  ๊ฒƒ  ๊ฒ„  ๊ฒ…

  ๊ฒ†  ๊ฒ‰  ๊ฒŠ  ๊ฒ‹  ๊ฒŒ  ๊ฒ  ๊ฒ”  ๊ฒœ  ๊ฒ  ๊ฒŸ  ๊ฒ   ๊ฒก  ๊ฒจ  ๊ฒฉ  ๊ฒช  ๊ฒฌ

  ๊ฒฏ  ๊ฒฐ  ๊ฒธ  ๊ฒน  ๊ฒป  ๊ฒผ  ๊ฒฝ  ๊ณ  ๊ณ„  ๊ณˆ  ๊ณŒ  ๊ณ•  ๊ณ—  ๊ณ   ๊ณก  ๊ณค

  ๊ณง  ๊ณจ  ๊ณช  ๊ณฌ  ๊ณฏ  ๊ณฐ  ๊ณฑ  ๊ณณ  ๊ณต  ๊ณถ  ๊ณผ  ๊ณฝ  ๊ด€  ๊ด„  ๊ด†

B1

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๊ดŒ  ๊ด  ๊ด  ๊ด‘  ๊ด˜  ๊ดœ  ๊ด   ๊ดฉ  ๊ดฌ  ๊ดญ  ๊ดด  ๊ดต  ๊ดธ  ๊ดผ  ๊ต„

  ๊ต…  ๊ต‡  ๊ต‰  ๊ต  ๊ต”  ๊ต˜  ๊ตก  ๊ตฃ  ๊ตฌ  ๊ตญ  ๊ตฐ  ๊ตณ  ๊ตด  ๊ตต  ๊ตถ  ๊ตป

  ๊ตผ  ๊ตฝ  ๊ตฟ  ๊ถ  ๊ถ‚  ๊ถˆ  ๊ถ‰  ๊ถŒ  ๊ถ  ๊ถœ  ๊ถ  ๊ถค  ๊ถท  ๊ท€  ๊ท  ๊ท„

  ๊ทˆ  ๊ท  ๊ท‘  ๊ท“  ๊ทœ  ๊ท   ๊ทค  ๊ทธ  ๊ทน  ๊ทผ  ๊ทฟ  ๊ธ€  ๊ธ  ๊ธˆ  ๊ธ‰  ๊ธ‹

  ๊ธ  ๊ธ”  ๊ธฐ  ๊ธฑ  ๊ธด  ๊ธท  ๊ธธ  ๊ธบ  ๊น€  ๊น  ๊นƒ  ๊น…  ๊น†  ๊นŠ  ๊นŒ  ๊น

  ๊นŽ  ๊น  ๊น”  ๊น–  ๊นœ  ๊น  ๊นŸ  ๊น   ๊นก  ๊นฅ  ๊นจ  ๊นฉ  ๊นฌ  ๊นฐ  ๊นธ

B2

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๊นน  ๊นป  ๊นผ  ๊นฝ  ๊บ„  ๊บ…  ๊บŒ  ๊บผ  ๊บฝ  ๊บพ  ๊ป€  ๊ป„  ๊ปŒ  ๊ป  ๊ป

  ๊ป  ๊ป‘  ๊ป˜  ๊ป™  ๊ปœ  ๊ปจ  ๊ปซ  ๊ปญ  ๊ปด  ๊ปธ  ๊ปผ  ๊ผ‡  ๊ผˆ  ๊ผ  ๊ผ  ๊ผฌ

  ๊ผญ  ๊ผฐ  ๊ผฒ  ๊ผด  ๊ผผ  ๊ผฝ  ๊ผฟ  ๊ฝ  ๊ฝ‚  ๊ฝƒ  ๊ฝˆ  ๊ฝ‰  ๊ฝ  ๊ฝœ  ๊ฝ  ๊ฝค

  ๊ฝฅ  ๊ฝน  ๊พ€  ๊พ„  ๊พˆ  ๊พ  ๊พ‘  ๊พ•  ๊พœ  ๊พธ  ๊พน  ๊พผ  ๊ฟ€  ๊ฟ‡  ๊ฟˆ  ๊ฟ‰

  ๊ฟ‹  ๊ฟ  ๊ฟŽ  ๊ฟ”  ๊ฟœ  ๊ฟจ  ๊ฟฉ  ๊ฟฐ  ๊ฟฑ  ๊ฟด  ๊ฟธ  ๋€€  ๋€  ๋€„  ๋€Œ  ๋€

  ๋€”  ๋€œ  ๋€  ๋€จ  ๋„  ๋…  ๋ˆ  ๋Š  ๋Œ  ๋Ž  ๋“  ๋”  ๋•  ๋—  ๋™  

B3

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋  ๋ผ  ๋ฝ  ๋‚€  ๋‚„  ๋‚Œ  ๋‚  ๋‚  ๋‚‘  ๋‚˜  ๋‚™  ๋‚š  ๋‚œ  ๋‚Ÿ  ๋‚ 

  ๋‚ก  ๋‚ข  ๋‚จ  ๋‚ฉ  ๋‚ซ  ๋‚ฌ  ๋‚ญ  ๋‚ฎ  ๋‚ฏ  ๋‚ฑ  ๋‚ณ  ๋‚ด  ๋‚ต  ๋‚ธ  ๋‚ผ  ๋ƒ„

  ๋ƒ…  ๋ƒ‡  ๋ƒˆ  ๋ƒ‰  ๋ƒ  ๋ƒ‘  ๋ƒ”  ๋ƒ˜  ๋ƒ   ๋ƒฅ  ๋„ˆ  ๋„‰  ๋„‹  ๋„Œ  ๋„  ๋„’

  ๋„“  ๋„˜  ๋„™  ๋„›  ๋„œ  ๋„  ๋„ฃ  ๋„ค  ๋„ฅ  ๋„จ  ๋„ฌ  ๋„ด  ๋„ต  ๋„ท  ๋„ธ  ๋„น

  ๋…€  ๋…  ๋…„  ๋…ˆ  ๋…  ๋…‘  ๋…”  ๋…•  ๋…˜  ๋…œ  ๋…   ๋…ธ  ๋…น  ๋…ผ  ๋†€  ๋†‚

  ๋†ˆ  ๋†‰  ๋†‹  ๋†  ๋†’  ๋†“  ๋†”  ๋†˜  ๋†œ  ๋†จ  ๋‡Œ  ๋‡  ๋‡”  ๋‡œ  ๋‡

B4

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋‡Ÿ  ๋‡จ  ๋‡ฉ  ๋‡ฌ  ๋‡ฐ  ๋‡น  ๋‡ป  ๋‡ฝ  ๋ˆ„  ๋ˆ…  ๋ˆˆ  ๋ˆ‹  ๋ˆŒ  ๋ˆ”  ๋ˆ•

  ๋ˆ—  ๋ˆ™  ๋ˆ   ๋ˆด  ๋ˆผ  ๋‰˜  ๋‰œ  ๋‰   ๋‰จ  ๋‰ฉ  ๋‰ด  ๋‰ต  ๋‰ผ  ๋Š„  ๋Š…  ๋Љ

  ๋А  ๋Š‘  ๋Š”  ๋Š˜  ๋Š™  ๋Šš  ๋Š   ๋Šก  ๋Šฃ  ๋Šฅ  ๋Šฆ  ๋Šช  ๋Šฌ  ๋Šฐ  ๋Šด  ๋‹ˆ

  ๋‹‰  ๋‹Œ  ๋‹  ๋‹’  ๋‹˜  ๋‹™  ๋‹›  ๋‹  ๋‹ข  ๋‹ค  ๋‹ฅ  ๋‹ฆ  ๋‹จ  ๋‹ซ  ๋‹ฌ  ๋‹ญ

  ๋‹ฎ  ๋‹ฏ  ๋‹ณ  ๋‹ด  ๋‹ต  ๋‹ท  ๋‹ธ  ๋‹น  ๋‹บ  ๋‹ป  ๋‹ฟ  ๋Œ€  ๋Œ  ๋Œ„  ๋Œˆ  ๋Œ

  ๋Œ‘  ๋Œ“  ๋Œ”  ๋Œ•  ๋Œœ  ๋”  ๋•  ๋–  ๋˜  ๋›  ๋œ  ๋ž  ๋Ÿ  ๋ค  ๋ฅ

B5

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋ง  ๋ฉ  ๋ซ  ๋ฎ  ๋ฐ  ๋ฑ  ๋ด  ๋ธ  ๋Ž€  ๋ށ  ๋Žƒ  ๋Ž„  ๋Ž…  ๋ŽŒ  ๋ސ

  ๋Ž”  ๋Ž   ๋Žก  ๋Žจ  ๋Žฌ  ๋„  ๋…  ๋ˆ  ๋‹  ๋Œ  ๋Ž  ๋  ๋”  ๋•  ๋—  ๋™

  ๋›  ๋  ๋   ๋ค  ๋จ  ๋ผ  ๋  ๋˜  ๋œ  ๋   ๋จ  ๋ฉ  ๋ซ  ๋ด  ๋‘  ๋‘‘

  ๋‘”  ๋‘˜  ๋‘   ๋‘ก  ๋‘ฃ  ๋‘ฅ  ๋‘ฌ  ๋’€  ๋’ˆ  ๋’  ๋’ค  ๋’จ  ๋’ฌ  ๋’ต  ๋’ท  ๋’น

  ๋“€  ๋“„  ๋“ˆ  ๋“  ๋“•  ๋“œ  ๋“  ๋“   ๋“ฃ  ๋“ค  ๋“ฆ  ๋“ฌ  ๋“ญ  ๋“ฏ  ๋“ฑ  ๋“ธ

  ๋””  ๋”•  ๋”˜  ๋”›  ๋”œ  ๋”ค  ๋”ฅ  ๋”ง  ๋”จ  ๋”ฉ  ๋”ช  ๋”ฐ  ๋”ฑ  ๋”ด  ๋”ธ

B6

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

  ํ…ญ  ๋•€  ๋•  ๋•ƒ  ๋•„  ๋•…  ๋•‹  ๋•Œ  ๋•  ๋•  ๋•”  ๋•œ  ๋•  ๋•Ÿ  ๋•   ๋•ก

  ๋–   ๋–ก  ๋–ค  ๋–จ  ๋–ช  ๋–ซ  ๋–ฐ  ๋–ฑ  ๋–ณ  ๋–ด  ๋–ต  ๋–ป  ๋–ผ  ๋–ฝ  ๋—€  ๋—„

  ๋—Œ  ๋—  ๋—  ๋—  ๋—‘  ๋—˜  ๋—ฌ  ๋˜  ๋˜‘  ๋˜”  ๋˜˜  ๋˜ฅ  ๋˜ฌ  ๋˜ด  ๋™ˆ  ๋™ค

  ๋™จ  ๋šœ  ๋š  ๋š   ๋šค  ๋šซ  ๋šฌ  ๋šฑ  ๋›”  ๋›ฐ  ๋›ด  ๋›ธ  ๋œ€  ๋œ  ๋œ…  ๋œจ

  ๋œฉ  ๋œฌ  ๋œฏ  ๋œฐ  ๋œธ  ๋œน  ๋œป  ๋„  ๋ˆ  ๋Œ  ๋”  ๋•  ๋   ๋ค  ๋จ  ๋ฐ

  ๋ฑ  ๋ณ  ๋ต  ๋ผ  ๋ฝ  ๋ž€  ๋ž„  ๋žŒ  ๋ž  ๋ž  ๋ž  ๋ž‘  ๋ž’  ๋ž–  ๋ž—

B7

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

  ํ‡  ๋ž˜  ๋ž™  ๋žœ  ๋ž   ๋žจ  ๋žฉ  ๋žซ  ๋žฌ  ๋žญ  ๋žด  ๋žต  ๋žธ  ๋Ÿ‡  ๋Ÿ‰  ๋Ÿฌ

  ๋Ÿญ  ๋Ÿฐ  ๋Ÿด  ๋Ÿผ  ๋Ÿฝ  ๋Ÿฟ  ๋ €  ๋   ๋ ‡  ๋ ˆ  ๋ ‰  ๋ Œ  ๋   ๋ ˜  ๋ ™  ๋ ›

  ๋   ๋ ค  ๋ ฅ  ๋ จ  ๋ ฌ  ๋ ด  ๋ ต  ๋ ท  ๋ ธ  ๋ น  ๋ก€  ๋ก„  ๋ก‘  ๋ก“  ๋กœ  ๋ก

  ๋ก   ๋กค  ๋กฌ  ๋กญ  ๋กฏ  ๋กฑ  ๋กธ  ๋กผ  ๋ข  ๋ขจ  ๋ขฐ  ๋ขด  ๋ขธ  ๋ฃ€  ๋ฃ  ๋ฃƒ

  ๋ฃ…  ๋ฃŒ  ๋ฃ  ๋ฃ”  ๋ฃ  ๋ฃŸ  ๋ฃก  ๋ฃจ  ๋ฃฉ  ๋ฃฌ  ๋ฃฐ  ๋ฃธ  ๋ฃน  ๋ฃป  ๋ฃฝ  ๋ค„

  ๋ค˜  ๋ค   ๋คผ  ๋คฝ  ๋ฅ€  ๋ฅ„  ๋ฅŒ  ๋ฅ  ๋ฅ‘  ๋ฅ˜  ๋ฅ™  ๋ฅœ  ๋ฅ   ๋ฅจ  ๋ฅฉ

B8

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

  ํˆฉ  ๋ฅซ  ๋ฅญ  ๋ฅด  ๋ฅต  ๋ฅธ  ๋ฅผ  ๋ฆ„  ๋ฆ…  ๋ฆ‡  ๋ฆ‰  ๋ฆŠ  ๋ฆ  ๋ฆŽ  ๋ฆฌ  ๋ฆญ

  ๋ฆฐ  ๋ฆด  ๋ฆผ  ๋ฆฝ  ๋ฆฟ  ๋ง  ๋งˆ  ๋ง‰  ๋งŒ  ๋งŽ  ๋ง  ๋ง  ๋ง‘  ๋ง’  ๋ง˜  ๋ง™

  ๋ง›  ๋ง  ๋งž  ๋งก  ๋งฃ  ๋งค  ๋งฅ  ๋งจ  ๋งฌ  ๋งด  ๋งต  ๋งท  ๋งธ  ๋งน  ๋งบ  ๋จ€

  ๋จ  ๋จˆ  ๋จ•  ๋จธ  ๋จน  ๋จผ  ๋ฉ€  ๋ฉ‚  ๋ฉˆ  ๋ฉ‰  ๋ฉ‹  ๋ฉ  ๋ฉŽ  ๋ฉ“  ๋ฉ”  ๋ฉ•

  ๋ฉ˜  ๋ฉœ  ๋ฉค  ๋ฉฅ  ๋ฉง  ๋ฉจ  ๋ฉฉ  ๋ฉฐ  ๋ฉฑ  ๋ฉด  ๋ฉธ  ๋ชƒ  ๋ช„  ๋ช…  ๋ช‡  ๋ชŒ

  ๋ชจ  ๋ชฉ  ๋ชซ  ๋ชฌ  ๋ชฐ  ๋ชฒ  ๋ชธ  ๋ชน  ๋ชป  ๋ชฝ  ๋ซ„  ๋ซˆ  ๋ซ˜  ๋ซ™  ๋ซผ

B9

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋ฌ€  ๋ฌ„  ๋ฌ  ๋ฌ  ๋ฌ‘  ๋ฌ˜  ๋ฌœ  ๋ฌ   ๋ฌฉ  ๋ฌซ  ๋ฌด  ๋ฌต  ๋ฌถ  ๋ฌธ  ๋ฌป

  ๋ฌผ  ๋ฌฝ  ๋ฌพ  ๋ญ„  ๋ญ…  ๋ญ‡  ๋ญ‰  ๋ญ  ๋ญ  ๋ญ  ๋ญ”  ๋ญ˜  ๋ญก  ๋ญฃ  ๋ญฌ  ๋ฎˆ

  ๋ฎŒ  ๋ฎ  ๋ฎค  ๋ฎจ  ๋ฎฌ  ๋ฎด  ๋ฎท  ๋ฏ€  ๋ฏ„  ๋ฏˆ  ๋ฏ  ๋ฏ“  ๋ฏธ  ๋ฏน  ๋ฏผ  ๋ฏฟ

  ๋ฐ€  ๋ฐ‚  ๋ฐˆ  ๋ฐ‰  ๋ฐ‹  ๋ฐŒ  ๋ฐ  ๋ฐ  ๋ฐ‘  ๋ฐ”  ๋ฐ•  ๋ฐ–  ๋ฐ—  ๋ฐ˜  ๋ฐ›  ๋ฐœ

  ๋ฐ  ๋ฐž  ๋ฐŸ  ๋ฐค  ๋ฐฅ  ๋ฐง  ๋ฐฉ  ๋ฐญ  ๋ฐฐ  ๋ฐฑ  ๋ฐด  ๋ฐธ  ๋ฑ€  ๋ฑ  ๋ฑƒ  ๋ฑ„

  ๋ฑ…  ๋ฑ‰  ๋ฑŒ  ๋ฑ  ๋ฑ  ๋ฑ  ๋ฒ„  ๋ฒ…  ๋ฒˆ  ๋ฒ‹  ๋ฒŒ  ๋ฒŽ  ๋ฒ”  ๋ฒ•  ๋ฒ—

BA

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋ฒ™  ๋ฒš  ๋ฒ   ๋ฒก  ๋ฒค  ๋ฒง  ๋ฒจ  ๋ฒฐ  ๋ฒฑ  ๋ฒณ  ๋ฒด  ๋ฒต  ๋ฒผ  ๋ฒฝ  ๋ณ€

  ๋ณ„  ๋ณ  ๋ณ  ๋ณ  ๋ณ‘  ๋ณ•  ๋ณ˜  ๋ณœ  ๋ณด  ๋ณต  ๋ณถ  ๋ณธ  ๋ณผ  ๋ด„  ๋ด…  ๋ด‡

  ๋ด‰  ๋ด  ๋ด”  ๋ดค  ๋ดฌ  ๋ต€  ๋ตˆ  ๋ต‰  ๋ตŒ  ๋ต  ๋ต˜  ๋ต™  ๋ตค  ๋ตจ  ๋ถ€  ๋ถ

  ๋ถ„  ๋ถ‡  ๋ถˆ  ๋ถ‰  ๋ถŠ  ๋ถ  ๋ถ‘  ๋ถ“  ๋ถ•  ๋ถ™  ๋ถš  ๋ถœ  ๋ถค  ๋ถฐ  ๋ถธ  ๋ท”

  ๋ท•  ๋ท˜  ๋ทœ  ๋ทฉ  ๋ทฐ  ๋ทด  ๋ทธ  ๋ธ€  ๋ธƒ  ๋ธ…  ๋ธŒ  ๋ธ  ๋ธ  ๋ธ”  ๋ธœ  ๋ธ

  ๋ธŸ  ๋น„  ๋น…  ๋นˆ  ๋นŒ  ๋นŽ  ๋น”  ๋น•  ๋น—  ๋น™  ๋นš  ๋น›  ๋น   ๋นก  ๋นค  

BB

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ๋นจ  ๋นช  ๋นฐ  ๋นฑ  ๋นณ  ๋นด  ๋นต  ๋นป  ๋นผ  ๋นฝ  ๋บ€  ๋บ„  ๋บŒ  ๋บ  ๋บ

  ๋บ  ๋บ‘  ๋บ˜  ๋บ™  ๋บจ  ๋ป  ๋ป‘  ๋ป”  ๋ป—  ๋ป˜  ๋ป   ๋ปฃ  ๋ปค  ๋ปฅ  ๋ปฌ  ๋ผ

  ๋ผˆ  ๋ผ‰  ๋ผ˜  ๋ผ™  ๋ผ›  ๋ผœ  ๋ผ  ๋ฝ€  ๋ฝ  ๋ฝ„  ๋ฝˆ  ๋ฝ  ๋ฝ‘  ๋ฝ•  ๋พ”  ๋พฐ

  ๋ฟ…  ๋ฟŒ  ๋ฟ  ๋ฟ  ๋ฟ”  ๋ฟœ  ๋ฟŸ  ๋ฟก  ์€ผ  ์‘  ์˜  ์œ  ์   ์จ  ์ฉ  ์‚

  ์‚‘  ์‚”  ์‚˜  ์‚   ์‚ก  ์‚ฃ  ์‚ฅ  ์‚ฌ  ์‚ญ  ์‚ฏ  ์‚ฐ  ์‚ณ  ์‚ด  ์‚ต  ์‚ถ  ์‚ผ

  ์‚ฝ  ์‚ฟ  ์ƒ€  ์ƒ  ์ƒ…  ์ƒˆ  ์ƒ‰  ์ƒŒ  ์ƒ  ์ƒ˜  ์ƒ™  ์ƒ›  ์ƒœ  ์ƒ  ์ƒค

BC

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์ƒฅ  ์ƒจ  ์ƒฌ  ์ƒด  ์ƒต  ์ƒท  ์ƒน  ์„€  ์„„  ์„ˆ  ์„  ์„•  ์„œ  ์„  ์„ž

  ์„Ÿ  ์„   ์„ฃ  ์„ค  ์„ฆ  ์„ง  ์„ฌ  ์„ญ  ์„ฏ  ์„ฐ  ์„ฑ  ์„ถ  ์„ธ  ์„น  ์„ผ  ์…€

  ์…ˆ  ์…‰  ์…‹  ์…Œ  ์…  ์…”  ์…•  ์…˜  ์…œ  ์…ค  ์…ฅ  ์…ง  ์…จ  ์…ฉ  ์…ฐ  ์…ด

  ์…ธ  ์†…  ์†Œ  ์†  ์†Ž  ์†  ์†”  ์†–  ์†œ  ์†  ์†Ÿ  ์†ก  ์†ฅ  ์†จ  ์†ฉ  ์†ฌ

  ์†ฐ  ์†ฝ  ์‡„  ์‡ˆ  ์‡Œ  ์‡”  ์‡—  ์‡˜  ์‡   ์‡ค  ์‡จ  ์‡ฐ  ์‡ฑ  ์‡ณ  ์‡ผ  ์‡ฝ

  ์ˆ€  ์ˆ„  ์ˆŒ  ์ˆ  ์ˆ  ์ˆ‘  ์ˆ˜  ์ˆ™  ์ˆœ  ์ˆŸ  ์ˆ   ์ˆจ  ์ˆฉ  ์ˆซ  ์ˆญ

BD

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์ˆฏ  ์ˆฑ  ์ˆฒ  ์ˆด  ์‰ˆ  ์‰  ์‰‘  ์‰”  ์‰˜  ์‰   ์‰ฅ  ์‰ฌ  ์‰ญ  ์‰ฐ  ์‰ด

  ์‰ผ  ์‰ฝ  ์‰ฟ  ์Ё  ์Šˆ  ์Љ  ์А  ์Š˜  ์Š›  ์Š  ์Šค  ์Šฅ  ์Šจ  ์Šฌ  ์Šญ  ์Šด

  ์Šต  ์Šท  ์Šน  ์‹œ  ์‹  ์‹   ์‹ฃ  ์‹ค  ์‹ซ  ์‹ฌ  ์‹ญ  ์‹ฏ  ์‹ฑ  ์‹ถ  ์‹ธ  ์‹น

  ์‹ป  ์‹ผ  ์Œ€  ์Œˆ  ์Œ‰  ์ŒŒ  ์Œ  ์Œ“  ์Œ”  ์Œ•  ์Œ˜  ์Œœ  ์Œค  ์Œฅ  ์Œจ  ์Œฉ

  ์…  ์จ  ์ฉ  ์ฌ  ์ฐ  ์ฒ  ์ธ  ์น  ์ผ  ์ฝ  ์Ž„  ์Žˆ  ์ŽŒ  ์€  ์˜  ์™

  ์œ  ์Ÿ  ์   ์ข  ์จ  ์ฉ  ์ญ  ์ด  ์ต  ์ธ  ์ˆ  ์  ์ค  ์ฌ  ์ฐ

BE

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์ด  ์ผ  ์ฝ  ์‘ˆ  ์‘ค  ์‘ฅ  ์‘จ  ์‘ฌ  ์‘ด  ์‘ต  ์‘น  ์’€  ์’”  ์’œ  ์’ธ

  ์’ผ  ์“ฉ  ์“ฐ  ์“ฑ  ์“ด  ์“ธ  ์“บ  ์“ฟ  ์”€  ์”  ์”Œ  ์”  ์””  ์”œ  ์”จ  ์”ฉ

  ์”ฌ  ์”ฐ  ์”ธ  ์”น  ์”ป  ์”ฝ  ์•„  ์•…  ์•ˆ  ์•‰  ์•Š  ์•Œ  ์•  ์•Ž  ์•“  ์•”

  ์••  ์•—  ์•˜  ์•™  ์•  ์•ž  ์•   ์•ก  ์•ค  ์•จ  ์•ฐ  ์•ฑ  ์•ณ  ์•ด  ์•ต  ์•ผ

  ์•ฝ  ์–€  ์–„  ์–‡  ์–Œ  ์–  ์–  ์–‘  ์–•  ์–—  ์–˜  ์–œ  ์–   ์–ฉ  ์–ด  ์–ต

  ์–ธ  ์–น  ์–ป  ์–ผ  ์–ฝ  ์–พ  ์—„  ์—…  ์—†  ์—‡  ์—ˆ  ์—‰  ์—Š  ์—Œ  ์—Ž

BF

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์—  ์—‘  ์—”  ์—˜  ์—   ์—ก  ์—ฃ  ์—ฅ  ์—ฌ  ์—ญ  ์—ฎ  ์—ฐ  ์—ด  ์—ถ  ์—ท

  ์—ผ  ์—ฝ  ์—พ  ์—ฟ  ์˜€  ์˜  ์˜…  ์˜†  ์˜‡  ์˜ˆ  ์˜Œ  ์˜  ์˜˜  ์˜™  ์˜›  ์˜œ

  ์˜ค  ์˜ฅ  ์˜จ  ์˜ฌ  ์˜ญ  ์˜ฎ  ์˜ฐ  ์˜ณ  ์˜ด  ์˜ต  ์˜ท  ์˜น  ์˜ป  ์™€  ์™  ์™„

  ์™ˆ  ์™  ์™‘  ์™“  ์™”  ์™•  ์™œ  ์™  ์™   ์™ฌ  ์™ฏ  ์™ฑ  ์™ธ  ์™น  ์™ผ  ์š€

  ์šˆ  ์š‰  ์š‹  ์š  ์š”  ์š•  ์š˜  ์šœ  ์šค  ์šฅ  ์šง  ์šฉ  ์šฐ  ์šฑ  ์šด  ์šธ

  ์šน  ์šบ  ์›€  ์›  ์›ƒ  ์›…  ์›Œ  ์›  ์›  ์›”  ์›œ  ์›  ์›   ์›ก  ์›จ

C0

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์›ฉ  ์›ฌ  ์›ฐ  ์›ธ  ์›น  ์›ฝ  ์œ„  ์œ…  ์œˆ  ์œŒ  ์œ”  ์œ•  ์œ—  ์œ™  ์œ 

  ์œก  ์œค  ์œจ  ์œฐ  ์œฑ  ์œณ  ์œต  ์œท  ์œผ  ์œฝ  ์€  ์„  ์Š  ์Œ  ์  ์

  ์‘  ์’  ์“  ์”  ์•  ์–  ์—  ์˜  ์œ  ์   ์จ  ์ซ  ์ด  ์ต  ์ธ  ์ผ

  ์ฝ  ์พ  ์žƒ  ์ž„  ์ž…  ์ž‡  ์žˆ  ์ž‰  ์žŠ  ์žŽ  ์ž  ์ž‘  ์ž”  ์ž–  ์ž—  ์ž˜

  ์žš  ์ž   ์žก  ์žฃ  ์žค  ์žฅ  ์žฆ  ์žฌ  ์žญ  ์žฐ  ์žด  ์žผ  ์žฝ  ์žฟ  ์Ÿ€  ์Ÿ

  ์Ÿˆ  ์Ÿ‰  ์ŸŒ  ์ŸŽ  ์Ÿ  ์Ÿ˜  ์Ÿ  ์Ÿค  ์Ÿจ  ์Ÿฌ  ์ €  ์   ์ „  ์ ˆ  ์ Š

C1

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์   ์ ‘  ์ “  ์ •  ์ –  ์ œ  ์   ์    ์ ค  ์ ฌ  ์ ญ  ์ ฏ  ์ ฑ  ์ ธ  ์ ผ

  ์ก€  ์กˆ  ์ก‰  ์กŒ  ์ก  ์ก”  ์กฐ  ์กฑ  ์กด  ์กธ  ์กบ  ์ข€  ์ข  ์ขƒ  ์ข…  ์ข†

  ์ข‡  ์ข‹  ์ขŒ  ์ข  ์ข”  ์ข  ์ขŸ  ์ขก  ์ขจ  ์ขผ  ์ขฝ  ์ฃ„  ์ฃˆ  ์ฃŒ  ์ฃ”  ์ฃ•

  ์ฃ—  ์ฃ™  ์ฃ   ์ฃก  ์ฃค  ์ฃต  ์ฃผ  ์ฃฝ  ์ค€  ์ค„  ์ค…  ์ค†  ์คŒ  ์ค  ์ค  ์ค‘

  ์ค˜  ์คฌ  ์คด  ์ฅ  ์ฅ‘  ์ฅ”  ์ฅ˜  ์ฅ   ์ฅก  ์ฅฃ  ์ฅฌ  ์ฅฐ  ์ฅด  ์ฅผ  ์ฆˆ  ์ฆ‰

  ์ฆŒ  ์ฆ  ์ฆ˜  ์ฆ™  ์ฆ›  ์ฆ  ์ง€  ์ง  ์ง„  ์ง‡  ์งˆ  ์งŠ  ์ง  ์ง‘  ์ง“

C2

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์ง•  ์ง–  ์ง™  ์งš  ์งœ  ์ง  ์ง   ์งข  ์งค  ์งง  ์งฌ  ์งญ  ์งฏ  ์งฐ  ์งฑ

  ์งธ  ์งน  ์งผ  ์จ€  ์จˆ  ์จ‰  ์จ‹  ์จŒ  ์จ  ์จ”  ์จ˜  ์จฉ  ์ฉŒ  ์ฉ  ์ฉ  ์ฉ”

  ์ฉœ  ์ฉ  ์ฉŸ  ์ฉ   ์ฉก  ์ฉจ  ์ฉฝ  ์ช„  ์ช˜  ์ชผ  ์ชฝ  ์ซ€  ์ซ„  ์ซŒ  ์ซ  ์ซ

  ์ซ‘  ์ซ“  ์ซ˜  ์ซ™  ์ซ   ์ซฌ  ์ซด  ์ฌˆ  ์ฌ  ์ฌ”  ์ฌ˜  ์ฌ   ์ฌก  ์ญ  ์ญˆ  ์ญ‰

  ์ญŒ  ์ญ  ์ญ˜  ์ญ™  ์ญ  ์ญค  ์ญธ  ์ญน  ์ฎœ  ์ฎธ  ์ฏ”  ์ฏค  ์ฏง  ์ฏฉ  ์ฐŒ  ์ฐ

  ์ฐ  ์ฐ”  ์ฐœ  ์ฐ  ์ฐก  ์ฐข  ์ฐง  ์ฐจ  ์ฐฉ  ์ฐฌ  ์ฐฎ  ์ฐฐ  ์ฐธ  ์ฐน  ์ฐป

C3

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์ฐผ  ์ฐฝ  ์ฐพ  ์ฑ„  ์ฑ…  ์ฑˆ  ์ฑŒ  ์ฑ”  ์ฑ•  ์ฑ—  ์ฑ˜  ์ฑ™  ์ฑ   ์ฑค  ์ฑฆ

  ์ฑจ  ์ฑฐ  ์ฑต  ์ฒ˜  ์ฒ™  ์ฒœ  ์ฒ   ์ฒจ  ์ฒฉ  ์ฒซ  ์ฒฌ  ์ฒญ  ์ฒด  ์ฒต  ์ฒธ  ์ฒผ

  ์ณ„  ์ณ…  ์ณ‡  ์ณ‰  ์ณ  ์ณ”  ์ณค  ์ณฌ  ์ณฐ  ์ด  ์ดˆ  ์ด‰  ์ดŒ  ์ด  ์ด˜  ์ด™

  ์ด›  ์ด  ์ดค  ์ดจ  ์ดฌ  ์ดน  ์ตœ  ์ต   ์ตค  ์ตฌ  ์ตญ  ์ตฏ  ์ตฑ  ์ตธ  ์ถˆ  ์ถ”

  ์ถ•  ์ถ˜  ์ถœ  ์ถค  ์ถฅ  ์ถง  ์ถฉ  ์ถฐ  ์ท„  ์ทŒ  ์ท  ์ทจ  ์ทฌ  ์ทฐ  ์ทธ  ์ทน

  ์ทป  ์ทฝ  ์ธ„  ์ธˆ  ์ธŒ  ์ธ”  ์ธ™  ์ธ   ์ธก  ์ธค  ์ธจ  ์ธฐ  ์ธฑ  ์ธณ  ์ธต

C4

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ์น˜  ์น™  ์นœ  ์นŸ  ์น   ์นก  ์นจ  ์นฉ  ์นซ  ์นญ  ์นด  ์นต  ์นธ  ์นผ  ์บ„

  ์บ…  ์บ‡  ์บ‰  ์บ  ์บ‘  ์บ”  ์บ˜  ์บ   ์บก  ์บฃ  ์บค  ์บฅ  ์บฌ  ์บญ  ์ป  ์ปค

  ์ปฅ  ์ปจ  ์ปซ  ์ปฌ  ์ปด  ์ปต  ์ปท  ์ปธ  ์ปน  ์ผ€  ์ผ  ์ผ„  ์ผˆ  ์ผ  ์ผ‘  ์ผ“

  ์ผ•  ์ผœ  ์ผ   ์ผค  ์ผฌ  ์ผญ  ์ผฏ  ์ผฐ  ์ผฑ  ์ผธ  ์ฝ”  ์ฝ•  ์ฝ˜  ์ฝœ  ์ฝค  ์ฝฅ

  ์ฝง  ์ฝฉ  ์ฝฐ  ์ฝฑ  ์ฝด  ์ฝธ  ์พ€  ์พ…  ์พŒ  ์พก  ์พจ  ์พฐ  ์ฟ„  ์ฟ   ์ฟก  ์ฟค

  ์ฟจ  ์ฟฐ  ์ฟฑ  ์ฟณ  ์ฟต  ์ฟผ  ํ€€  ํ€„  ํ€‘  ํ€˜  ํ€ญ  ํ€ด  ํ€ต  ํ€ธ  ํ€ผ

C5

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ํ„  ํ…  ํ‡  ํ‰  ํ  ํ”  ํ˜  ํ   ํฌ  ํญ  ํฐ  ํด  ํผ  ํฝ  ํ‚

  ํ‚ค  ํ‚ฅ  ํ‚จ  ํ‚ฌ  ํ‚ด  ํ‚ต  ํ‚ท  ํ‚น  ํƒ€  ํƒ  ํƒ„  ํƒˆ  ํƒ‰  ํƒ  ํƒ‘  ํƒ“

  ํƒ”  ํƒ•  ํƒœ  ํƒ  ํƒ   ํƒค  ํƒฌ  ํƒญ  ํƒฏ  ํƒฐ  ํƒฑ  ํƒธ  ํ„  ํ„ฐ  ํ„ฑ  ํ„ด

  ํ„ธ  ํ„บ  ํ…€  ํ…  ํ…ƒ  ํ…„  ํ……  ํ…Œ  ํ…  ํ…  ํ…”  ํ…œ  ํ…  ํ…Ÿ  ํ…ก  ํ…จ

  ํ…ฌ  ํ…ผ  ํ†„  ํ†ˆ  ํ†   ํ†ก  ํ†ค  ํ†จ  ํ†ฐ  ํ†ฑ  ํ†ณ  ํ†ต  ํ†บ  ํ†ผ  ํ‡€  ํ‡˜

  ํ‡ด  ํ‡ธ  ํˆ‡  ํˆ‰  ํˆ  ํˆฌ  ํˆญ  ํˆฐ  ํˆด  ํˆผ  ํˆฝ  ํˆฟ  ํ‰  ํ‰ˆ  ํ‰œ

C6

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ํ‰ค  ํŠ€  ํЁ  ํŠ„  ํŠˆ  ํА  ํŠ‘  ํŠ•  ํŠœ  ํŠ   ํŠค  ํŠฌ  ํŠฑ  ํŠธ  ํŠน

  ํŠผ  ํŠฟ  ํ‹€  ํ‹‚  ํ‹ˆ  ํ‹‰  ํ‹‹  ํ‹”  ํ‹˜  ํ‹œ  ํ‹ค  ํ‹ฅ  ํ‹ฐ  ํ‹ฑ  ํ‹ด  ํ‹ธ

  ํŒ€  ํŒ  ํŒƒ  ํŒ…  ํŒŒ  ํŒ  ํŒŽ  ํŒ  ํŒ”  ํŒ–  ํŒœ  ํŒ  ํŒŸ  ํŒ   ํŒก  ํŒฅ

  ํŒจ  ํŒฉ  ํŒฌ  ํŒฐ  ํŒธ  ํŒน  ํŒป  ํŒผ  ํŒฝ  ํ„  ํ…  ํผ  ํฝ  ํŽ€  ํŽ„  ํŽŒ

  ํŽ  ํŽ  ํސ  ํŽ‘  ํŽ˜  ํŽ™  ํŽœ  ํŽ   ํŽจ  ํŽฉ  ํŽซ  ํŽญ  ํŽด  ํŽธ  ํŽผ  ํ„

  ํ…  ํˆ  ํ‰  ํ  ํ˜  ํก  ํฃ  ํฌ  ํญ  ํฐ  ํด  ํผ  ํฝ  ํฟ  ํ

C7

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ํˆ  ํ  ํ‘€  ํ‘„  ํ‘œ  ํ‘   ํ‘ค  ํ‘ญ  ํ‘ฏ  ํ‘ธ  ํ‘น  ํ‘ผ  ํ‘ฟ  ํ’€  ํ’‚

  ํ’ˆ  ํ’‰  ํ’‹  ํ’  ํ’”  ํ’ฉ  ํ“Œ  ํ“  ํ“”  ํ“œ  ํ“Ÿ  ํ“จ  ํ“ฌ  ํ“ฐ  ํ“ธ  ํ“ป

  ํ“ฝ  ํ”„  ํ”ˆ  ํ”Œ  ํ””  ํ”•  ํ”—  ํ”ผ  ํ”ฝ  ํ•€  ํ•„  ํ•Œ  ํ•  ํ•  ํ•‘  ํ•˜

  ํ•™  ํ•œ  ํ•   ํ•ฅ  ํ•จ  ํ•ฉ  ํ•ซ  ํ•ญ  ํ•ด  ํ•ต  ํ•ธ  ํ•ผ  ํ–„  ํ–…  ํ–‡  ํ–ˆ

  ํ–‰  ํ–  ํ–ฅ  ํ—ˆ  ํ—‰  ํ—Œ  ํ—  ํ—’  ํ—˜  ํ—™  ํ—›  ํ—  ํ—ค  ํ—ฅ  ํ—จ  ํ—ฌ

  ํ—ด  ํ—ต  ํ—ท  ํ—น  ํ˜€  ํ˜  ํ˜„  ํ˜ˆ  ํ˜  ํ˜‘  ํ˜“  ํ˜”  ํ˜•  ํ˜œ  ํ˜ 

C8

  00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F

A0

B0

C0

D0

E0

F0

      ํ˜ค  ํ˜ญ  ํ˜ธ  ํ˜น  ํ˜ผ  ํ™€  ํ™…  ํ™ˆ  ํ™‰  ํ™‹  ํ™  ํ™‘  ํ™”  ํ™•  ํ™˜

  ํ™œ  ํ™ง  ํ™ฉ  ํ™ฐ  ํ™ฑ  ํ™ด  ํšƒ  ํš…  ํšŒ  ํš  ํ𐠠ํš”  ํš  ํšŸ  ํšก  ํšจ

  ํšฌ  ํšฐ  ํšน  ํšป  ํ›„  ํ›…  ํ›ˆ  ํ›Œ  ํ›‘  ํ›”  ํ›—  ํ›™  ํ›   ํ›ค  ํ›จ  ํ›ฐ

  ํ›ต  ํ›ผ  ํ›ฝ  ํœ€  ํœ„  ํœ‘  ํœ˜  ํœ™  ํœœ  ํœ   ํœจ  ํœฉ  ํœซ  ํœญ  ํœด  ํœต

  ํœธ  ํœผ  ํ„  ?   ํ‰  ํ  ํ‘  ํ”  ํ–  ํ—  ํ˜  ํ™  ํ   ํก  ํฃ  ํฅ

  ํฉ  ํฌ  ํฐ  ํด  ํผ  ํฝ  ํž  ํžˆ  ํž‰  ํžŒ  ํž  ํž˜  ํž™  ํž›  ํž

๋ฐ˜์‘ํ˜•

+ Recent posts