์๋ช
๊ฒ์ ๋ค์ ์์ ์ธ ๋ฏธ๋ก ๋ฐ์๊ธฐ๋ ๊ฐ์ค์ฌ ๋ฐ์ดํ ๋ชจ๋ธ๋ง์ผ๋ก ์งํํ๊ณ ์๋ค์.
์ ๋ง ์ด๋ ๊ฒ ์งง์ ์ฝ๋๋ก ์ ๋ฐ ๋ณต์กํ ๋ฏธ๋ก๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค๋ ๊ฒ์ด ๋๋ผ์ธ ๋ฐ๋ฆ์ธ๋ฐ์.
์ ๊ฐ ์ฌ๊ธฐ์ ํนํ ์ฃผ๋ชฉํ๊ณ ์ถ์ ๋ถ๋ถ์ ๋ฐ์ดํ ๋ชจ๋ธ๋ง์ ํ๋ ๊ณผ์ ์
๋๋ค.
p.146์์๋ ๋ฏธ๋ก๋ฅผ ๋ฐ์ํ๋ ์์จ์ ์๊ณ ๋ฆฌ์ฆ์์ ๋ค์๊ณผ ๊ฐ์ entity๋ฅผ ๋ฝ์๋
๋๋ค.
- locationย
- the visited state
- the maze itself
- random walks
- exit directions.ย
์ด๊ฒ์ OOP์์ ๋์์ธ ๋จ๊ณ์์ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ๋ถ์ํ ๋ค ํด๋์ค๊ฐ ๋ ํ๋ณด๋ฅผ ๋ฝ๋ ๊ณผ์ ๊ณผ
๋น์ทํฉ๋๋ค. OOP ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ์ ๋ฐ๋ผ UML์ ์์ฑํ ๊ฒ์ด๊ณ ,ย ย ๊ฒฐ๊ตญ ์ entity๋ค์ย ย ํด๋์ค๊ฐ ๋ ๊ฒ์
๋๋ค.
ํ์ง๋ง ๊ฐ์ค์ฌ ๋ฐ์ดํ ๋ชจ๋ธ๋ง์ ์ ํ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก location, wall, maze๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค.
location : ์ขํ์ ๋ฒกํฐ, [0 0]
wall : locaton์ ์งํฉ #{[0 0] [1 0]}
maze : wall์ ์งํฉ #{#{[0 0] [1 0]}ย #{[1 0] [2 0]} ...}
์ ์ด์ ์ด๊ฒ์ ์ค์ ํด๋ก์ ธ ์ฝ๋๊ณผ ์๋ฐ ์ฝ๋๋ก ํํํ ๋ ์ด๋ป๊ฒ ๋๋์ง ๋ณด์์ฃ .
ํด๋ก์ ธ ํํ
; location
[0 0]
; wall
#{[0 0] [1 0]}
; maze
#{#{[0 0] [1 0]}ย #{[1 0] [2 0]}ย #{[2 0] [3 0]} ...}
์๋ฐ ํํ
Class Location {
ย private int x, y;
ย public Location (int x, int y) {
ย ย this.x = x;
ย ย this.y = y;
ย }
ย int getx() {
ย ย return x;
ย }
ย int gety() {
ย ย return y;
ย }
}
Location loc = new Locatin(0, 0);
Class Wall {
ย private Location[2] locs;
ย public Wall(Location loc1, Location loc2) {
ย ย this.locs[0] = loc1;
ย ย this.locs[1] = loc2;
ย }
ย ...
ย ...
ย ...
}
Wall wall = new Wall(new Location(0, 0), new Location(1, 0));
Class Maze {
ย private ArrayList walls = new ArrayList();
ย public void add(Wall wall) {
ย ย walls.add(wall);
ย }
}
Maze maze = new Maze();
maze.add(wall1);
maze.add(wall2);
maze.add(wall3);
...
ํด๋ก์ ธ์ ๋นํด ์๋ฐ๊ฐ ์๋ฑํ๊ฒ ๋ณต์กํด์ก์ต๋๋ค.ย
์๋ฐ๊ฐ OOP๋ผ ํด๋์ค ์ ์๋ถ ๋๋ฌธ์ ์ต์ธํด ํ ์๋ ์๊ฒ ์ต๋๋ค๋ง,
location๊ณผ wall์ ๋ค๋ฃจ๊ธฐ ์ํด์ ์๋ฐ๋ ๊ฒฐ๊ตญ index๋ List๋ฑ์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์
ํด๋์ค ์ ์๋ง๊ณ ๋ฐ์ดํ๋ฅผ ์กฐ์ํ๊ณ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ ์์ฒญ ๋ณต์กํด์ก์ ๊ฒ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ์ฐจ์ด๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ทผ๋ณธ ์์ธ์ ๋ฌด์์ผ๊น์?
์ค์ํ ๊ฒ์ ์ด ์ฐจ์ด๋ ํด๋ก์ ธ์ ์๋ฐ๋ผ๋ ์ธ์ด ์์ฒด์ ์ฐจ์ด์์ ๋์จ ๊ฒ์ ์๋๋ผ๋ ๊ฒ์
๋๋ค.
์๋๋ฉด ํด๋ก์ ธ๋ก๋ location์ defrecord๋ก ์ผ๋ง๋ ์ง ํ์
์ ์ํ ์ ์์ผ๋๊น์.
์ด๋ฐ์์ผ๋ก ํ๋ค๋ฉด ํด๋ก์ ธ ์ฝ๋๋ ๋ง๋ง์น ์๊ฒ ๋ณต์กํด์ก์ ๊ฒ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ๋ ์์ ์งง์ ์ ํด๋ก์ ธ์ ์ฝ๋๋ ๋๋์ฒด ๋ญ๋๋ ๊ฒ์ด์ฃ . ์ ๊ฒ์ ์ ์ ๋ ๊ฒ ์งง์์ง ์ ์์๊น์?
์ด ์ฐจ์ด๋ ์ธ์ด์ ์ฐจ์ด๊ฐ ์๋๊ณ ๋ฐ์ดํ ๋ชจ๋ธ๋ง ๋ฐฉ์์ ์ฐจ์ด์
๋๋ค.
์ฆ OOP ๋ชจ๋ธ๋ง ๋ฐฉ์๊ณผ ๊ฐ์ค์ฌ ๋ชจ๋ธ๋ง ๋ฐฉ์์ด ์ ๋ฌํ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด ๋ธ ๊ฒ์
๋๋ค.
p.146 18๋ฒ์งธ ์ค ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด ์์ต๋๋ค.
"a location is just a (natural) identifier."
p.137 10๋ฒ์งธ ์ค์๋ natural identifier์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด ์์ต๋๋ค.
"Natural identifiers are opposed to synthetic or surrogate identifiers, where the latter
are usually strings or an artificially generated number, akin to sequences or autoincrements
in databases or object references themselves in most object-oriented languages.
Thus, synthetic identifiers are by definition artifacts of incidental complexity"
์ฌ๊ธฐ์๋ ์์ฐ ์๋ณ์(natural identifier)์ ํฉ์ฑ ์๋ณ์(synthetic identifier)๊ฐ ๋๋น๋์ด ๋์ค๊ณ ์์ต๋๋ค.
์์ฐ ์๋ณ์๋ ๋ฐ์ดํ ๊ทธ ์์ฒด๊ฐ ์์ ์ ์๋ณํ๋ ์๋ณ์๋ฅผ ๋งํฉ๋๋ค.
ํฉ์ฑ ์๋ณ์๋ ๋ฐ์ดํ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ณ๋์ ์๋ณ์๋ฅผ ๋งํฉ๋๋ค.
ํด๋ก์ ธ ์ฝ๋์์ wall์ #{[0 0] [1 0]}์ผ๋ก ํํํ ๋ ์ด๊ฒ์ ๋ฐ์ดํ ์์ฒด๊ฐ ์์ ์ ํํํ ๊ฒ์
๋๋ค. ์ฆ ๊ฐ ์์ฒด๋ง์ผ๋ก ์์ ์ ์๋ณํ ๊ฒ์ด์ฃ . ์์ฐ ์๋ณ์์ธ ๊ฒ์ด์ฃ .
๋ฐ๋ฉด ์๋ฐ์ฝ๋์์๋ wall์ ํํํ๊ธฐ ์ํด wall์ด๋ผ๋ ๋ณ์๋ช
์ด ํ์ํ๋๋ฐ, ์ด๊ฒ์ดย ํฉ์ฑ ์๋ณ์์ธ ๊ฒ์ด์ฃ .
์๋ฐ ์ฝ๋๊ฐ ๋ณต์กํด์ก๋ ์ด์ ๋ ํฉ์ฑ ์๋ณ์๋ค์ด ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ธ ๊ฒ์
๋๋ค.
ํฉ์ฑ ์๋ณ์๊ฐ ๋ถํ์ํ๊ฒ ๋ณต์ก์ฑ์ ์ผ๊ธฐํ๋ ๊ฒ์ด์ฃ .
ํ๋ ๋ ๋ธ๋ฃฉ์ค๊ฐ 30๋
์ ์ "No Silver Bullet"์์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์์ด์ ๋ณธ์ง์ ๋ณต์ก์ฑ๊ณผ ์ฐ์ฐ์ ๋ณต์ก์ฑ์ ๊ตฌ๋ถํ์ต๋๋ค.ย ๋ณธ์ง์ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ ์ ์์ง๋ง, ์ฐ์ฐ์ ๋ณต์ก์ฑ์ ์ ๊ฑฐํ ์ ์๋ค๋ฉด์ ๊ณ ์์ค ์ธ์ด(๋น์์ ํฌํธ๋)๊ฐ ๊ทธ๋ฐ ์ญํ ์ ํ ์ ์๋ค๊ณ ํ์ต๋๋ค.
์๋ฐ๊ฐ C์ธ์ด์ ํฌ์ธํฐ๋ผ๋ ์ฐ์ฐ์ ๋ณต์ก์ฑ์ ์ผ๊ธฐ์ํค๋ ์์์ ์ ๊ฑฐ๋ฅผ ํตํด ๋ง์ ๋ณต์กํ ๋น์ฆ๋์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋ณด์์๋ ๊ฒ ์ฒ๋ผ, ์ด์ ๋ ํฉ์ฑ ์๋ณ์๋ผ๋ ์ฐ์ฐ์ ๋ณต์ก์ฑ์ ์ผ๊ธฐ์ํค๋ ์์๋ฅผ ์ ํผํด ๊ฐ ์ ์๋ ์ธ์ด์ธ ํด๋ก์ ธ๋ฅผ ๋ณด๊ณ ์๋ ๊ฒ์
๋๋ค.ย
์ด๋ฒ ์์ ๋ค์ ํตํดย OOP ๋์์ธ ๋ฐฉ์์ ๊ฒฐ๊ตญ ์ฐ์ฐ์ ๋ณต์ก์ฑ์ด ํฌํจ๋๋ ๊ฒ์ ๋ง๋๋ฐ ๋งค์ฐ ์ทจ์ฝํ ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค.ย ๊ทธ๋์ CRC๋ก ์ค๊ณํ๊ณ TDD๋ก ๊ฐ๋ฐํด ์ค๋ ์ ์๊ฒ๋ ์ ๋ง ๋นํน์ค๋ฝ๊ธฐ๊น์ง ํ ์๊ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ์ฑ
์ ๊ณต๋ถํ๋ฉด์ ํด๋ก์ ธ ์ฝ๋๋ค์ด ์ฃผ๋ก ๋ณ์๋ช
์ด๋ ํด๋์ค๋ช
๋ฑ๋ฑ ย ์ด๋ค ์๋ณ์๋ค์ด ์๋ ๊ฒ์ดย
๋ณ๋ก ๊ทธ๋ ๊ฒ ์ ์ง ์ฝ๋๋ต์ง ๋ชปํ๋ค๋ ๋๋์ด ์์์ต๋๋ค.ย ๊ทธ๋ฆฌ๊ณ ์๋ฐ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ '์ ๊ทธ๋~ ์ด์ ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ ๊ฐ๊ตฐ' ํ์๋๋ฐ์.์ด์ ๋ ์์์์ฒ๋ผ ์๋ฐ ์ฝ๋๋ค์ด ์ ๋ง ์ถํ๊ฒ ๋ณด์ด๋ค์. ์ ๋ง๋ ์๋๋ ๋ณต์ก์ฑ๋ค์ ์ฝ๋๋ค~~
๋ฆฌ์น ํํค๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ง์ ํ๋ค๋ค์.
"Familarity Hides Complexity"
์ ์ด๋ฐ ๋ง์ ํ๋์ง ์ ๋ง ์ถฉ๋ถํ ๊ณต๊ฐ์ด ๋๋ ์๊ฐ์
๋๋ค!
์ด์์
๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
2012๋
9์ 5์ผ ์์์ผ ์คํ 7์ 17๋ถ 32์ด UTC+9, ๊ตฌ๋ฅด๋ง ๋์ ๋ง: