mc.thd 2024. 1. 5. 15:54
java๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

JAVA์˜ ๋™์ž‘๊ณผ์ •

 

๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ์žฅ์ 

1. ์ƒ์† ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

2. ์ผ์ƒ์ƒํ™œ ๋ชจ์Šต์˜ ๊ตฌ์กฐ๊ฐ€ ๊ฐ์ฒด์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…น์•„๋“ค์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์ž˜ ์„ค๊ณ„๋œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋…๋ฆฝ๋œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.

 

๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ๋‹จ์ 

1. ๊ฐ์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๊ธฐ์— ์„ค๊ณ„๋‹จ๊ณ„๋ถ€ํ„ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค.

2. ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋Š” ๋Œ€์ฒด์ ์œผ๋กœ ์‹คํ–‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

3. ๋‹ค์ค‘์ƒ์†์ด ์ง€์›๋˜๋Š” c++์˜ ๊ฒฝ์šฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ ์ฝ”๋”ฉ์˜ ๋‚œ์ด๋„๊ฐ€ ์ƒ์Šนํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •

1. ์ž๋ฐ”์ปดํŒŒ์ผ๋Ÿฌ(javac)์— ์˜ํ•ด์„œ .java ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

2. Class Loader๋ฅผ ํ†ตํ•ด class ํŒŒ์ผ๋“ค์„ jvm์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.

3. ๋กœ๋”ฉ๋œ class ํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.

4. ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

5. ์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ • ์† jvm์€ ํ•„์š”์— ๋‹ค๋ผ Thread Synchronization ๊ณผ GC๊ฐ™์€ ๊ด€๋ฆฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

JVM์˜ ๊ตฌ์กฐ

jvm์€ ํฌ๊ฒŒ ํด๋ž˜์Šค ๋กœ๋”(Class Loader), ์‹คํ–‰์—”์ง„(Execution Engine), ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Area)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 

ํด๋ž˜์Šค๋กœ๋”๋Š” class ํŒŒ์ผ์„ jvm๋‚ด๋กœ ๋กœ๋“œํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์‹คํ–‰์—”์ง„์€ ๋กœ๋“œ๋œ class ํŒŒ์ผ์„ jvm ๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ Just In Time ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.classํŒŒ์ผ)์€ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ ์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ heap ์˜์—ญ์€ GC์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

  • Class Loader
    • jvm๋‚ด๋กœ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ
  • Execution Engine(์‹คํ–‰ ์—”์ง„)
    • ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• .
    • ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋Š” ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ณด๋‹ค๋Š” ๋น„๊ต์  ์ธ๊ฐ„์ด ๋ณด๊ธฐ ํŽธํ•œ ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ๋œ ๊ฒƒ.
    • ์‹คํ–‰ ์—”์ง„์€ ์ด์™€ ๊ฐ™์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ jvm๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด ๋•Œ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉ
      • Interpreter(์ธํ„ฐํ”„๋ฆฌํ„ฐ)
        • ์‹คํ–‰ ์—”์ง„์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ๋‹จ์ ์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ  ์žˆ๋‹ค. ํ•œ ์ค„์”ฉ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค๋Š” ๊ฒƒ
      • JIT(Just-In-Time)
        • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ๋ณด์™„
        • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ๋” ์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. JIT์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํ•œ ๋ฒˆ ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ๋ฉด ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜๋Š”๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Area)
    • ํž™ ์˜์—ญ(Heap)
      • ๊ฐ์ฒด์™€ ๋ฐฐ์—ด, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜๋Š” ์˜์—ญ
      • ๋ชจ๋“  thread์—์„œ ๊ณต์œ ๋˜๋Š” ํŠน์ง•์ด ์žˆ์Œ. gc๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์˜์—ญ
      • young ์˜์—ญ๊ณผ old ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, young ์˜์—ญ์€ eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ survivor ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง
    • ์Šคํƒ ์˜์—ญ(Stack)
      • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ๋‚ด์—ญ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ.
      • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง.
    • ๋ฉ”์„œ๋“œ ์˜์—ญ(Method Area) (=ํด๋ž˜์Šค=์Šคํƒœํ‹ฑ)์˜์—ญ
      • ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ ์ •๋ณด์™€ ํด๋ž˜์Šค ๋ณ€์ˆ˜(static int) ์ •๋ณด ์ €์žฅ
      • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ
    • PC ๋ ˆ์ง€์Šคํ„ฐ
      • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค jvm์ด ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ
    • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ
      • ์ž๋ฐ”๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์‹คํ–‰๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์˜์—ญ

 

