Skip to content

Latest commit

ย 

History

History
445 lines (374 loc) ยท 26.3 KB

09_02_plugin_drivers.md

File metadata and controls

445 lines (374 loc) ยท 26.3 KB

ํ”Œ๋Ÿฌ๊ทธ์ธ

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

๊ทธ๋Ÿผ ์ œํ’ˆ๋งˆ๋‹ค ์‹œ๋ฆฌ์–ผ ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด์•ผํ• ๊นŒ์š”? ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ ํ•˜๋ฉด ์‚ฌ์‹ค์ƒ ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋  ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ ์‹ค์ œ๋กœ ๋งค์ถœ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ๋„ ์•„๋‹Œ ๋‹จ์ง€ ์‹œ๋ฆฌ์–ผ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋˜๊ณ , ๊ทธ๊ฒƒ์„ ๋‚ด๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ๋œ๋‹ค๋ฉด ํฐ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ’ˆ 10๊ฐœ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์‹œ๋ฆฌ์–ผ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, 10๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ณ ๊ฐ ID๋ฅผ 8๊ธ€์ž๋กœ ๋ฐ”๊พผ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ผ์ด ์–ด๋ ค์šด๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์˜คํžˆ๋ ค ์ผ์ด ์–ด๋ ค์šด๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊ธฐ์— ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ์ข€ ์•„๊น์ง€ ์•Š์„๊นŒ์š”? ์ด์™•์ด๋ฉด ๊ฐ™์€ ์‹œ๊ฐ„์— ์ข€ ๋” ์—ฐ๊ตฌํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ผ์„ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋‹น์—ฐํžˆ ๊ฐ€์žฅ ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์ด์ง€๋งŒ, ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์š”๊ตฌ์‚ฌํ•ญ์— ๊ธฐ๋ฏผํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋„ฃ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

๊ทธ๋Ÿผ ์ œํ’ˆ๋งˆ๋‹ค ์‹œ๋ฆฌ์–ผ ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด์•ผํ• ๊นŒ์š”? ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ ํ•˜๋ฉด ์‚ฌ์‹ค์ƒ ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉ๋  ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค๋„ ์‹ค์ œ๋กœ ๋งค์ถœ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ๋„ ์•„๋‹Œ ๋‹จ์ง€ ์‹œ๋ฆฌ์–ผ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋˜๊ณ , ๊ทธ๊ฒƒ์„ ๋‚ด๊ฐ€ ๊ด€๋ฆฌํ•ด์•ผ๋œ๋‹ค๋ฉด ํฐ ๋ถ€๋‹ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ’ˆ 10๊ฐœ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์‹œ๋ฆฌ์–ผ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, 10๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ณ ๊ฐ ID๋ฅผ 8๊ธ€์ž๋กœ ๋ฐ”๊พผ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ผ์ด ์–ด๋ ค์šด๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์˜คํžˆ๋ ค ์ผ์ด ์–ด๋ ค์šด๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊ธฐ์— ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ์ข€ ์•„๊น์ง€ ์•Š์„๊นŒ์š”? ์ด์™•์ด๋ฉด ๊ฐ™์€ ์‹œ๊ฐ„์— ์ข€ ๋” ์—ฐ๊ตฌํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ผ์„ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋‹น์—ฐํžˆ ๊ฐ€์žฅ ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์ด์ง€๋งŒ, ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ์š”๊ตฌ์‚ฌํ•ญ์— ๊ธฐ๋ฏผํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋„ฃ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

์‚ฌ์šฉ์ž ID

  • ๊ธธ์ด 4๊ธ€์ž
  • ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ด๋ฃจ์–ด์ง

์ œํ’ˆ ID

  • ๊ธธ์ด 8๊ธ€์ž
  • ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ด๋ฃจ์–ด์ง

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

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

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

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

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

๊ทธ๋Ÿผ ๋‘ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ๋Š” ๊ธธ์ด์™€ ์ˆซ์ž/์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

pub struct CustomerID {
    id: Option<String>,
    digit: usize,
    name: String,
}

