๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” - ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

Peterยท2022๋…„ 3์›” 23์ผ
0
post-thumbnail

9์žฅ - ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™


๐Ÿ’ก ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ

โ€œ์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ด๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง€๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์•„์ง„๋‹คโ€

1. ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•

  1. ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋ฒ•์€ ์—ญ์‹œ โ€˜๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๊ธฐโ€™๋‹ค.
    • ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฉ€์—ˆ๋Š”๋ฐ, ๋ฏธ๋ฆฌ ์„ ์–ธ๋ถ€ํ„ฐ ํ•ด๋‘๋ฉด ์ฝ”๋“œ๊ฐ€ ์–ด์ˆ˜์„ ํ•ด์ ธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง.
    • ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘๋ฉด ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—” ํƒ€์ž…๊ณผ ์ดˆ๊นƒ๊ฐ’์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ

โ†’ ๊ฑฐ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  1. ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๊ธฐ
    • ํ•œ ๋ฉ”์„œ๋“œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๊ทธ์ค‘ ํ•œ ๊ธฐ๋Šฅ๊ณผ๋งŒ ๊ด€๋ จ๋œ ์ง€์—ญ๋ณ€์ˆ˜๋ผ๋„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž„.

โ†’ ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ž˜ ์ชผ๊ฐœ์ž.


2. for vs while

  • ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ๋’ค์—๋” ์จ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด while ๋ฌธ๋ณด๋‹ค๋Š” for๋ฌธ์„ ์“ฐ๋Š” ํŽธ์ด ๋‚˜์Œ---
    • for , for-each ํ˜•ํƒœ์˜ ๋ฐ˜๋ณต๋ฌธ์—์„œ๋Š” ๋ฐ˜๋ณต ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ ๋ฐ˜๋ณต๋ฌธ์˜ ๋ชธ์ฒด, ๊ทธ๋ฆฌ๊ณ  for ํ‚ค์›Œ๋“œ์™€ ๋ชธ์ฒด ์‚ฌ์ด์˜ ๊ด„ํ˜ธ ์•ˆ์œผ๋กœ ์ œํ•œ๋˜๊ธฐ ๋•Œ๋ฌธ.
    • for ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์‚ฌ+๋ถ™์—ฌ๋„ฃ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ์ปดํŒŒ์ผํƒ€์ž„์— ์žก์•„์คŒ.
    • for ๋ฌธ์˜ ๋ณ€์ˆ˜ ์œ ํšจ ๋ฒ”์œ„๋Š” for๋ฌธ์˜ ๋ฒ”์œ„์™€ ์ผ์น˜ํ•˜์—ฌ ๋˜‘๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฐ˜๋ณต๋ฌธ์—์„œ ์จ๋„ ์„œ๋กœ ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ. ๋” ์„ธ๋ จ๋˜๊ธฐ๊นŒ์ง€ ํ•˜๋‹ค.
    • for ๋ฌธ์€ while ๋ฌธ๋ณด๋‹ค ์งง์•„์„œ ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ

โ†’ for ๋ฌธ์ด ๋” Good!



๐Ÿ’ก ์ „ํ†ต์ ์ธ for ๋ฌธ๋ณด๋‹ค๋Š” for-each ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ผ

โ€œ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ณณ์—์„œ for ๋ฌธ์ด ์•„๋‹Œ for-each ๋ฌธ์„ ์‚ฌ์šฉํ•˜์žโ€

1. for vs for-each

  • for๋ฌธ
// ๋ฐฐ์—ด ์ˆœํšŒํ•˜๊ธฐ - for๋ฌธ
for (int i = 0; i < a.length; i++) {
		... // a[i]๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰
}

โ†’ ๋ฐ˜๋ณต์ž์™€ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ์ฝ”๋“œ๋ฅผ ์ง€์ €๋ถ„ํ•˜๊ฒŒ ํ•  ๋ฟ. ์šฐ๋ฆฌ์—๊ฒŒ ์ง„์งœ ํ•„์š”ํ•œ ๊ฑด ์›์†Œ๋“ค ๋ฟ์ด๋‹ค.

  • for-each๋ฌธ(ํ–ฅ์ƒ๋œ for ๋ฌธ; enhanced for statement)
for (Element e : elements) {
		... // e๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰
}
  • ์ฝœ๋ก (:)์€ โ€œ์•ˆ์˜(in)โ€๋ผ๊ณ  ์ฝ์Œ
  • ์œ„ ๋ฐ˜๋ณต๋ฌธ์€ โ€œ elements์•ˆ์˜ ๊ฐ ์›์†Œ e์— ๋Œ€ํ•ดโ€๋ผ๊ณ  ์ฝ์Œ
  • for-each๋ฌธ์˜ ์žฅ์ 
    1. ๋ฐ˜๋ณต์ž์™€ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง€๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ผ๋„ ์—†์Œ.
    2. ํ•˜๋‚˜์˜ ๊ด€์šฉ๊ตฌ๋กœ ์ปฌ๋ ‰์…˜๊ณผ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฃจ๋Š”์ง€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋จ
  • for-each ๋ฌธ์€ ์ปฌ๋ ‰์…˜๊ณผ ๋ฐฐ์—ด์€ ๋ฌผ๋ก  Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ผ๋ฉด ๋ฌด์—‡์ด๋“  ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Œ