GC์˜ ๋™์ž‘ ๊ณผ์ •

  • gc๋Š” ํฌ๊ฒŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋  ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” mark๊ณผ์ •๊ณผ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” sweep ๊ณผ์ •์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. heap ๋ฉ”๋ชจ๋ฆฌ์˜ young์˜์—ญ(Eden, Survivor0, Survivor1)์— ๋Œ€ํ•ด์„œ minor gc๊ฐ€ ์ˆ˜ํ–‰๋˜๊ณ  old์˜์—ญ์œผ๋กœ promotion ๋œ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•ด์„œ major gc๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ old์˜์—ญ์ด young์˜์—ญ๋ณด๋‹ค ํฌ๊ธฐ๋•Œ๋ฌธ์— major gc์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ major gc์ˆœ๊ฐ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ์ฒ˜์Œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” Young Generation์˜ Eden ์˜์—ญ์— ์œ„์น˜
  2. Eden์˜์—ญ์ด ๋‹ค์ฐจ๊ฒŒ ๋˜๋ฉด minor gc๊ฐ€ ์ˆ˜ํ–‰
  3. mark ๋™์ž‘์„ ํ†ตํ•ด์„œ unreachableํ•œ ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰
  4. Eden์˜์—ญ์—์„œ reachable์ธ ๊ฐ์ฒด๋Š” survivor ์˜์—ญ์œผ๋กœ ์ด๋™
  5. Eden์˜์—ญ์—์„œ unreachable์ธ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ(sweep)
  6. ์‚ด์•„๋‚จ์€ ๋ชจ๋“  ๊ฐ์ฒด์˜ age ๊ฐ’์ด ์ฆ๊ฐ€
  7. ๋˜๋‹ค์‹œ Eden์˜์—ญ์ด ๋‹ค์ฐจ๊ฒŒ ๋˜๋ฉด minor gc๊ฐ€ ์ˆ˜ํ–‰
  8. Old Generation ์˜์—ญ์ด ๋‹ค์ฐจ๊ฒŒ ๋˜๋ฉด major gc๊ฐ€ ์ˆ˜ํ–‰

์ž๋ฐ”์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•˜์—ฌ ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ˜ํ™˜์‹œํ‚ต๋‹ˆ๋‹ค.

 

์ž๋ฐ”๊ฐ€ ๊ฐ€๋น„์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ์•„๋‚ผ๊นŒ?
์ฐธ์กฐํ•˜๋Š” ๋ž˜ํผ๋Ÿฐ์Šค๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ๊ฐ€๋น„์ง€๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ•์ œ ์š”์ฒญ 

System.gc(); // ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ•์ œ ์š”์ฒญ

ํ•˜์ง€๋งŒ ์ด ๋ฌธ์žฅ์„ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ฆ‰์‹œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์š”์ฒญ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.)

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ž๋ฐ” ํ”Œ๋žซํผ์ด ์ „์ ์œผ๋กœ ํŒ๋‹จํ•˜์—ฌ ์ ์ ˆํ•œ ์‹œ์ ์— ์ž‘๋™์‹œํ‚ต๋‹ˆ๋‹ค.