impl CustomerID {
    pub fn new(digit: usize) -> Self {
        CustomerID {
            name: "UserID".to_owned(),
            digit,
            id: None,
        }
    }
pub struct CustomerID {
    id: Option<String>,
    digit: usize,
    name: String,
}

impl CustomerID {
    pub fn new(digit: usize) -> Self {
        CustomerID {
            name: "UserID".to_owned(),
            digit,
            id: None,
        }
    }
}

pub struct ProductID {
    id: Option<String>,
    digit: usize,
    name: String,
}

impl ProductID {
    pub fn new(digit: usize) -> Self {
        ProductID {
            name: "ProductID".to_owned(),
            digit,
            id: None,
        }
    }
}

๊ณ ๊ฐID์™€ ์ œํ’ˆID๊ฐ€ ๊ฐ๊ฐ ํŠน์ •ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ ์ด๋ฆ„๋งŒ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด๋กœ ํ‘œํ˜„๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. digitํ•„๋“œ์™€ idํ•„๋“œ๋Š” ๊ฐ๊ฐ ์ž๋ฆฌ์ˆ˜์™€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. nameํ•„๋“œ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€๋Š” ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๊ฐ€ ๋™์ผํ•˜๋‹ˆ ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜, ๊ตฌ์กฐ์ฒด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค. id: Option, digit: usize, name: String, }

impl ProductID { pub fn new(digit: usize) -> Self { ProductID { name: "ProductID".to_owned(), digit, id: None, } } }


๊ณ ๊ฐID์™€ ์ œํ’ˆID๊ฐ€ ๊ฐ๊ฐ ํŠน์ •ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ ์ด๋ฆ„๋งŒ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด๋กœ ํ‘œํ˜„๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
digitํ•„๋“œ์™€ idํ•„๋“œ๋Š” ๊ฐ๊ฐ ์ž๋ฆฌ์ˆ˜์™€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
nameํ•„๋“œ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€๋Š” ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๊ฐ€ ๋™์ผํ•˜๋‹ˆ ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ๋‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜, ๊ตฌ์กฐ์ฒด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
๊ฐ™์€ ์ฝ”๋“œ์— ๋‹จ์ง€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด์— ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ํŠธ๋ ˆ์ดํŠธ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
๋‹ค์Œ์€ GenSerialData๋ผ๋Š” ํŠธ๋ ˆ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์€ GenSerialData๋ผ๋Š” ํŠธ๋ ˆ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