2. for-each ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

  1. ํŒŒ๊ดด์ ์ธ ํ•„ํ„ฐ๋ง(destructive filtering)
    • ์ปฌ๋ ‰์…˜์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์„ ํƒ๋œ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฐ˜๋ณต์ž์˜ remove ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•จ.
    • ์ž๋ฐ” 8๋ถ€ํ„ฐ๋Š” Collection์˜ removeIf ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ปฌ๋ ‰์…˜์„ ๋ช…์‹œ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ์ผ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ
  2. ๋ณ€ํ˜•(transforming)
    • ๋ฆฌ์ŠคํŠธ๋‚˜ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ทธ ์›์†Œ์˜ ๊ฐ’ ์ผ๋ถ€ ํ˜น์€ ์ „์ฒด๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ˜๋ณต์ž๋‚˜ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
    • for-each ๋Š” ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
  3. ๋ณ‘๋ ฌ ๋ฐ˜๋ณต(parallel iteration)
    • ์—ฌ๋Ÿฌ ์ปฌ๋ ‰์…˜์„ ๋ณ‘๋ ฌ๋กœ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๋ฐ˜๋ณต์ž์™€ ์ธ๋ฑ์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์—„๊ฒฉํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•ด์•ผ ํ•จ.


๐Ÿ’ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•˜๋ผ

โ€œ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜์ง€ ๋ง์žโ€

1. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ์ด์ 

  1. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์ „๋ฌธ๊ฐ€์˜ ์ง€์‹๊ณผ ์šฐ๋ฆฌ๋ณด๋‹ค ์•ž์„œ ์‚ฌ์šฉํ•œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ๊ฒฝํ—˜์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  2. ํ•ต์‹ฌ์ ์ธ ์ผ๊ณผ ํฌ๊ฒŒ ๊ด€๋ จ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š๋ผ ์‹œ๊ฐ„์„ ํ—ˆ๋น„ํ•˜์ง€ ์•Š์•„๋„ ๋จ.
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ํ•˜๋ถ€ ๊ณต์‚ฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•˜๊ณ  ์‹ถ์–ด ํ•จ.
  3. ๋”ฐ๋กœ ๋…ธ๋ ฅํ•˜์ง€ ์•Š์•„๋„ ์„ฑ๋Šฅ์ด ์ง€์†ํ•ด์„œ ๊ฐœ์„ ๋จ.
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ๊ณ , ์—…๊ณ„ ํ‘œ์ค€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‚ฌ์šฉํ•ด ์„ฑ๋Šฅ์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘์ž๋“ค์€ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ๊พธ์ค€ํžˆ ๋ชจ์ƒ‰ํ•  ์ˆ˜ ๋ฐ–์— ์—†์Œ.
  4. ๊ธฐ๋Šฅ์ด ์ ์  ๋งŽ์•„์ง.
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด์•ผ๊ธฐ๊ฐ€ ๋‚˜์˜ค๊ณ  ๋…ผ์˜๋œ ํ›„ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์— ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณค ํ•จ.
  5. ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์€ ์‚ฌ๋žŒ์—๊ฒŒ ๋‚ฏ์ต์€ ์ฝ”๋“œ๊ฐ€ ๋จ
    • ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋” ์ฝ๊ธฐ ์ข‹๊ณ , ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๊ณ , ์žฌํ™œ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๋จ.

2. ์•Œ์•„๋‘์–ด์•ผํ•  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ์ ์–ด๋„ java.lang, java.util, java.io ์™€ ๊ทธ ํ•˜์œ„ ํŒจํ‚ค์ง€๋“ค์—๋Š” ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•จ.

  • ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ์ŠคํŠธ๋ฆผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, java.util.concurrent ์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ ๋“ฑ ์ž˜ ์•Œ์•„๋‘๋ฉด ํฐ ๋„์›€์ด ๋จ.

  • ์ž๋ฐ” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด, ๊ทธ ๋‹ค์Œ ์„ ํƒ์ง€๋Š” ๊ณ ํ’ˆ์งˆ์˜ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„๋ณด์ž. ex) ๊ตฌ๊ธ€์˜ ๊ตฌ์•„๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


๐Ÿ’ก ์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•˜๋ผ

โ€œ๊ทผ์‚ฌ์น˜ : float, double / ์ •ํ™•ํ•œ ๊ฐ’ : BigDecimalโ€

