์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํธ๋ ์ดํธ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค. ์ด์ ์ ๊ฐ์กฐํ๋ฏ์ด ์๊ตฌ์ฌํญ์ ์ธ์ ๋ ๋ฐ๋๋๋ค. ์๋ฆฌ์ผ ํค ํ๋ก๊ทธ๋จ์ ์๊ตฌ์ฌํญ์ ํค ์์ฑ์ ๋ค์ด๊ฐ๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ ํฌ๊ธฐ์ผ ๊ฒ์ ๋๋ค. ์ง๊ธ์ ๊ณ ๊ฐ 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๊ฐ์ ๊ธ์ ๋ง๋๊ธฐ์ ๊ทธ๊ฒ๋ค์ด ๋ผ์์ง ๊ตฌ๋ฉ)์ ๋ง๊ฒ ์๋ก๊ฐ ๊ตฌํ๋์์ผ๋ฉด ๊ฐ์์ ํ ์ผ์ ํ ๋ฟ์ธ ๊ฒ์ ๋๋ค.
- CustomerID์ ProductID, 2๊ฐ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ดค์ต๋๋ค. ๊ทธ ์ธ์ ์๋ฆฌ์ผ ๋ฒํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์ด๋ค ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์์ง ํ๋ฒ ์๊ฐํด๋ณด์ธ์. ๊ทธ๋ฆฌ๊ณ ํ๋ฒ ๊ตฌํ๊น์ง ํด๋ณด์ธ์. ๋ค์์ฅ์์ 2๊ฐ์ ์ ๋ ฅ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด๋ณผ ์์ ์ ๋๋ค๋ง ๊ทธ ์ ์ ์ง์ ๊ณ ๋ฏผํด๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ๋ค์ ์ฅ์ ์ฝ์ด๋ณด๋ฉด์ ์ ๊ฐ ์ ์ํ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.