```rust
trait GenSerialData {
    fn get_input_from_user(&mut self) {
        let input: String;

        let input: String;

        println!(
            "Please input {}-digits for {}: ",
            self.get_length(),
            self.get_name()
            self.get_length(),
            self.get_name()
        );
        input = get_user_input();
        assert_eq!(input.len(), self.get_length());
        self.put_rawdata(input);
    }

    fn verify(&mut self, data: &str) -> bool {
        self.get_length() == data.len() && self.get_rawdata() == data
        input = get_user_input();
        assert_eq!(input.len(), self.get_length());
        self.put_rawdata(input);
    }

    fn verify(&mut self, data: &str) -> bool {
        self.get_length() == data.len() && self.get_rawdata() == data
    }

    fn get_length(&mut self) -> usize;
    fn get_rawdata(&self) -> String;
    fn get_name(&self) -> String;
    fn put_rawdata(&mut self, _data: String);
    fn get_length(&mut self) -> usize;
    fn get_rawdata(&self) -> String;
    fn get_name(&self) -> String;
    fn put_rawdata(&mut self, _data: String);
}

CustomerID์™€ ProductID๊ฐ€ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜์ธ get_input_from_userํ•จ์ˆ˜๋Š” ์‚ฌ์‹ค ๊ฐ ๊ตฌ์กฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”๋œ ์‹œ๋ฆฌ์–ผ์„ ๋ณตํ˜ธํ™”ํ•œ ํ›„ ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ๋™์ผํ•œ์ง€ ๊ฒ€์ฆํ•˜๋Š” verify ํ•จ์ˆ˜๋„ CustomerID์™€ ProductID๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ด ํŠธ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋งˆ๋‹ค ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„๋ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CustomerID์™€ ProductID๊ฐ€ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉ์ž์—๊ฒŒ์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜์ธ get_input_from_userํ•จ์ˆ˜๋Š” ์‚ฌ์‹ค ๊ฐ ๊ตฌ์กฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”๋œ ์‹œ๋ฆฌ์–ผ์„ ๋ณตํ˜ธํ™”ํ•œ ํ›„ ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ๋™์ผํ•œ์ง€ ๊ฒ€์ฆํ•˜๋Š” verify ํ•จ์ˆ˜๋„ CustomerID์™€ ProductID๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ด ํŠธ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋งˆ๋‹ค ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„๋ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋Š” ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํŠธ๋ ˆ์ดํŠธ ์ •์˜์— ๋ฏธ๋ฆฌ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ํŠธ๋ ˆ์ดํŠธ์˜ ๋””ํดํŠธ ๊ตฌํ˜„์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์•ž์œผ๋กœ GenSerialData ํŠธ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค์€ get_input_from_user์™€ verify ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋””ํดํŠธ ๊ตฌํ˜„์ด ์—†๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋””ํดํŠธ ๊ตฌํ˜„์— ๋งž์ง€ ์•Š๋Š” ๊ตฌ์กฐ์ฒด๋ผ๋ฉด ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ GenSerialData ํŠธ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋“ค์€ get_input_from_user์™€ verify ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋””ํดํŠธ ๊ตฌํ˜„์ด ์—†๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋””ํดํŠธ ๊ตฌํ˜„์— ๋งž์ง€ ์•Š๋Š” ๊ตฌ์กฐ์ฒด๋ผ๋ฉด ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””ํดํŠธ ๊ตฌํ˜„์ด ์žˆ๋Š” get_input_from_user์˜ ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ๋ณด๋ฉด get_length, get_name, put_rawdata ๋“ฑ์˜ ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ๋ชจ๋‘ ๊ฐ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ํŠธ๋ ˆ์ดํŠธ ํ•จ์ˆ˜๋“ค์ž…๋‹ˆ๋‹ค. CustomerID ๊ตฌ์กฐ์ฒด์™€ ProductID๊ฐ€ GenSerialData ํŠธ๋ ˆ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋””ํดํŠธ ๊ตฌํ˜„์ด ์žˆ๋Š” get_input_from_user์˜ ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ๋ณด๋ฉด get_length, get_name, put_rawdata ๋“ฑ์˜ ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ๋ชจ๋‘ ๊ฐ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ํŠธ๋ ˆ์ดํŠธ ํ•จ์ˆ˜๋“ค์ž…๋‹ˆ๋‹ค. CustomerID ๊ตฌ์กฐ์ฒด์™€ ProductID๊ฐ€ GenSerialData ํŠธ๋ ˆ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

impl GenSerialData for CustomerID {
    fn get_length(&mut self) -> usize {
        self.digit
    }

    fn get_rawdata(&self) -> String {
        self.id.clone().unwrap()
    }

    fn get_name(&self) -> String {
        self.name.clone()
    }

    fn put_rawdata(&mut self, data: String) {
        self.id = Some(data);
    }
}

impl GenSerialData for ProductID {
    fn get_length(&mut self) -> usize {
        self.digit
    }

    fn get_rawdata(&self) -> String {
        self.id.clone().unwrap()
    }

    fn get_name(&self) -> String {
        self.name.clone()
    }

    fn put_rawdata(&mut self, data: String) {
        self.id = Some(data);
impl GenSerialData for CustomerID {
    fn get_length(&mut self) -> usize {
        self.digit
    }

    fn get_rawdata(&self) -> String {
        self.id.clone().unwrap()
    }

    fn get_name(&self) -> String {
        self.name.clone()
    }

    fn put_rawdata(&mut self, data: String) {
        self.id = Some(data);
    }
}

impl GenSerialData for ProductID {
    fn get_length(&mut self) -> usize {
        self.digit
    }

    fn get_rawdata(&self) -> String {
        self.id.clone().unwrap()
    }

    fn get_name(&self) -> String {
        self.name.clone()
    }

    fn put_rawdata(&mut self, data: String) {
        self.id = Some(data);
    }
}

์‚ฌ์‹ค CustomerID ๊ตฌ์กฐ์ฒด๊ฐ€ id, digit, name์ด๋ผ๋Š” ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜์—ˆ๋Š”์ง€๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ํŠธ๋ ˆ์ดํŠธ ๊ตฌํ˜„์— ํ•„์š”ํ•œ get_length, get_rawdata, get_name, put_rawdata ์ด 4๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ mainํ•จ์ˆ˜์˜ ๊ตฌํ˜„์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค CustomerID ๊ตฌ์กฐ์ฒด๊ฐ€ id, digit, name์ด๋ผ๋Š” ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜์—ˆ๋Š”์ง€๋Š” ์ „ํ˜€ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ํŠธ๋ ˆ์ดํŠธ ๊ตฌํ˜„์— ํ•„์š”ํ•œ get_length, get_rawdata, get_name, put_rawdata ์ด 4๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ mainํ•จ์ˆ˜์˜ ๊ตฌํ˜„์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

fn collect_data(items: &mut Vec<Box<dyn GenSerialData>>) {
    for item in items.iter_mut() {
        item.get_input_from_user();
    }
}

fn generate_serial(items: &mut Vec<Box<dyn GenSerialData>>) -> String {
    let mut data = String::new();
    for item in items.iter_mut() {
        data.push_str(&item.get_rawdata());
    }
    data
}

fn main() {
    let productid = ProductID::new(8);
    let customerid = CustomerID::new(4);
    let mut items: Vec<Box<dyn GenSerialData>> = vec![Box::new(customerid), Box::new(productid)];

    collect_data(&mut items);
    let plain_serial = generate_serial(&mut items);
    println!("Plain serial: {}", plain_serial);

    let mc = new_magic_crypt!("magickey", 256); // AES256 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” MagicCrypt256ํƒ€์ž…์˜ ๊ฐ์ฒด ์ƒ์„ฑ
    let serial = mc.encrypt_str_to_base64(&plain_serial); // ์•”ํ˜ธํ™” ํ›„ BASE64๋กœ ์ธ์ฝ”๋”ฉ
    println!("Encrypted serial: {}", serial);

    let dec = mc.decrypt_base64_to_string(serial).unwrap(); // BASE64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ฝ”๋”ฉ ํ›„ ์•”ํ˜ธ ํ•ด์ œ
    println!("Decrypted serial: {}", dec);

    let mut offset = 0;
    for item in items.iter_mut() {
        let len = item.get_length();
        let rawdata = &dec[offset..offset + len];
        println!("Verify {}: {}", item.get_name(), rawdata);
        println!("Verify result: {}", item.verify(rawdata));
        offset += len;
fn collect_data(items: &mut Vec<Box<dyn GenSerialData>>) {
    for item in items.iter_mut() {
        item.get_input_from_user();
    }
}

fn generate_serial(items: &mut Vec<Box<dyn GenSerialData>>) -> String {
    let mut data = String::new();
    for item in items.iter_mut() {
        data.push_str(&item.get_rawdata());
    }
    data
}

fn main() {
    let productid = ProductID::new(8);
    let customerid = CustomerID::new(4);
    let mut items: Vec<Box<dyn GenSerialData>> = vec![Box::new(customerid), Box::new(productid)];

    collect_data(&mut items);
    let plain_serial = generate_serial(&mut items);
    println!("Plain serial: {}", plain_serial);

    let mc = new_magic_crypt!("magickey", 256); // AES256 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” MagicCrypt256ํƒ€์ž…์˜ ๊ฐ์ฒด ์ƒ์„ฑ
    let serial = mc.encrypt_str_to_base64(&plain_serial); // ์•”ํ˜ธํ™” ํ›„ BASE64๋กœ ์ธ์ฝ”๋”ฉ
    println!("Encrypted serial: {}", serial);

    let dec = mc.decrypt_base64_to_string(serial).unwrap(); // BASE64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ฝ”๋”ฉ ํ›„ ์•”ํ˜ธ ํ•ด์ œ
    println!("Decrypted serial: {}", dec);

    let mut offset = 0;
    for item in items.iter_mut() {
        let len = item.get_length();
        let rawdata = &dec[offset..offset + len];
        println!("Verify {}: {}", item.get_name(), rawdata);
        println!("Verify result: {}", item.verify(rawdata));
        offset += len;
    }
}
g$ cargo run --bin serial_project_step3
   Compiling my-rust-book v0.1.0 (/home/gkim/study/quick-guide-rust-programming)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.51s
     Running `target/debug/serial_project_step3`
Please input 4-digits for UserID: 
1234
Please input 8-digits for UserID: 
qwerasdf
Plain serial: 1234qwerasdf
Encrypted serial: 3OvuVy1IXj5veDI61Mszjg==
Decrypted serial: 1234qwerasdf
Verify User ID: 1234
Verify Product ID: qwerasdf

collect_dataํ•จ์ˆ˜์™€ generate_serialํ•จ์ˆ˜๋Š” ์ด์ „์— Box๋ฅผ ์†Œ๊ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ๋™์ผํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. GenSerialDataํŠธ๋ ˆ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ํŠธ๋ ˆ์ดํŠธ ๊ฐ์ฒด์˜ ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•œ get_input_from_userํ•จ์ˆ˜๋‚˜ get_rawdataํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠธ๋ ˆ์ดํŠธ ๊ฐ์ œ๊ฐ€ ๊ฐ€์ง„ ์ด๋ฆ„๊ณผ ์ž๋ฆฌ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ณ  ํ„ฐ๋ฏธ๋„ ์ž…๋ ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ ํŠธ๋ ˆ์ดํŠธ ๊ฐ์ฒด์— ์ €์žฅํ•˜๋Š” put_rawdata ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. generate_serial ํ•จ์ˆ˜๋„ ๊ฐ ํŠธ๋ ˆ์ดํŠธ ๊ฐ์ฒด๊ฐ€ ๊ตฌํ˜„ํ•œ get_rawdata ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ ํŠธ๋ ˆ์ดํŠธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฒฐ๊ตญ ์ œ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ํŠธ๋ ˆ์ดํŠธ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ(๋“œ๋ผ์ด๋ฒ„)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋ ˆ์ดํŠธ๋Š” ๊ฐ ๊ตฌ์กฐ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€๋ฅผ ์ „ํ˜€ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ํŠธ๋ ˆ์ดํŠธ๋Š” get_length, get_rawdata, get_name, put_rawdata๋“ฑ์˜ ํ‘œ์ค€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์„œ, ๊ฐ ๊ตฌ์กฐ์ฒด๊ฐ€ ๋ณ„๋„๋กœ ๊ฐ ๊ตฌ์กฐ์ฒด์˜ ์ •์˜์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ ๊ฐ ๋ฉ”์†Œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ตฌ์กฐ์ฒด๋“ค์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” get_input_from_user์™€ verifyํ•จ์ˆ˜๊ฐ™์€ ๊ณตํ†ต ๊ตฌํ˜„์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. GenSerialData ํŠธ๋ ˆ์ดํŠธ์™€ ๊ฐ™์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ชฝ์„ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , CustomerID์™€ ๊ฐ™์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ(๋“œ๋ผ์ด๋ฒ„)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋น„์œ ๋ฅผ ํ•ด๋ณด์ž๋ฉด GenSerialData๋ผ๋Š” ํŠธ๋ ˆ์ดํŠธ๋Š” ๋ฉ€ํ‹ฐํƒญ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. get_length ๋“ฑ์˜ ํ•จ์ˆ˜๋“ค์€ ๋ฉ€ํ‹ฐํƒญ์— ์žˆ๋Š” 2๊ฐœ์˜ ๊ตฌ๋ฉ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CustomerID์—์„œ ๊ตฌํ˜„ํ•œ get_length๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋“ค์€ 2๊ฐœ์˜ ๊ธˆ์† ๋ง‰๋Œ€๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด 2๊ฐœ์˜ ๊ธˆ์† ๋ง‰๋Œ€๊ธฐ ๋์— ์žˆ๋Š” ์ „์ž์ œํ’ˆ์ด ์ „๊ธฐ ์ฃผ์ „์ž์ธ์ง€ ์ „์ž๋ ˆ์ธ์ง€์ธ์ง€ ๋“œ๋ฆด์ธ์ง€๋Š” ๋ฉ€ํ‹ฐํƒญ์—๊ฒŒ ์•„๋ฌด ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ์„œ๋กœ ๋ฏธ๋ฆฌ ์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค(2๊ฐœ์˜ ๊ธˆ์† ๋ง‰๋Œ€๊ธฐ์™€ ๊ทธ๊ฒƒ๋“ค์ด ๋ผ์›Œ์งˆ ๊ตฌ๋ฉ)์— ๋งž๊ฒŒ ์„œ๋กœ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉด ๊ฐ์ž์˜ ํ•  ์ผ์„ ํ•  ๋ฟ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ์Šต๋ฌธ์ œ

  1. CustomerID์™€ ProductID, 2๊ฐœ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์„์ง€ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ํ•œ๋ฒˆ ๊ตฌํ˜„๊นŒ์ง€ ํ•ด๋ณด์„ธ์š”. ๋‹ค์Œ์žฅ์—์„œ 2๊ฐœ์˜ ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค๋งŒ ๊ทธ ์ „์— ์ง์ ‘ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์žฅ์„ ์ฝ์–ด๋ณด๋ฉด์„œ ์ œ๊ฐ€ ์ œ์‹œํ•œ ๋ฐฉ๋ฒ•๋ณด๋‹ค ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.