1. float์™€ double

  • float์™€ double์€ ์ด์ง„ ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์— ์“ฐ์ด๋ฉฐ, ๋„“์€ ๋ฒ”์œ„์˜ ์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ •๋ฐ€ํ•œ โ€˜๊ทผ์‚ฌ์น˜โ€™๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ์„ค๊ณ„ ๋˜์—ˆ์Œ.
  • ์˜ˆ์‹œ๋กœ ์•„๋ž˜ ์ฝ”๋“œ๋Š” 0.610000000000001์„ ์ถœ๋ ฅํ•œ๋‹ค.
System.out.println(1.03 - 0.42);

โ†’ float์™€ double์€ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•  ๋•Œ(ex. ๊ธˆ์œต ๊ณ„์‚ฐ)๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.


2. BigDecimal

  • ๊ธˆ์œต ๊ณ„์‚ฐ์—๋Š” BigDecimal, int ํ˜น์€ long์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • BigDecimal์˜ ๋‹จ์ 
    • ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค ์“ฐ๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋ถˆํŽธํ•˜๊ณ , ํ›จ์”ฌ ๋Š๋ฆฌ๋‹ค.
    • ๋‹จ๋ฐœ์„ฑ ๊ณ„์‚ฐ์ด๋ผ๋ฉด ๋Š๋ฆฌ๋‹ค๋Š” ๋ฌธ์ œ๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์“ฐ๊ธฐ ๋ถˆํŽธํ•˜๋‹ค๋Š” ์ ์€ ๋ชป๋‚ด ์•„์‰ฌ์šธ ๊ฒƒ์ž„.
  • BigDecimal์˜ ๋Œ€์•ˆ์œผ๋กœ int ํ˜น์€ long ํƒ€์ž…์„ ์“ธ ์ˆ˜ ์žˆ์Œ
    • ์ด ๊ฒฝ์šฐ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜๊ณ , ์†Œ์ˆ˜์ ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ.
  • ๊ถŒ์žฅ
    • ์†Œ์ˆ˜์  ์ถ”์ ์€ ์‹œ์Šคํ…œ์— ๋งก๊ธฐ๊ณ , ์ฝ”๋”ฉ ์‹œ์˜ ๋ถˆํŽธํ•จ์ด๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ฒ ๋‹ค๋ฉด BigDecimal์„ ์‚ฌ์šฉํ•˜๋ผ
      • BigDecimal์ด ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿ ๊ฐ€์ง€ ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ˜์˜ฌ๋ฆผ์„ ์™„๋ฒฝํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ
    • ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๊ณ  ์†Œ์ˆ˜์ ์„ ์ง์ ‘ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ˆซ์ž๊ฐ€ ๋„ˆ๋ฌด ํฌ์ง€ ์•Š๋‹ค๋ฉด int๋‚˜ long์„ ์‚ฌ์šฉํ•˜๋ผ
      • ์ˆซ์ž๋ฅผ ์•„ํ™‰์ž๋ฆฌ ์‹ญ์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด โ†’ int์‚ฌ์šฉ
      • ์—ด์—ฌ๋Ÿ ์ž๋ฆฌ ์‹ญ์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด โ†’ long ์‚ฌ์šฉ
      • ์—ด์—ฌ๋Ÿ ์ž๋ฆฌ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด โ†’ BigDeceimal ์‚ฌ์šฉ


๐Ÿ’ก ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

โ€œ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๋‹คโ€

1. ๊ธฐ๋ณธ ํƒ€์ž… vs ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…

๊ธฐ๋ณธํƒ€์ž…๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…
์˜ˆ์‹œintBigInteger
์‹๋ณ„์„ฑ(identity)XO
NullableXO
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจโ†‘โ†“

2. ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฌธ์ œ์ 

  • ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์— == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์— == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด ์ฐธ์กฐ์˜ ์‹๋ณ„์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ.
  • ์—ฐ์‚ฐ์—์„œ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์„ ํ˜ผ์šฉํ•˜๋ฉด ์–ธ๋ฐ•์‹ฑ์ด ์ด๋ค„์ง€๋Š”๋ฐ, ์–ธ๋ฐ•์‹ฑ ๊ณผ์ •์—์„œ NullPointerExeption์„ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ๋ณธ ํƒ€์ž…์„ ๋ฐ•์‹ฑํ•˜๋Š” ์ž‘์—…์€ ํ•„์š” ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ถ€์ž‘์šฉ์„ ๋‚˜์„ ์ˆ˜ ์žˆ์Œ.
    • ๋ฐ˜๋ณต๋ฌธ ๊ฐ™์€ ๊ณณ์—์„œ ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์„ ํ˜ผ์šฉํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด,
      ํ•„์š” ์—†๋Š” ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋  ์ˆ˜๋„ ์žˆ์Œ..


๐Ÿ’ก ๋‹ค๋ฅธ ํƒ€์ž…์ด ์ ์ ˆํ•˜๋‹ค๋ฉด ๋ฌธ์ž์—ด ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