โ—System.gc() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ผ์น˜๋ฏ€๋กœ ์ ˆ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (https://d2.naver.com/helloworld/1329)

 

 


JAVA์˜ ํŠน์ง•๊ณผ ๋ฉ”์„œ๋“œ

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์žฅ์  : ๋ธ”๋ก ํ˜•ํƒœ์˜ ๋ชจ๋“ˆํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅ, ์‹ ๋ขฐ์„ฑ ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ, ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ ์šฉ์ด, ์žฌ์‚ฌ์šฉ์„ฑ ๋†’๋‹ค.

OOP is A PIE

A (Abstraction) : ์ถ”์ƒํ™”, ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐ์ฒด๋ฅผ ์ถ”์ƒํ™”ํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

P (Polymorphism) : ๋‹คํ˜•์„ฑ, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ƒ์† ๊ด€๊ณ„์˜ ๋‹คํ˜•์„ฑ์„ ์ด์•ผ๊ธฐ

I (Inheritance): ์ƒ์†, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž์‚ฐ์„ ๋ฌผ๋ ค๋ฐ›์•„ ์ž์‹์„ ์ •์˜ํ•จ์œผ๋กœ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

E (Encapsulation) : ๋ฐ์ดํ„ฐ ์€๋‹‰๊ณผ ๋ณดํ˜ธ, ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์— ์ง์ ‘ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

ํ˜„์‹ค ์„ธ๊ณ„ ๊ฐ์ฒด, ํด๋ž˜์Šค, ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด์˜ ๊ด€๊ณ„

ํ˜„์‹ค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์€ ์ถ”์ƒํ™” ๋˜์–ด ํด๋ž˜์Šค์— ์ •์˜๋œ๋‹ค.

ํด๋ž˜์Šค๋Š” ๊ตฌ์ฒดํ™” ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

Object : ์‹ค์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ๊ฒƒ, ์œ ์ผ์„ฑ์„ ๊ฐ€์ง

Class : ์‹ค์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ์ปดํ“จํ„ฐ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด Class๋ฅผ ์‚ฌ์šฉ

Instance : newํด๋ž˜์Šค(์ƒ์„ฑ์ž)๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

 

์ž๋ฐ” : static type (๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์ „์— ์„ ์–ธํ•ด์•ผ ํ•จ)

ํŒŒ์ด์ฌ : dynamic type

 

์ž๋ฐ”๋Š” ๋ฐฐ์—ด์„ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐฐ์—ด์— length ํ•„๋“œ๊ฐ€ ์žˆ์Œ)

 

 

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ(=์ •์ ๋ฐ”์ธ๋”ฉ)

  • ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ๋™์ผํ•˜์—ฌ์•„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์ด ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
class Test{
	public int getSum(int i,int j){
		return i+j;    
    }
    public double getSum(int i,int j){ // ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ ์‹คํŒจ, ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    	return (double)(i + j);
    }

}

๋ฆฌํ„ดํƒ€์ž…์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

static์ด๋‚˜ private ๋˜๋Š” final๋กœ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(=๋™์ ๋ฐ”์ธ๋”ฉ) ํ•  ์ˆ˜ ์—†๋‹ค.

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ(=๋™์ ๋ฐ”์ธ๋”ฉ)

์‹คํ–‰ํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์ปดํŒŒ์ผ ์‹œ์— ๊ฒฐ์ •ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ ์‹œ(๋Ÿฐํƒ€์ž„)์— ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ.

์ด๋ฅผ ํ†ตํ•ด ์ž๋ฐ”๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

 

