๐ ๋ชฉ์ฐจ.
8. ๊ฒฝ๊ณ
.์ธ๋ถ ์ฝ๋ ์ฌ์ฉํ๊ธฐ
.๊ฒฝ๊ณ ์ดํผ๊ณ ์ตํ๊ธฐ
.ํ์ต ํ ์คํธ๋ ๊ณต์ง ์ด์์ด๋ค.
.์์ง ์กด์ฌํ์ง ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ
.๊นจ๋ํ ๊ฒฝ๊ณ
โ๏ธ ๋ด์ฉ.
8. ๊ฒฝ๊ณ
์์คํ ์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ํํธ์จ์ด๋ฅผ ์ง์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
ํจํค์ง๋ฅผ ์ฌ๊ธฐ๋ ํ๋ฉฐ ์คํ์์ค๋ฅผ ์ด์ฉํ๋ค. ์ฌ๋ด ๋ค๋ฅธ ํ์ด ์ ๊ณตํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ด๋ค ์์ผ๋ก๋ ์ธ๋ถ ์ฝ๋๋ฅผ ์ฐ๋ฆฌ ์ฝ๋์ ๊น๋ํ๊ฒ ํตํฉํด์ผ ํ๋ค.
์ด๋ฒ ์ฅ์์๋ ์ํํธ์จ์ด ๊ฒฝ๊ณ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ๊ณผ ๊ธฐ๊ต๋ฅผ ์ดํด๋ณธ๋ค.
.์ธ๋ถ ์ฝ๋ ์ฌ์ฉํ๊ธฐ
์์ฃผ ์ฌ์ฉ Collections์ธ Map์ ์๋ก ๋ณด์
// 1
Map sensors = new HashMap();
Sensor s = (Sensor)sensors.get(sensorId);
// 2
Map<String, Sensor> sensors = new HashMap<Sensor>();
Sensor s = sensors.get(sensorId);
// 3
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id){
return (Sensor) sensors.get(id);
}
}
1์ ๊ฒฝ์ฐ ๋ฐํํ๋ Object๋ฅผ Sensor์ผ๋ก ๋ณํํ๋ ์ฑ ์์ Map์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ฃผ๊ฒ ๋๋ค.
2์ ๊ฒฝ์ฐ๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํจ์ผ๋ก ์จ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ๋์ผ ๋ฟ 1์ ๊ฒฝ์ฐ์ ๊ฐ์ด ์ฑ ์์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ค.
๋ํ 1, 2๋ ์ฌ์ฉ์๊ฐ ํ์ํ์ง ์์ Map์ ๋ค๋ฅธ ๊ธฐ๋ฅ๊น์ง ์ ๊ณตํ๊ฒ ๋๋ค. ์ด๋ฌํ Map ์ธ์คํด์ค๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ๋ก ๋๊ธด๋ค๋ฉด, Map ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์์ ๋ ์ฝ๋๊ฐ ์๋นํ ๋ง์์ง๋ค.
๋ฐ๋ผ์ 3๊ณผ ๊ฐ์ด ๊ฒฝ๊ณ ์ธํฐํ์ด์ค์ธ Map์ Sensors ์์ผ๋ก ์จ๊ฒจ Sensors ํด๋์ค ์์์ ๊ฐ์ฒด ์ ํ์ ๊ด๋ฆฌํ๋๋ก ํ๋ค.
๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ Map ์ธํฐํ์ด์ค๊ฐ ๋ณํ๋๋ผ๋ ๋๋จธ์ง ํ๋ก๊ทธ๋จ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค. ๋ํ Sensors ํด๋์ค๋ ํ๋ก๊ทธ๋จ์ ํ์ํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํ๋ค. ๊ทธ๋์ ์ฝ๋๋ ์ดํดํ๊ธฐ ์ฝ์ง๋ง ์ค์ฉํ๊ธฐ๋ ์ด๋ ต๋ค. Sensors ํด๋์ค๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์ด ์ค๊ณ ๊ท์น๊ณผ ๋น์ฆ๋์ค ๊ท์น์ ๋ฐ๋ฅด๋๋ก ๊ฐ์ ํ ์ ์๋ค.
Map์ ์ฌ์ฉํ ๋๋ง๋ค 3๊ณผ ๊ฐ์ด ์บก์ํํ๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ผ. ๊ฒฝ๊ณ ์ธํฐํ์ด์ค(Map)๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ ๋๊ธฐ์ง ๋ง๋ผ๋ ๋ง์ด๋ค
๊ฒฝ๊ณ ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ๊ณต๊ฐ API์ ์ธ์๋ก ๋๊ธฐ๊ฑฐ๋ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
.๊ฒฝ๊ณ ์ดํผ๊ณ ์ตํ๊ธฐ
์ธ๋ถ API๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒฝ์ฐ ์ธ๋ถ API๋ฅผ ๋๋ฌด ์ ๋ขฐํ์ง ๋ง๊ณ ๊ฐ๋จํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํด ์ตํ๋๋ก ํ๋ค.
์ง ๋ด์ปคํฌ๋ ์ด๋ฅผ ํ์ต ํ ์คํธ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํ์ต ํ ์คํธ๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ค๋ ๋ฐฉ์๋๋ก ์ธ๋ถ API๋ฅผ ํธ์ถํ๋ค. ํต์ ๋ ํ๊ฒฝ์์ API๋ฅผ ์ ๋๋ก ์ดํดํ๋์ง ํ์ธํ๋ ์ ์ด๋ค. ํ์ต ํ ์คํธ๋ ์ธ๋ถ API๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ์ด์ ์ ๋ง์ถ๋ค.
.ํ์ต ํ ์คํธ๋ ๊ณต์ง ์ด์์ด๋ค.
ํ์ต ํ ์คํธ์ ๋๋ ๋น์ฉ์ ์๋ค. ์ด์ฐจํผ API๋ฅผ ๋ฐฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์คํ๋ ค ํ์ํ ์ง์๋ง ํ๋ณดํ๋ ์์ฌ์ด ๋ฐฉ๋ฒ์ด๋ค. ํ์ต ํ ์คํธ๋ ์ดํด๋๋ฅผ ๋์ฌ์ฃผ๋ ์ ํํ ์คํ์ด๋ค.
ํ์ต ํ ์คํธ๋ฅผ ์ด์ฉํ ํ์ต์ด ํ์ํ๋ ๊ทธ๋ ์ง ์๋ , ์ค์ ์ฝ๋์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ํ์ํ๋ค. ์ด๋ฐ ๊ฒฝ๊ณ ํ ์คํธ๊ฐ ์๋ค๋ฉด ํจํค์ง๋ ์ ๋ฒ์ ์ผ๋ก ์ด์ ํ๊ธฐ ์ฌ์์ง๋ค.
.์์ง ์กด์ฌํ์ง ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ
๊ฒฝ๊ณ์ ๊ด๋ จํด ๋ ๋ค๋ฅธ ์ ํ์ ์๋ ์ฝ๋์ ๋ชจ๋ฅด๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒฝ๊ณ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ Adapter ํจํด์ผ๋ก API ์ฌ์ฉ์ ์บก์ํํ์ฌ ๋ชจ๋ฅด๋ ์ฝ๋๊ฐ ๋ฐ๋ ๋ ์์ ํ ์ฝ๋๋ฅผ ํ ๊ณณ์ผ๋ก ๋ชจ์๋ค. ์ด์ ๊ฐ์ ์ค๊ณ๋ ํ ์คํธ ๋ํ ํธํ๊ฒ ์งํ์ด ๊ฐ๋ฅํ๋ค.
.๊นจ๋ํ ๊ฒฝ๊ณ
๊ฒฝ๊ณ์์๋ ๋ค์ํ ์ผ์ด ๋ฐ์ํ๋๋ฐ ๋ณ๊ฒฝ์ด ๋ํ์ ์ธ ์๋ค.
์ํํธ์จ์ด ์ค๊ณ๊ฐ ์ฐ์ํ๋ค๋ฉด ๋ณ๊ฒฝํ๋๋ฐ ๋ง์ ์์์ด ํ์ํ์ง ์๋ค. ๊ฒฝ๊ณ์ ์์นํ๋ ์ฝ๋๋ ๊น๋ํ ๋ถ๋ฆฌํ๋ค.
๋ํ ๊ธฐ๋์น๋ฅผ ์ ์ํ๋ ํ ์คํธ ์ผ์ด์ค๋ ์์ฑํ๋ค. ํต์ ๊ฐ ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ์ฝ๋๋ณด๋ค๋ ํต์ ๊ฐ ๊ฐ๋ฅํ ์ฐ๋ฆฌ ์ฝ๋์ ์์กดํ๋ ํธ์ด ํจ์ฌ ์ข๋ค.
์ธ๋ถ ํจํค์ง๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฅํ ์ค์ฌ ๊ฒฝ๊ณ๋ฅผ ๊ด๋ฆฌํ๋ค. Map์์ ๋ดค๋ฏ์ด ์๋ก์ด ํด๋์ค๋ก ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ธ๊ฑฐ๋, Adapter ํจํด์ ์ฌ์ฉํด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํจํค์ง๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก ๋ณํํ์.
์ด๋ ๋ฐฉ๋ฒ์ด๋ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ฉฐ, ๊ฒฝ๊ณ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ผ๊ด์ฑ๋ ๋์์ ธ ์ธ๋ถ ํจํค์ง๊ฐ ๋ณํ์ ๋ ๋ณ๊ฒฝํ ์ฝ๋๋ ์ค์ด๋ ๋ค.
๐ ๋๋์ .
- ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ๋๋๋ ๊ฒ ์ค์ํ๋ค ๋๊ผ๋ค.
- ์ธ๋ถ API ์ฌ์ฉ ์ ํ ์คํธ ์ผ์ด์ค ์์ฑ์ ํ์์ฑ์ ๊ฐ์.
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 3] 10. ํด๋์ค (0) | 2022.08.01 |
---|---|
[Study][CleanCode - 2] 9. ๋จ์ ํ ์คํธ (0) | 2022.07.17 |
[Study][CleanCode - 2] 7. ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2022.07.16 |
[Study][CleanCode - 2] 6. ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ (0) | 2022.07.14 |
[Study][CleanCode - 2] 5. ํ์ ๋ง์ถ๊ธฐ (0) | 2022.07.13 |