โ€œ๋ฌธ์ž์—ด์€ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ๋ฒˆ๊ฑฐ๋กญ๊ณ , ๋œ ์œ ์—ฐํ•˜๊ณ , ๋Š๋ฆฌ๊ณ , ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ๋„ ํฌ๋‹คโ€

  • ์ž…๋ ฅ๋ฐ›์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง„์งœ ๋ฌธ์ž์—ด์ผ ๋•Œ๋งŒ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์ž
  • ๋งŽ์€ ์‚ฌ๋žŒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์ฃผ๋กœ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Ÿฌ๋ฉด ์ ๋‹นํ•œ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•ด์ค˜์•ผ ํ•œ๋‹ค.

โ†’ ๊ธฐ๋ณธ ํƒ€์ž…์ด๋“  ์ฐธ์กฐ ํƒ€์ž…์ด๋“  ์ ์ ˆํ•œ ๊ฐ’ ํƒ€์ž…์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ , ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ํ•˜๋‚˜ ์ž‘์„ฑํ•ด๋ผ

  • ๋ฌธ์ž์—ด์€ ์—ด๊ฑฐ ํƒ€์ž…์„ ๋Œ€์‹ ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  • ๋ฌธ์ž์—ด์€ ํ˜ผํ•ฉ ํƒ€์ž…์„ ๋Œ€์‹ ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
String compoundKey = className + "#" + i.next();

โ†’ ์ด ๊ฒฝ์šฐ์— ์ฐจ๋ผ๋ฆฌ ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํŽธ์ด ๋‚ซ๋‹ค. ๋ณดํ†ต private ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋กœ ์„ ์–ธ.

  • ๋ฌธ์ž์—ด์€ ๊ถŒํ•œ์„ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

๐Ÿ’ก ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์€ ๋Š๋ฆฌ๋‹ˆ ์ฃผ์˜ํ•˜๋ผ

โ€œ๋งŽ์€ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์‹œ + ์—ฐ์‚ฐ์ž ๋Œ€์‹  StringBuilder ์˜ append ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผโ€

  • ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž๋กœ ๋ฌธ์ž์—ด n๊ฐœ๋ฅผ ์ž‡๋Š” ์‹œ๊ฐ„์€ n^2์ž„.
  • ์„ฑ๋Šฅ์„ ํฌ๊ธฐํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์ž
// StringBuilder ์‚ฌ์šฉ ์˜ˆ์‹œ
public String statement() {
		String Builder b = new StringBuilder(numItems() * LINE_WIDTH);
		for(int i=0; i<numItems(); i++)
				b.append(lineForItem(i))
		return b.toString();
}


๐Ÿ’ก ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ฐธ์กฐํ•˜๋ผ

โ€œ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ฐธ์กฐํ•˜๋ฉด ๋” ์œ ์—ฐํ•˜๊ณ  ์„ธ๋ จ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹คโ€

  • ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ˜ํ™˜๊ฐ’, ๋ณ€์ˆ˜, ํ•„๋“œ๋ฅผ ์ „๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜๋ผ.
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ๋‘๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ํ›จ์”ฌ ์œ ์—ฐํ•ด์งˆ ๊ฒƒ์ด๋‹ค
    • ๋‚˜์ค‘์— ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๊ต์ฒดํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ƒˆ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜น์€ ์ •์  ํŒฉํ„ฐ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋จ.
      • ๊ตฌํ˜„ ํด๋ž˜์Šค ๊ต์ฒด ์‹œ ์ฃผ์˜์  : ์›๋ž˜์˜ ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ ์ด์™ธ์˜ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ฃผ๋ณ€ ์ฝ”๋“œ๊ฐ€ ์ด ๊ธฐ๋Šฅ์— ๊ธฐ๋Œ€์–ด ๋™์ž‘ํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋„ ๋ฐ˜๋“œ์‹œ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•จ.
      • ex) LinkedHashSet์ด ๋”ฐ๋ฅด๋Š” ์ˆœ์„œ ์ •์ฑ…์„ ๊ฐ€์ •ํ•˜๊ณ  ๋™์ž‘ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ HashSet์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ. (HashSet์€ ๋ฐ˜๋ณต์ž์˜ ์ˆœํšŒ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ)
  • ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋‹น์—ฐํžˆ ํด๋ž˜์Šค๋กœ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ฐ’ ํด๋ž˜์Šค ์ธ ๊ฒฝ์šฐ.
      • ex) String, BigInteger ๋“ฑ
    • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋“ค.
      • ex) OutptStream ๋“ฑ
    • ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์—†๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋“ค.
      • ex) PriorityQueue๋Š” Queue์— ์—†๋Š” comparator ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•จ.
  • ์ ํ•ฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ํด๋ž˜์Šค์˜ ๊ณ„์ธต๊ตฌ์กฐ ์ค‘ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ๋œ ๊ตฌ์ฒด์ ์ธ(์ƒ์œ„์˜) ํด๋ž˜์Šค๋ฅผ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜์ž