์ž๋ฐ”๋Š” semi boolean(1 ์€ ์ฐธ, 0 ์€ ๊ฑฐ์ง“๊ณผ ๊ฐ™์€ bool์€ ์•„๋‹ˆ์ง€๋งŒ bool์ฒ˜๋Ÿผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค ⇒ true false๋งŒ ์ง€์›ํ•œ๋‹ค

 

int(4byte) ๋Š” -20์–ต ~ 20์–ต ๊นŒ์ง€ ํ‘œํ˜„๊ฐ€๋Šฅ

 

๋ฌต์‹œ์  ํ˜• ๋ณ€ํ™˜ : ์ž‘์€ ํฌ๊ธฐ์˜ ํƒ€์ž…์€ ํฐ ํฌ๊ธฐ์˜ ํƒ€์ž…์œผ๋กœ ์ž๋™ ํ˜• ๋ณ€ํ™˜๋จ.

๋ช…์‹œ์  ํ˜• ๋ณ€ํ™˜ : ํฐ ํฌ๊ธฐ์˜ ํƒ€์ž…์„ ์ž‘์€ ํฌ๊ธฐ์˜ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์ค˜์•ผ ํ•จ(๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Œ)

 

์ •์ˆ˜ํ˜•์˜ ๊ธฐ๋ณธ์€ int์ด๋‹ค.

int i1 = Integer.MAX_VALUE;
long l1 = (long)(i1 + 1);
System.out.println(l1);

๊ฐ’์ด ๊นจ์ง„๋‹ค (์—ฐ์‚ฐ์˜ ๊ธฐ๋ณธ๋‹จ์œ„๋Š” int์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ๊ฐ’์ด ๊นจ์ง„ ์ƒํƒœ๋กœ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ๋‹ค)

int i1 = Integer.MAX_VALUE;

long l2 = (long)i1 + 1;
System.out.println(l2);

๊ฐ’์ด ๊นจ์ง€์ง€ ์•Š๊ณ  ์‹คํ–‰๋œ๋‹ค.

 

 

์‹ค์ˆ˜ํ˜•์˜ ๊ธฐ๋ณธ์€ double์ด๋‹ค.

  • float(4byte)
  • double(8byte)
public class A {
	
		public static void main(String[] args) {
			
			float f1 = 2.0f; // f๋ฅผ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค (2.0์œผ๋กœ ์ ์œผ๋ฉด doubleํ˜•์ด ๊ธฐ๋ณธ)
			float f2 = (float)2.0; // ํ˜น์€ ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
			double d1 = 4.0;
			
		}
	
	}

 

์‹ค์ˆ˜์˜ ์—ฐ์‚ฐ์€ ๋ถ€์ •ํ™•ํ•˜๋‹ค.

์‹ค์ˆ˜๋Š” ๊ทผ์‚ฟ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.

์‹ค์ˆ˜๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ”๊ฟ”์„œ ๊ณ„์‚ฐํ•˜๊ณ  ๋‹ค์‹œ ์‹ค์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •ํ™•์„ฑ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

double d1 = 2.0;
double d2 = 1.1;

double result = ((int)(d1*100)-(int)(d2*100))/100.0;

 

๋ฌธ์ž '0' : 48

๋ฌธ์ž 'A'๋Š” 65

 

shift ์—ฐ์‚ฐ

์ •์ˆ˜์—์„œ๋งŒ ์“ฐ์ธ

<< ํ•œ ๋ฒˆ์€ ๊ณฑํ•˜๊ธฐ 2

>> ํ•œ ๋ฒˆ์€ ๋‚˜๋ˆ„๊ธฐ 2

(s = s<<10) == (s*=1024)

 

ํด๋ž˜์Šค๋ณ€์ˆ˜(=static๋ณ€์ˆ˜)

public class Solution {

	static int[] a ;

	public static void main(String[] args) {

		
		System.out.println(a);
	
	}

}

์ถœ๋ ฅ์œผ๋กœ null์ด ๋‚˜์˜จ๋‹ค.

ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ 'null'๊ฐ’์„ ๊ฐ€์ง.

 

Arrays.copyOf()

int[][] originalArray = {{1,2,3},{4,5,6},{7,8,9}};

int[][] copiedArray = new int[originalArray.length][];

for(int i=0;i<originalArray.length;i++){
	copiedArray[i] = Arrays.copyOf(originalArray[i],originalArray[i].length);
}

๊นŠ์€๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

(์—ฌ๊ธฐ์„œ ์ฒ˜๋Ÿผ 2์ฐจ์› ๋ฐฐ์—ด copiedArray๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ–‰ ๋ถ€๋ถ„๋งŒ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ๋„ ์žˆ๋‹ค.)


Arrays.copyOfRange()

int[] arr = {0,1,2,3,4,5};

int[] arr1 = Arrays.copyOfRange(arr,0,3);
// [0,1,2]

int[] arr2 = Arrays.copyOfRange(arr,3,arr.length);
// [3,4,5]

ํŠน์ • ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด ์ž๋ฅด๋Š” ํ•จ์ˆ˜

 

 

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋ฐฑ๊ฐœ๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•ด๋„ method๋Š” ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

reference type๊ณผ wrapper ํด๋ž˜์Šค ๋น„๊ต

reference type์€ primitive type์ด ์•„๋‹Œ ๋ชจ๋“  ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ„

wrapperํด๋ž˜์Šค๋Š” primitive type์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

์ฆ‰ wrapperํด๋ž˜์Šค๋Š” reference type์ด์ง€๋งŒ, ๋ชจ๋“  reference type์ด wrapper ํด๋ž˜์Šค๋Š” ์•„๋‹˜.

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ : ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉ

์˜ค๋ฒ„๋กœ๋”ฉ : ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํ˜•๊ณผ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ 

 

HashSet์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ HashMap ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

ArrayList์˜ contains๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด๊ณ  HashSet์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(1) ์ด๋‹ค. 

 

๋ฉ”์„œ๋“œ

String 

String์€ immutableํ•˜๋‹ค.

String str = "mincheol";

// ๋นˆ ๋ฌธ์ž์—ด ์ฒดํฌ
str.isEmpty(); 

// ๋ฌธ์ž ์ฐพ๊ธฐ
str.charAt(0); // 'm' : char ๋ฌธ์ž ๋ฐ˜ํ™˜
str.indexOf("m"); // 0 : ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
str.lastIndexOf("h") // 4 : ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์ž๊ฐ€ ์†ํ•œ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜

// ๋ฌธ์ž ์ž๋ฅด๊ธฐ
str.substring(1,3); // "in" : ์ธ๋ฑ์Šค 1 ์ด์ƒ 3๋ฏธ๋งŒ ์œ„์น˜์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
str.substring(3); // "min" : ์ธ๋ฑ์Šค 3 ๋ฏธ๋งŒ ์œ„์น˜์˜ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜

// ๋ฌธ์ž ๋น„๊ต
/**
* str์ด "mincheoz"์™€ ๊ฐ™์œผ๋ฉด 0
* str์ด "mincheoz"๋ณด๋‹ค ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์ด๋ฉด -1
* str์ด "mincheoz"๋ณด๋‹ค ์‚ฌ์ „์ˆœ์œผ๋กœ ๋’ค๋ฉด 1
*/
str.compareTo("mincheoz"); // -1

// ๋ฌธ์ž ํฌํ•จ์—ฌ๋ถ€ ํŒ๋‹จ
str.contains("min");

// ๋ฌธ์ž์—ด ๋ถ„๋ฆฌ
str.split(" "); // ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด str์„ ๋ถ„๋ฆฌํ•˜์—ฌ String[] ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
str.split(""); // ๋„์–ด์“ฐ๊ธฐ ์—†๋Š” ๋ฌธ์ž์—ด str์„ ํ•œ ๋ฌธ์ž์”ฉ ๋ถ„๋ฆฌํ•˜์—ฌ String[] ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

// ๋ฌธ์ž ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ
str.trim(); // str์˜ ์•ž๋’ค ๊ณต๋ฐฑ์„ ์ œ๊ฑฐ. ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์€ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Œ

// ๋ฌธ์ž <-> ์ˆซ์ž ๋ณ€ํ™˜
Integer.parseInt("100");
Integer.toString(100);

 

StringBuilder

String์€ immutable ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด์ง€๋ฉด ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ StringBuilder๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

StringBuilder sb = new StringBuilder();

sb.append("apple");

// ํŠน์ • ์ธ๋ฑ์Šค์— ๋ฌธ์ž ์‚ฝ์ž…
sb.insert(2,"oo"); // "apoople"

// ๋ฌธ์ž์—ด ์‚ญ์ œ
sb.delete(0,2); // "oople"

// ํŠน์ •์ธ๋ฑ์Šค ๋ฌธ์ž ์‚ญ์ œ
sb.deleteCharAt(2); // "oole"

// ํŠน์ •์ธ๋ฑ์Šค ๋ฌธ์ž ๋ณ€๊ฒฝ
sb.setCharAt(1,'p'); // "ople"

// ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ
sb.reverse(); // "elpo"

// ๋ฌธ์ž์—ด ๊ธธ์ด ์ค„์ด๊ธฐ
sb.setLength(2); // "el"

// ๋ฌธ์ž์—ด ๊ธธ์ด ๋Š˜๋ฆฌ๊ธฐ (๋’ค์— ๋ฌธ์ž๋Š” ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์›Œ์ง)
sb.setLength(4); // "el  "

 

List ๊ด€๋ จ ๋ฉ”์†Œ๋“œ

List<Integer> list = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();

list.add(0);

// ํŠน์ • ์ธ๋ฑ์Šค์— ์š”์†Œ ์‚ฝ์ž…
list.add(0, 1); 
System.out.println(list.toString()); // [1, 0]

// ๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ(์ถ”๊ฐ€๋˜๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋’ค๋กœ ์˜ด)
list.addAll(list2);

// ํŠน์ • ์š”์†Œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
list.indexOf(0); // 1

// ํŠน์ • ์š”์†Œ์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
list.lastIndexOf(0); // 1

// ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’ ์‚ญ์ œ
list.remove(0); // ๊ฒฐ๊ณผ : [0]

// ํŠน์ • ์š”์†Œ์˜ ๊ฐ’ ์‚ญ์ œ
list.remove(Integer.valueOf(0)); // ๊ฒฐ๊ณผ : [1]

// ๋ฆฌ์ŠคํŠธ ์ฐจ์ง‘ํ•ฉ
list.removeAll(list2); // list์—์„œ list2์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ์‚ญ์ œ

// ๋ฆฌ์ŠคํŠธ ๊ต์ง‘ํ•ฉ
list.retainAll(list2); // list์—์„œ list2์— ์žˆ๋Š” ๊ฐ’์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’์„ ์‚ญ์ œ

// ํฌํ•จ์—ฌ๋ถ€ ์ฒดํฌ
list.contains(1);

// ๋ฆฌ์ŠคํŠธ์— ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ ์š”์†Œ๊ฐ€ ์ „๋ถ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ์ฒดํฌ
list.containAll(list2); // list์— list2์˜ ๋ชจ๋“  ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด true

// ๋žŒ๋‹ค์‹ ์‚ฌ์šฉํ•ด์„œ ์š”์†Œ๋“ค ์ œ๊ฑฐ
list.removeIf(x -> x%2==0) // list์—์„œ ์ง์ˆ˜์ธ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐ

 

๋ฐฐ์—ด <-> ๋ฆฌ์ŠคํŠธ

// ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜
String[] temp = {"apple", "banana", "lemon"};
List<String> list = new ArrayList<>(Arrays.asList(temp));


// ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
List<String> list = new ArrayList<>();
String[] temp = list.toArray(new String[0]); // new String[0] ํ•ด์ฃผ๋ฉด ์•Œ์•„์„œ ์‚ฌ์ด์ฆˆ ๋งž๊ฒŒ ๋ฐฐ์—ด ์ƒ์„ฑ

// List๋ฅผ int๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
List<Integer> list = new ArrayList<>();
int[] temp = list.stream().mapToInt(x -> x).toArray();

Arrays.asList์˜ return ๊ฐ’์€ java.util.Arrays.ArrayList ๋กœ, java.util.ArrayList์™€ ๋‹ค๋ฅด๋‹ค. 

๊ทธ๋ฆฌ๊ณ  immutableํ•˜๋‹ค.

 

๋”ฐ๋ผ์„œ

List<String> list = Arrays.asList("a","b","c");

์™€ ๊ฐ™์ด ์ƒ์„ฑํ•œ ArrayList๋Š” immutableํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

List<String> list = new ArrayList<>(Arrays.asList("a","b","c"));

์™€ ๊ฐ™์ด ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”

List<String> list = new ArrayList<>(){{
	add("a");
    add("b");
    add("c");
}};

 

Collections ๊ด€๋ จ ๋ฉ”์†Œ๋“œ

Integer[] arr = {1,2,3,10,28};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));

