๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ์‹ ์ค‘ํžˆ ์„ค๊ณ„ํ•˜๋ผ - [8์žฅ. ๋ฉ”์„œ๋“œ(์•„์ดํ…œ51)]

Amenable 2023. 12. 10. 19:17

  ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด API ์„ค๊ณ„ ์š”๋ น๋“ค์„ ์‚ดํŽด๋ณด์ž. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ , ์“ฐ๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ ์€ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“™ 1. ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์‹ ์ค‘ํžˆ ์ง“์ž.

  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์‹ ์ค‘ํžˆ ์ง“๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ๋„ˆ๋ฌด๋‚˜ ๋งŽ์ด ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ•œ๋ฒˆ ๋” ์ƒ๊ธฐ์‹œํ‚จ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ณด๊ณ  ๋„˜์–ด๊ฐ€์ž.

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

 

๐Ÿ“™ 2. ํŽธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋งŒ๋“ค์ง€ ๋ง์ž.

  ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ํด๋ž˜์Šค๋Š” ์ตํžˆ๊ณ , ์‚ฌ์šฉํ•˜๊ณ , ๋ฌธ์„œํ™”ํ•˜๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž์‹ ์˜ ๊ฐ ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํžˆ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ œ๊ณตํ•˜๋„๋ก ํ•˜์ž. ํ™•์‹ ์ด ์„œ์ง€ ์•Š์œผ๋ฉด ๋งŒ๋“ค์ง€ ๋ง์ž!

 

๐Ÿ“™ 3. ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์€ ์งง๊ฒŒ ์œ ์ง€ํ•˜์ž.

  4๊ฐœ ์ดํ•˜๊ฐ€ ์ข‹๋‹ค. ํŠนํžˆ, ๊ฐ™์€ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ค๊ฒŒ ํ•˜์ง€ ๋ง์ž. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•˜๊ณ , ์‹ค์ˆ˜๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ์ž…๋ ฅํ•ด๋„ ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  ๊ณผํ•˜๊ฒŒ ๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์„ ์งง๊ฒŒ ์ค„์—ฌ์ฃผ๋Š” ๊ธฐ์ˆ  3๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋กœ ์ชผ๊ฐ ๋‹ค.
      ์ž˜๋ชปํ•˜๋ฉด ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ง๊ต์„ฑ(orthogonality, ๊ณตํ†ต์ ์ด ์—†๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์ž˜ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ๊ฒƒ)์„ ๋†’์—ฌ ์˜คํžˆ๋ ค ๋ฉ”์„œ๋“œ ์ˆ˜๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ํšจ๊ณผ๋„ ์žˆ๋‹ค.
  2. ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ๋„์šฐ๋ฏธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
      ์นด๋“œ ํด๋ž˜์Šค์— ์ˆซ์ž(rank)์™€ ๋ฌด๋Šฌ(suit)๋ฅผ ๋œปํ•˜๋Š” ๋‘ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  3. ๊ฐ์ฒด ์ƒ์„ฑ์— ์‚ฌ์šฉํ•œ ๋นŒ๋” ํŒจํ„ด์„ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ์‘์šฉํ•œ๋‹ค.
      ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฐ’๋งŒ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“™ 4. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์œผ๋กœ๋Š” ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋” ๋‚ซ๋‹ค.

  ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด (์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ) ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ž.

  ์˜ˆ๋ฅผ ๋“ค์–ด, HashMap์„ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Map์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด TreeMap, ConcurrentHashMap, TreeMap์˜ ๋ถ€๋ถ„๋งต ๋“ฑ ๋‹ค์–‘ํ•œ Map ๊ตฌํ˜„์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“™ 5. ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์œผ๋กœ๋Š” boolean๋ณด๋‹ค๋Š” ์›์†Œ 2๊ฐœ์งœ๋ฆฌ ์—ด๊ฑฐ ํƒ€์ž…์ด ๋‚ซ๋‹ค.

  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค.

  ์˜จ๋„๊ณ„ ํด๋ž˜์Šค์˜ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด ์ ํ•ฉํ•œ ์˜จ๋„๊ณ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

// boolean์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
Thermometer.newInstance(true)

// ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
public enum TemperatureScale { FAHRENHEIT, CELSIUS }
Thermometer.newInstance(ThmperatureScale.CELSIUS)

  ์—ด๊ฑฐ ํƒ€์ž…์„ ์ด์šฉํ•˜๋ฉด ํ›จ์”ฌ ๋” ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜จ๋„ ํƒ€์ž…์œผ๋กœ ์บ˜๋นˆ์˜จ๋„(KELVIN)๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  ๋ฌผ๋ก  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ƒ boolean์„ ๋ฐ›์•„์•ผ ์˜๋ฏธ๊ฐ€ ๋” ๋ช…ํ™•ํ•  ๋•Œ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์ด๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€ Joshua Bloch ๋‹˜์˜ 'Effective Java 3/E'๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.