๐Ÿ’ก ๋ฆฌํ”Œ๋ ‰์…˜๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

โ€œ๋ฆฌํ”Œ๋ ‰์…˜์€ ๋ณต์žกํ•œ ํŠน์ˆ˜ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ, ๋‹จ์ ๋„ ๋งŽ๋‹คโ€

1. ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋Šฅ

  • ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋Šฅ(java.lang.reflect)์„ ์ด์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž„์˜์˜ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • Class ๊ฐ์ฒด๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ทธ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž, ๋ฉ”์„œ๋“œ, ํ•„๋“œ์— ํ•ด๋‹นํ•˜๋Š” Constructor, Method, Field ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
    • ์ด ์ธ์Šคํ„ด์Šค๋“ค๋กœ๋Š” ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ์ด๋ฆ„, ํ•„๋“œ ํƒ€์ž…, ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋“ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
    • ์ด ์ธ์Šคํ„ด์Šค๋“ค์„ ์ด์šฉํ•ด ๊ฐ๊ฐ์— ์—ฐ๊ฒฐ๋œ ์‹ค์ œ ์ƒ์„ฑ์ž, ๋ฉ”์„œ๋“œ, ํ•„๋“œ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ํƒ€์ž„์— ์กด์žฌํ•˜์ง€ ์•Š๋˜ ํด๋ž˜์Šค๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ

2. ๋ฆฌํ”Œ๋ ‰์…˜ ๋‹จ์ 

  1. ์ปดํŒŒ์ผํƒ€์ž„ ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ์ฃผ๋Š” ์ด์ ์„ ํ•˜๋‚˜๋„ ๋ˆ„๋ฆด ์ˆ˜ ์—†๋‹ค
    • ํ”„๋กœ๊ทธ๋žจ์ด ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋Šฅ์„ ์จ์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ˜น์€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค ์‹œ๋„ํ•˜๋ฉด (์ฃผ์˜ํ•ด์„œ ๋Œ€๋น„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋‘์ง€ ์•Š์•˜๋‹ค๋ฉด) ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ
  2. ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๊ณ  ์žฅํ™ฉํ•ด์ง„๋‹ค.
  3. ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    • ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์€ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆฌ๋‹ค.

โ†’ ๋ฆฌํ”Œ๋ ‰์…˜์€ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์—๋งŒ ์“ฐ๊ณ , ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ฐธ์กฐํ•ด ์‚ฌ์šฉํ•˜์ž.



๐Ÿ’ก ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•˜๋ผ

โ€œ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ด์ฃผ๋Š” ์ผ์€ ๋งŽ์ง€ ์•Š๋‹คโ€

1. ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ์˜ ์“ฐ์ž„

  • ์ž๋ฐ” ๋„ค์ดํ‹ฐ๋ธŒ ์ธํ„ฐํŽ˜์ด์Šค(JNI)๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ์ˆ 
    • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ž€ C๋‚˜ C++ ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋งํ•จ
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ์˜ ์ฃผ์š” ์“ฐ์ž„
    1. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ™์€ ํ”Œ๋žซํผ ํŠนํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ
    2. ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋œ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ
    3. ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๋ชฉ์ ์œผ๋กœ ์„ฑ๋Šฅ์— ๊ฒฐ์ •์ ์ธ ์˜ํ–ฅ์„ ์ฃผ๋Š” ์˜์—ญ๋งŒ ๋”ฐ๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋กœ ์ž‘์„ฑ
  • ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ๋ชฉ์ ์œผ๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
    • JVM์€ ์—„์ฒญ๋‚œ ์†๋„๋กœ ๋ฐœ์ „ํ•ด์™”์Œ. ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์—์„œ ์ง€๊ธˆ์˜ ์ž๋ฐ”๋Š” ๋‹ค๋ฅธ ํ”Œ๋žซํผ์— ๊ฒฌ์ค„๋งŒํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ž„.

2. ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ์˜ ๋‹จ์ 

  1. ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ๋ฉ”๋ชจ๋ฆฌ ํ›ผ์† ์˜ค๋ฅ˜๋“ค๋กœ๋ถ€ํ„ฐ ๋” ์ด์ƒ ์•ˆ์ „ํ•˜์ง€ ์•Š์Œ.
  2. ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋Š” ์ž๋ฐ”๋ณด๋‹ค ํ”Œ๋žซํผ์„ ๋” ๋งŽ์ด ํƒ€์„œ ์ด์‹์„ฑ๋„ ๋‚ฎ๋‹ค. ๋””๋ฒ„๊น…๋„ ์–ด๋ ต๋‹ค
  3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ž๋™ ํšŒ์ˆ˜ํ•˜์ง€ ๋ชปํ•˜๊ณ , ์‹ฌ์ง€์–ด ์ถ”์ ์กฐ์ฐจ ํ•  ์ˆ˜ ์—†๋‹ค.
  4. ์ž๋ฐ” ์ฝ”๋“œ์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค ๋•Œ๋งˆ๋‹ค ๋น„์šฉ๋„ ์ถ”๊ฐ€๋œ๋‹ค.