// ์ •์ˆ˜ํ˜• List ์›์†Œ ์ค‘ ์ตœ๋Œ€, ์ตœ์†Œ๊ฐ’
Collections.max(list);
Collections.min(list);

// List ์ •๋ ฌ
Collections.sort(list);
Collections.sort(list,Collections.reverseOrder());

// List ๋’ค์ง‘๊ธฐ
Collections.reverse(list);

// List ๋‚ด ์›์†Œ์˜ ๊ฐฏ์ˆ˜ ๋ฐ˜ํ™˜
Collections.frequency(list,3);

// ์ด์ง„ํƒ์ƒ‰
Collections.binarySearch(list,10);

Collections.max()์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.

 

Deque

Deque<Integer> q = new ArrayDeque<>();
q.offer(1);
q.offer(2);
q.offer(5);


q.contains(1); // true

q.remove(5);

contains ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

removeํ•จ์ˆ˜๋„ ์žˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n).

PriorityQueueํ•จ์ˆ˜๋„ removeํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์‚ญ์ œํ•˜๋Š” ์‹œ๊ฐ„ n๊ณผ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์šฐ์„ ์ˆœ์œ„๋กœ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„ logn์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค์„œ O(n + logn) ์ธ๋ฐ n์ด ์ง€๋ฐฐํ•˜๋ฏ€๋กœ O(n)์ด ๋œ๋‹ค.

 

