Study/CleanCode

[Study][CleanCode - 2] 8. ๊ฒฝ๊ณ„

youn12 2022. 7. 16. 22:09
๐Ÿ“‹ ๋ชฉ์ฐจ.

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 ์‚ฌ์šฉ ์‹œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์˜ ํ•„์š”์„ฑ์„ ๊ฐ–์ž.