โ†’ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ฑฐ๋“  ํ•œ๋ฒˆ ๋” ์ƒ๊ฐํ•ด๋ณด์ž. ์ €์ˆ˜์ค€ ์ž์›์ด๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•ด์„œ ์–ด์ฉ” ์ˆ˜ ์—†๋”๋ผ๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์ตœ์†Œํ•œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ฒ ์ €ํžˆ ํ…Œ์ŠคํŠธํ•˜๋ผ.



๐Ÿ’ก ์ตœ์ ํ™”๋Š” ์‹ ์ค‘ํžˆ ํ•˜๋ผ

โ€œ์„ฃ๋ถ€๋ฅธ ์ตœ์ ํ™”๊ฐ€ ๋งŒ์•…์˜ ๊ทผ์› - ๋„๋„๋“œ ํฌ๋ˆ„์Šคโ€

  • ์„ฑ๋Šฅ ๋•Œ๋ฌธ์— ๊ฒฌ๊ณ ํ•œ ๊ตฌ์กฐ๋ฅผ ํฌ์ƒํ•˜์ง€ ๋ง์ž. ๋น ๋ฅธ ํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค๋Š” ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.
    • ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์€ ์ •๋ณด ์€๋‹‰ ์›์น™์„ ๋”ฐ๋ฅด๋ฏ€๋กœ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ์˜ ๋‚ด๋ถ€๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Œ. โ†’ ์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ ๋„ ๊ฐ ์š”์†Œ๋ฅผ ๋‹ค์‹œ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์„ฑ๋Šฅ์„ ์ œํ•œํ•˜๋Š” ์„ค๊ณ„๋ฅผ ํ”ผํ•˜๋ผ
    • ์™„์„ฑ ํ›„ ๋ณ€๊ฒฝํ•˜๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šด ์„ค๊ณ„ ์š”์†Œ๋Š” ๋ฐ”๋กœ ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ, ํ˜น์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์†Œํ†ต ๋ฐฉ์‹์ด๋‹ค. โ†’ API, ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ, ์˜๊ตฌ ์ €์žฅ์šฉ ๋ฐ์ดํ„ฐ ํฌ๋งท ๋“ฑ
  • API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์„ฑ๋Šฅ์— ์ฃผ๋Š” ์˜ํ–ฅ์„ ๊ณ ๋ คํ•˜๋ผ.
    • ์ปดํฌ์ง€์…˜์œผ๋กœ ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•จ์—๋„ ์ƒ์†์œผ๋กœ ์„ค๊ณ„ํ•œ public ํด๋ž˜์Šค โ†’ ์ƒ์œ„ ํด๋ž˜์Šค์— ์˜์›ํžˆ ์ข…์†๋˜๋ฉฐ ๊ทธ ์„ฑ๋Šฅ์ œ์•ฝ๊นŒ์ง€๋„ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋จ.
  • ์„ฑ๋Šฅ์„ ์œ„ํ•ด API๋ฅผ ์™œ๊ณกํ•˜๋Š” ๊ฑด ๋งค์šฐ ์•ˆ ์ข‹์€ ์ƒ๊ฐ์ด๋‹ค.
  • ๊ฐ๊ฐ์˜ ์ตœ์ ํ™” ์‹œ๋„ ์ „ํ›„๋กœ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๋ผ
    • ์‹œ๋„ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ์„ฑ๋Šฅ์„ ๋ˆˆ์— ๋„๊ฒŒ ๋†’์ด์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ์‹ฌ์ง€์–ด ๋” ๋‚˜๋น ์ง€๊ฒŒ ํ•  ๋•Œ๋„ ์žˆ์Œ.
    • ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ, jmh ๋“ฑ์„ ํ™œ์šฉํ•˜์ž

โ†’ ๋น ๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ ค ์•ˆ๋‹ฌํ•˜์ง€ ๋ง์ž. ์ข‹์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ์„ฑ๋Šฅ์€ ๋”ฐ๋ผ ์˜ค๊ธฐ ๋งˆ๋ จ์ด๋‹ค.



๐Ÿ’ก ์ผ๋ฐ˜์ ์œผ๋กœ ํ†ต์šฉ๋˜๋Š” ๋ช…๋ช… ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ผ

โ€œํ‘œ์ค€ ๋ช…๋ช… ๊ทœ์น™์„ ์ฒดํ™”ํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฒ ์–ด ๋‚˜์˜ค๋„๋ก ํ•˜์žโ€