HashMap

HashMap<Integer,String> hashMap = new HashMap<>();

hashMap.put(1,"๋”ธ๊ธฐ");
hashMap.put(2,"๋ฐ”๋‚˜๋‚˜");
hashMap.put(3,"์‚ฌ๊ณผ");

hashMap.remove(1); // key๊ฐ€ 1์ธ ์š”์†Œ ์‚ญ์ œ

hashMap.containsKey(1); // key ํฌํ•จ์—ฌ๋ถ€ ํ™•์ธ

hashMap.containsValue("์‚ฌ๊ณผ"); // value ํฌํ•จ์—ฌ๋ถ€ ํ™•์ธ

for(Integer key : hashMap.keySet()){
	System.out.println(key + " " + hashMap.get(key));
}

for(String value : hashMap.values()){
	System.out.println(value);
}

keySet() : key๊ฐ’๋“ค ๋‹ค 

values() : value๊ฐ’๋“ค ๋‹ค

 

hashMap์˜ value๋กœ hashMap์„ ํ™œ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ์ ์Œ

		Map<String, Object> genresMap = new HashMap<>();//<์žฅ๋ฅด, ๊ณก ์ •๋ณด> 
        Map<String, Integer> playMap = new HashMap<>(); //<์žฅ๋ฅด, ์ด ์žฅ๋ฅด ์žฌ์ƒ์ˆ˜>
        List<Integer> resultAL = new ArrayList<>();

        for(int i = 0; i < genres.length; i++){
            String key = genres[i];
            HashMap<Integer, Integer> infoMap;       // ๊ณก ์ •๋ณด : <๊ณก ๊ณ ์œ ๋ฒˆํ˜ธ, ์žฌ์ƒํšŸ์ˆ˜>

            if(genresMap.containsKey(key)){ // ํ•ด๋‹น ์žฅ๋ฅด๊ฐ€ genreMap์— ์žˆ์œผ๋ฉด?
                 infoMap = (HashMap<Integer, Integer>)genresMap.get(key);
            }else {
                infoMap = new HashMap<Integer, Integer>();
            }

            infoMap.put(i, plays[i]);
            genresMap.put(key, infoMap);

 

genreMap์˜ ๊ฒฝ์šฐ value๊ฐ’์œผ๋กœ ๋˜ ๋‹ค๋ฅธ HashMap์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

์žฅ๋ฅด ๋ณ„ ๊ณก ์ •๋ณด๋ฅผ ๊ฐ€์ง„  genreMap์€ <์žฅ๋ฅด : ๊ณก ์ •๋ณด>

๊ณก ์ •๋ณด๋ฅผ Objectํ˜•์œผ๋กœ ์„ ์–ธํ•œ ๋’ค, ํ˜• ๋ณ€ํ™˜์„ ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.


๊ณก์ •๋ณด infoMap๋Š” <๊ณก ๊ณ ์œ ๋ฒˆํ˜ธ : ์žฌ์ƒํšŸ์ˆ˜> ์ด๋‹ค.