1. ์ฒ ์ž ๊ทœ์น™

  • ์ฒ ์ž ๊ทœ์น™์€ ํŒจํ‚ค์ง€, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ, ํƒ€์ž… ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋‹ค๋ฃฌ๋‹ค.
  • ํŒจํ‚ค์ง€
    • ํŒจํ‚ค์ง€์™€ ๋ชจ๋“ˆ ์ด๋ฆ„์€ ๊ฐ ์š”์†Œ๋ฅผ ์ (.)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ณ„์ธต์ ์œผ๋กœ ์ง“๋Š”๋‹ค.
      • ex) com.google
    • ํŒจํ‚ค์ง€ ์ด๋ฆ„์˜ ๋‚˜๋จธ์ง€๋Š” ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์†Œ๋กœ ์ด๋ค„ ์ง„๋‹ค.
      • ์ผ๋ฐ˜์ ์œผ๋กœ 8์ž ์ดํ•˜์˜ ์งง์€ ๋‹จ์–ด๋กœ ํ•œ๋‹ค. ex) util
    • ์ธํ„ฐ๋„ท ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋’ค์— ์š”์†Œ ํ•˜๋‚˜๋งŒ ๋ถ™์ธ ํŒจํ‚ค์ง€๊ฐ€ ๋งŽ์ง€๋งŒ, ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ์—” ๊ณ„์ธต์„ ๋‚˜๋ˆ  ๋” ๋งŽ์€ ์š”์†Œ๋กœ ๊ตฌ์„ฑํ•ด๋„ ์ข‹๋‹ค. (ํ•˜์œ„ ํŒจํ‚ค์ง€; subpackage)
  • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
    • (์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์–ด๋…ธํ…Œ์ด์…˜์„ ํฌํ•จํ•ด) ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹จ์–ด๋กœ ์ด๋ค„์ง€๋ฉฐ, ๊ฐ ๋‹จ์–ด๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
      • max, min ์ฒ˜๋Ÿผ ๋„๋ฆฌ ํ†ต์šฉ๋˜๋Š” ์ค„์ž„๋ง์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹จ์–ด๋ฅผ ์ค„์—ฌ์“ฐ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ
    • ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ ์ด๋ฆ„์€ ์ฒซ ๊ธ€์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ์“ด๋‹ค๋Š” ์ ๋งŒ ๋นผ๋ฉด ํด๋ž˜์Šค ๋ช…๋ช… ๊ทœ์น™๊ณผ ๊ฐ™๋‹ค.
      • ์ƒ์ˆ˜ ํ•„๋“œ๋Š” ์˜ˆ์™ธ๋‹ค. ์ƒ์ˆ˜ ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์–ด๋Š” ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์“ฐ๋ฉฐ ๋‹จ์–ด ์‚ฌ์ด๋Š” ๋ฐ‘์ค„๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
    • ์ง€์—ญ๋ณ€์ˆ˜์—๋„ ๋‹ค๋ฅธ ๋ฉค๋ฒ„์™€ ๋น„์Šทํ•œ ๋ช…๋ช… ๊ทœ์น™์ด ์ ์šฉ๋œ๋‹ค. ๋‹จ, ์•ฝ์–ด๋ฅผ ์จ๋„ ์ข‹๋‹ค.
      • ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ง€์—ญ๋ณ€์ˆ˜์˜ ํ•˜๋‚˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ ์„ค๋ช… ๋ฌธ์„œ์—๊นŒ์ง€ ๋“ฑ์žฅํ•˜๋Š” ๋งŒํผ ์ผ๋ฐ˜ ์ง€์—ญ๋ณ€์ˆ˜๋ณด๋‹ค๋Š” ์‹ ๊ฒฝ์„ ์จ์•ผํ•œ๋‹ค.
  • ํƒ€์ž… ๋ณ€์ˆ˜
    • ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๋ณดํ†ต ํ•œ ๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ๋‹ค์Œ์˜ ๋‹ค์„ฏ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋‹ค. ์ž„์˜์˜ ํƒ€์ž…์—” T, ์ปฌ๋ ‰์…˜ ์›์†Œ์˜ ํƒ€์ž…์€ E, ๋งต์˜ ํ‚ค์™€ ๊ฐ’์—๋Š” K์™€ V, ์˜ˆ์™ธ์—๋Š” X, ๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž…์—๋Š” R
  • ์ฒ ์ž ๊ทœ์น™ ์ •๋ฆฌ ํ‘œ
์‹๋ณ„์ž ํƒ€์ž…์˜ˆ
ํŒจํ‚ค์ง€์™€ ๋ชจ๋“ˆorg.junit.jupiter.api, com.google.common.collect
ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์ŠคStream, FutureTask, LinkedHashMap, HttpClient
๋ฉ”์„œ๋“œ์™€ ํ•„๋“œremove, groupingBy, getCrc
์ƒ์ˆ˜ ํ•„๋“œMIN_VALUE, NEGATIVE_INFINITY
์ง€์—ญ๋ณ€์ˆ˜i, denom, houseNum
ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜T, E, K, V, X, R, U, V, T1, T2

2. ๋ฌธ๋ฒ• ๊ทœ์น™

  • ๋ฌธ๋ฒ• ๊ทœ์น™์€ ์ฒ ์ž ๊ทœ์น™๊ณผ ๋น„๊ตํ•˜๋ฉด ๋” ์œ ์—ฐํ•˜๊ณ  ๋…ผ๋ž€๋„ ๋งŽ๋‹ค.
  • ํŒจํ‚ค์ง€
    • ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๊ทœ์น™์€ ๋”ฐ๋กœ ์—†์Œ
  • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ๋ณดํ†ต ๋‹จ์ˆ˜ ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•จ.
      • ex) Thread, PriorityQueue ๋“ฑ
    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค์˜ ์ด๋ฆ„์€ ๋ณดํ†ต ๋ณต์ˆ˜ํ˜• ๋ช…์‚ฌ๋กœ ์ง€์Œ
      • ex) Collectors, Collections ๋“ฑ
    • ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์€ ํด๋ž˜์Šค์™€ ๋˜‘๊ฐ™์ด ์ง“๊ฑฐ๋‚˜, able ํ˜น์€ ible๋กœ ๋๋‚˜๋Š” ํ˜•์šฉ์‚ฌ๋กœ ์ง“๋Š”๋‹ค.
      • ex) Runnable, Iterable, Accessible ๋“ฑ
    • ์–ด๋…ธํ…Œ์ด์…˜์€ ์›Œ๋‚™ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉ๋˜์–ด ์ง€๋ฐฐ์ ์ธ ๊ทœ์น™์ด ์—†์ด ๋ช…์‚ฌ, ๋™์‚ฌ, ์ „์น˜์‚ฌ, ํ˜•์šฉ์‚ฌ๊ฐ€ ๋‘๋ฃจ ์“ฐ์ž„
  • ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ
    • ์–ด๋–ค ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋™์‚ฌ๋‚˜ (๋ชฉ์ ์–ด๋ฅผ ํฌํ•จํ•œ) ๋™์‚ฌ๊ตฌ๋กœ ์ง“๋Š”๋‹ค.
      • ex) append, drawImage ๋“ฑ
    • boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด ๋ณดํ†ต is๋‚˜ (๋“œ๋ฌผ๊ฒŒ) has๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ๊ตฌ, ํ˜น์€ ํ˜•์šฉ์‚ฌ๋กœ ๊ธฐ๋Šฅํ•˜๋Š” ์•„๋ฌด ๋‹จ์–ด๋‚˜ ๊ตฌ๋กœ ๋๋‚˜๋„๋ก ์ง“๋Š”๋‹ค.
      • ex) isDigit , isEmpty, isEnabled ๋“ฑ
    • ๋ฐ˜ํ™˜ํƒ€์ž…์ด boolean์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณดํ†ต ๋ช…์‚ฌ, ๋ช…์‚ฌ๊ตฌ, ํ˜น์€ get์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋™์‚ฌ๊ตฌ๋กœ ์ง“๋Š”๋‹ค.
      • ex) size, hashCode, getTime ๋“ฑ
    • ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๋ฐ”๊ฟ”์„œ, ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณดํ†ต toType ํ˜•ํƒœ๋กœ ์ง“๋Š”๋‹ค
      • ex) toString, toArray ๋“ฑ
    • ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋‹ค๋ฅธ ๋ทฐ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ asType ํ˜•ํƒœ๋กœ ์ง“๋Š”๋‹ค.
      • ex) asList ๋“ฑ
    • ๊ฐ์ฒด์˜ ๊ฐ’์„ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณดํ†ต typeValue ํ˜•ํƒœ๋กœ ์ง“๋Š”๋‹ค.
      • ex) intValue ๋“ฑ
    • ์ •์  ํŒฉํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ from, of, valueOf, instance, getInstance, newInstance, getType, newType์„ ํ”ํžˆ ์‚ฌ์šฉํ•œ๋‹ค.
    • boolean ํƒ€์ž…์˜ ํ•„๋“œ ์ด๋ฆ„์€ **๋ณดํ†ต boolean ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ์—์„œ ์•ž ๋‹จ์–ด๋ฅผ ๋บ€ ํ˜•ํƒœ**๋‹ค.
      • ex) initialized, composite ๋“ฑ
    • boolean์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ํ•„๋“œ๋ผ๋ฉด ๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      • ex) height, digits, bodyStyles ๋“ฑ
    • ์ง€์—ญ๋ณ€์ˆ˜ ์ด๋ฆ„๋„ ํ•„๋“œ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ง€์œผ๋ฉด ๋˜๋‚˜, ์กฐ๊ธˆ ๋” ๋Š์Šจํ•˜๋‹ค.
profile
https://dev-peter.online/

0๊ฐœ์˜ ๋Œ“๊ธ€