๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…์„œ

์ž๋ฐ”์˜ ์‹ (1, 2๊ถŒ)

๐Ÿ“š

์ž๋ฐ”์˜ ์‹ 

  • ๊ธฐ๋ณธ ํƒ€์ž…์€ 8 ๊ฐœ๋‹ค (์ •์ˆ˜ 5๊ฐœ, ์‹ค์ˆ˜ 2๊ฐœ, ๋ถˆ๋ฆฌ์–ธ 1๊ฐœ)
  • ๋ณ€์ˆ˜๋Š” ๋„ค๊ฐ€์ง€ (์ง€์—ญ, ๋งค๊ฐœ, ์ธ์Šคํ„ด์Šค, ํด๋ž˜์Šค)
  • VO ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ๋‘๊ธฐ ์œ„ํ•œ ๋ชฉ์ 
  • DTO ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์  (DTO ๊ฐ€ VO ๋ฅผ ํฌํ•จ)
  • ํด๋ž˜์Šค์— static ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค.

 

  • static ๋ธ”๋Ÿญ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๊ณ , ๊ทธ ์ดํ›„์—๋Š” ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•ด๋„ ํ˜ธ์ถœ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํด๋ž˜์Šค ๋‚ด์— ์„ ์–ธ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ๋Š” ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋‚˜ ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์–ด๋–ค ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž์— ์†ํ•ด ์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
  • static ๋ธ”๋Ÿญ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋„ ์ฒ˜์Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•œ๋ฒˆ๋งŒ ์„ ์–ธ๋˜๊ณ , ์ƒ์„ฑ์ž๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
  • String ์€ pass by reference ์ง€๋งŒ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ = new String(" ") ์™€ ๊ฐ™์œผ๋ฏ€๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๊ณ  call by value ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

 

  • Public ์œผ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค๊ฐ€ ์†Œ์Šค ๋‚ด์— ์žˆ๋‹ค๋จ„, ๊ทธ ์†Œ์Šค ํŒŒ์ผ์€ public ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋™์ผํ•ด์•ผ๋œ๋‹ค ์ฆ‰ ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ์—๋Š” ํ•œ ๊ฐœ์˜ public ๋งŒ ๋œ๋‹ค

 

  • ํ™•์žฅ์„ ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ƒ์„ฑ์ž) ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋†“๋Š” ๊ฒƒ ์ด์™ธ์—๋Š” ์ƒ์†์„ ์œ„ํ•ด์„œ ์•„๋ฌด๋Ÿฐ ์ž‘์—…์„ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
  • ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ์•„์— ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” super() ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ์ž๋™์œผ๋กœ super() ๋ผ๋Š” ๋ฌธ์žฅ์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • ๋”ฐ๋ผ์„œ, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ณ  ์‹ถ์ง€ ์•Š์œผ๋ฉด ์ž์‹ ์ƒ์„ฑ์ž์— super(๋งค๊ฐœ๋ณ€์ˆ˜)๋ฅผ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด(super() ๊ฐ€ ์ž๋™์œผ๋กœ ์„ ์–ธ๋˜๋ฉด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ)
  • ๋งŒ์•ฝ ๋‹ค๋ฅธ ๋ž˜ํผ๋Ÿฐ์Šค์˜ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๋ถ€๋ชจ๊ฐ€ ์žˆ์„ ๋•Œ null ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋ฉด Ambiguous ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰๋Š”๋‹ค.
  • ์ž๋ฐ”๋Š” ๋ถ€๋ชจ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋‹ค. ๊ทธ๋ž˜์„œ, ๋ถ€๋ชจ ํด๋ž˜์Šค์— ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋งŒ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” super() ๋ฅผ ์ด์šฉํ•ด์„œ ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ๊ผญ ํ˜ธ์ถœํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ , ์ž์‹ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ super() ๋ฅผ ๋ช…์‹œ์ ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ์ปดํŒŒ์ผ์‹œ ์ž๋™์œผ๋กœ super() ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” super() ๋Š” ๋ฐ˜๋“œ์‹œ ์ž์‹ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ๊ฐ€์žฅ ์ฒซ์ค„์— ์„ ์–ธ๋˜์–ด์•ผ๋งŒ ํ•œ๋‹ค.
  • ๋™์ผํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋œ๋‹ค. (์˜ค๋ฒ„๋ผ์ด๋“œ ์• ๋…ธํ…Œ์ด์…˜์ด ๋ณ„๋„๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„)
  • ์˜ค๋ฒ„๋ผ์ด๋“œ๋Š” ๋ถ€๋ชจ๋ณด๋‹ค ์ž์‹์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ ‘๊ทผ์ œ์–ด์ž๊ฐ€ ๋” ๊ฐ•ํ•œ๊ฑด ๋˜์ง€๋งŒ ์•ฝํ•œ๊ฑด ์•ˆ๋œ๋‹ค.(์•ฝํ•˜๋‹ค๋Š” ๊ฑด private ํ•ด์ง„๋‹ค๋Š” ๋œป)

 

  • Overloading : ํ™•์žฅ(๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋“ค์„ ํ™•์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ)ใ…‡
  • Overriding : ๋ฎ์–ด ์”€(๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋ณต์ œํ•ด์„œ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŒ๋“ค์–ด ๋‚ด์–ด ๋ถ€๋ชจ ใ…‹๋ฅด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๋ฌด์‹œํ•˜๊ณ , ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฎ์–ด ์”€)
  • instanceof ๋กœ ํƒ€์ž… ์ ๊ฒ€ํ•  ๋•Œ๋Š” ํ•˜์œ„ํด๋ž˜์Šค๋ถ€ํ„ฐ ํ•ด์•ผ๋œ๋‹ค. ์™œ๋ƒ๋ฉด ์ƒ์œ„๋ถ€ํ„ฐํ•˜๋ฉด ์ „๋ถ€ ์ƒ์œ„๋กœ ์ฐํž ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ถ€๋ชจ ํƒ€์ž…๋„ true ๋กœ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

  • API ๋Š” Application Programming Interface ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์ด ํฌํ•จ๋œ ๋ฌธ์„œ ๋ฅผ ๋งํ•œ๋‹ค.
  • ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์„œ

 

 

 

  • ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ == ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฃผ์†Œ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ
  • ๋งŒ์•ฝ equals ๋ฅผ ovveride ํ•˜์ง€ ์•Š์œผ๋ฉด equals ์—์„œ hashcode ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
  • hashcode() ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • eqauls ๋ฅผ override ํ•  ๋•Œ 5๊ฐ€์ง€๋ฅผ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.
    1. ์žฌ๊ท€(reflexive)
      • null ์ด ์•„๋‹Œ x ๋ผ๋Š” ๊ฐ์ฒด์˜ x.equals(x) ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ true ์—ฌ์•ผ๋งŒ ํ•œ๋‹ค.
    1. ๋Œ€์นญ(symmetric)
      • null ์ด ์•„๋‹Œ x์™€ y ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, y.equlas(x) ๊ฐ€ true ๋ฅผ ๋ฆฌํ„ดํ–ˆ๋‹ค๋ฉด, x.equals(y) ๊ฐ€ true ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.
    1. ํƒ€๋™์ (transitive)
      • null ์ด ์•„๋‹Œ x์™€ y, z๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, y.equlas(x) ๊ฐ€ true ๋ฅผ ๋ฆฌํ„ดํ–ˆ๋‹ค๋ฉด, x.equals(y) ๊ฐ€ true ๋ฅผ ํ•˜๋ฉด z.equals(z) ๋Š” true ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค.
    1. ์ผ๊ด€(consistent)
      • null ์ด ์•„๋‹Œ x์™€ y๊ฐ€ ์žˆ์„ ๋•Œ ๊นฉ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ๋Š” ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„, x.equals(y) ์˜ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ true ์ด๊ฑฐ๋‚˜ ํ•ญ์ƒ false ์ด์—ฌ๋งŒ ํ•œ๋‹ค.
    1. null๊ณผ ๋น„๊ต
      • null ์ด ์•„๋‹Œ x ๋ผ๋Š” ๊ฐ์ฒด์˜ x.equals(null) ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ false ์ด์—ฌ๋งŒ ํ•œ๋‹ค.

       

  • equals ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ hashcode() ๋„ ๊ฐ™์ด override ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š”, equals ๊ฐ€ true ์ธ๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ , hashcode() ๋ฉ”์†Œ๋“œ์˜ ๊ฐ’์€ ๋‹ค๋ฅด๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ™์€ hashcode() ๋ฉ”์†Œ๋“œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋ฉด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • hashcode() ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ 16์ง„์ˆ˜๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด hascode() ๋Š” ๋ฌด์กฐ๊ฑด ๋™์ผํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, equals() ๋ฉ”์†Œ๋“œ๋ฅผ override ํ•˜๋ฉด, hashcode() ๋ฉ”์†Œ๋“œ๋„ovveride ํ•ด์„œ ๋„์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
    • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ์— ์–ด๋–ค ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ์—๋Š” ํ•ญ์ƒ ๋™์ผํ•œ int ๊ฐ’์„ ๋ฆฌํ„ดํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ™์€ ๊ฐ’์ด์–ด์•ผ ํ•  ํ•„์š”๋Š” ์ „ํ˜€ ์—†๋‹ค.
    • ์–ด๋–ค ๋‘๊ฐœ์˜ ๊ฐ์ฒด์— ๋Œ€ํ•˜์—ฌ eqauls() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ๊ฐ€ true ์ผ ๋•Œ์—, ๋‘ ๊ฐ์ฒด์˜ hashcode() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ผํ•œ int ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
    • ๋‘ ๊ฐ์ฒด๋ฅผ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ false ๋ฅผ ๋ฆฌํ„ดํ–ˆ๋‹ค๊ณ  ํ•ด์„œ, hashCode() ๋ฉ”์†Œ๋“ค๋ฅด ํ˜ธ์ถœํ•œ int ๊ฐ’์ด ๋ฌด์กฐ๊ฑด ๋‹ฌ๋ผ์•ผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ์— ์„œ๋กœ ๋‹ค๋ฅธ int ๊ฐ’์„ ์ œ๊ณตํ•˜๋ฉด hashtable ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.
    • Object ์˜ clone() ์€ ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๋ณธ์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

13์žฅ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํด๋ž˜์Šค, enum

  • ์ธํ„ฐํŽ˜์ด์Šค์™€ abstract ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
    • ์„ค๊ณ„์‹œ ์„ ์–ธํ•ด ๋‘๋ฉด ๊ฐœ๋ฐœํ•  ๋•Œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฐœ๋ฐœ์ž์˜ ์—ญ๋Ÿ‰์— ๋”ฐ๋ฅธ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ ์–ธ์˜ ๊ฒฉ์ฐจ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ณตํ†ต์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ abstract ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด ๋†“์œผ๋ฉด, ์„ ์–ธ๊ณผ ๊ตฌํ˜„์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ์ •์˜ํ•ด ๋†“๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

  • abstract ํด๋ž˜์Šค
    • abstract ํด๋ž˜์Šค ์•ˆ์—๋Š” abstract ์œผ๋กœ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ 0๊ฐœ ์ด์ƒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.
    • abstract ๋กœ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด, ๊ทธ ํด๋ž˜์Šค๋Š” abstract ์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ๋งŒ ํ•œ๋‹ค.
    • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•˜๋‹ค ๋ณด๋‹ˆ, ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์•„๋„ ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ๋Š ์ข€ ์• ๋งคํ•˜๋‹ค. ํŠนํžˆ ์•„์ฃผ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†“์Œ๋…€ ๋งŽ์€ ๋„์›€์ด ๋œ๋‹ค. ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ abstract ํด๋ž˜์Šค๋‹ค.

 

  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” final ๋กœ ์„ ์–ธ ์‹œ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
  • ์ง€์—ญ ๋ณ€์ˆ˜๋Š” final ๋กœ ์„ ์–ธ ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋Š” ์ค‘๊ด„ํ˜ธ ๋‚ด์—์„œ๋งŒ ์ฐธ์กฐ๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ณ€๊ฒฝํ•  ์ผ์ด ์—†๋‹ค.

 

enum

  • enum ํด๋ž˜์Šค๋„ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒ์„ฑ์ž์˜ ์„ ๋ฒˆ๋ถ€๋ฅผ package-private ์™€ private ๋งŒ ์ ‘๊ทผ์ œ์–ด์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ƒ์ˆ˜๋ฅผ enum ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
  • java.lang.Enum ์ด ๋ถ€๋ชจ์ด์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, extends java.lang.Enum ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฒƒ์„ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ๋งŒ๋“ค์–ด ๋†“์€ enum ์„ extends ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.
  • Enum ์€ protected Enum(String name, int ordinal) ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋„๋ก ํ•ด๋†“์€ ์ƒ์„ฑ์ž๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.
  • Object ๊ธฐ๋ณธ 4๊ฐ€์ง€์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ override ๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก final ๋กœ ๋ง‰์•„ ๋†“์•˜๋‹ค.
  • equals ์™€ hashcode ๋Š” ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, clone ๊ณผ finalize ๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • toString() ์€ ๋ง‰์•„๋†“์ง€ ์•Š์•˜๋‹ค.
  • enum ์— ์„ ์–ธ๋˜์–ด์žˆ๋Š” ๋ฉ”์†Œ๋“œ
    1. compareTo(E e) - ๋งค๊ฒŒ ๋ณ€์ˆ˜๋กœ enum ํƒ€์ž…๊ณผ์˜ ์ˆœ์„œ ์ฐจ์ด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    1. getDeclaringClass() - ํด๋ž˜์Šค ํƒ€์ž…์˜ enum ์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    1. name() - ์ƒ์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    1. ordinal() - ์ƒ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
    1. valueOf(Class<T> enumType, String name) - static ๋ฉ”์†Œ๋“œ๋กœ, ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ๋Š” ํด๋ž˜์Šค ํƒ€์ž…์˜ enum ์„, ๋‘ ๋ฒˆ์งธ ๋งค๊ฒŒ ๋ณ€์ˆ˜๋กœ๋Š” ์ƒ์ˆ˜์˜ ์ด๋ฆ„์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.
  • JDK 1.5 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • compareTo ๋Š” compareTo ๋ฅผ ์„ ์–ธํ•œ ๊ฐ์ฒด๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ์ฒด๋ณด๋‹ค ๋’ค์— ์žˆ์œผ๋ฉด ์–‘์ˆ˜, ์•ž์— ์žˆ์œผ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

์˜ˆ์™ธ

  • ์˜ˆ์™ธ์˜ ์ตœ์ƒ์œ„ ๊ฐ์ฒด Excetion
  • ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜ (3๊ฐ€์ง€)
    • checked exception
    • error
    • runtime exception or unchecked exception
    • 2 , 3 ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์€ 1
  • error
    • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ๋ฐ–์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ
    • ๋””์Šคํฌ๊ฐ€ ๊ณ ์žฅ๋‚ฌ๋‹ค๋˜์ง€, ๋ฉ”์ธ๋ณด๋“œ๊ฐ€ ๋ง›์ด ๊ฐ”๋‹ค๋˜์ง€,
    • ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถ”์–ด ๋ฒ„๋ฆฌ๋ƒ : error, ๊ณ„์† ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋ƒ : Exception
  • RuntimeException
    • compile ์‹œ์ ์— ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

     

  • Exception ์„ ํ™•ํ•ฎ์•Ÿ ใ„ดํด๋ž˜์Šค๋“ค์ด Checked ์˜ˆ์™ธ์ด๋ฉฐ, RuntimeException ๋ฐ‘์— ํ™•์žฅ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์ด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋“ค์ด๋‹ค.
  • ๋ชจ๋“  ์˜ˆ์™ธ์˜ ํ• ์•„๋ฒ„์ง€๋Š” Throwable ํด๋ž˜์Šค๋‹ค.
  • Exception ๊ณผ Error ๋Š” Throwalbe ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Exception ์ด๋‚˜ Error ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ Throwable ๋กœ ์ฒ˜๋ฆฌํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค.
  • ์ƒ์„ฑ์ž ์ข…๋ฅ˜
    • Throwable()
    • Throwable(String message)
    • Throwable(String message, Throwable cause)
    • Throwable(Throwable cause)
  • Exception ์ด ์˜ค๋ฒ„๋กœ๋“œํ•œ ๋ฉ”์†Œ๋“œ๋Š” 10๊ฐ€์ง€๊ฐ€ ๋„˜์ง€๋งŒ ๊ทธ ์ค‘ ํ•ต์‹ฌ
    • getMessage()
    • toString()
    • printStackTrace()

์ž๋ฐ” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ „๋žต

  • Exception ์œผ๋กœ ํ• ๊ฑด์ง€, RuntimeException ์œผ๋กœ ํ• ๊ฑด์ง€ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•˜๋‹ค.
  • Exception ์„ ๋ฐ”๋กœ ํ™•์žฅํ•œ ๊ฒƒ์ด Chekced ์˜ˆ์™ธ์ด๊ณ , Exception ์„ ์ƒ์†ํ•œ RuntimeException ์„ ๋‹ค์‹œ ํ™•์žฅํ•œ ์˜ˆ์™ธ๋“ค์ด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ(Unchekced) ์ด๋‹ค.
  • RuntimeException ์€ ๋”ฐ๋กœ throws ๋‚˜ try catch ๋ฅผ ์žก์ง€ ์•Š์•„๋„ compile ํƒ€์ž„์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ, RuntimeException ์— ๋Œ€ํ•ด์„œ ์–ด๋”˜๊ฐ€์—๋Š” ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ฆ‰, ๊ผญ try ๋‚˜ throws ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•˜๋Š” ์˜ˆ์™ธ๋Š” Excpetion ์„ ์ƒ์†๋ฐ›์•„ compile ์‹œ์ ์— checked ๋กœ ๋ฐ›์•„ custom ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ณ , ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด RuntimeExcpetion ์„ ๋ฐ›์•„ unchecked ๋กœ ์žก์•„์ค€๋‹ค.
  • ์ฆ‰, checked ๋Š” ์ปดํŒŒ์ผ์— ์˜ˆ์™ธ๋ฅผ ๊ฐ•์ œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ž„์˜์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ try - catch ๋กœ ๋ฌถ์–ด์ค„ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ Exception ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰ ์‹œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” RuntimeExcpetion ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
  • Java Exception Stractegy ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰์„ ํ•ด๋ณธ๋‹ค.

 

String

public final class String extends Object 
	implements Serializalble, Comparable<String>, CharSequence

 

  • Serializable ์€ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋Š” ํŠน์ดํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ด Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ์„ ์–ธํ•ด ๋†“์œผ๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์ „์†ก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • CharSequence ๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • StringBuilder ์™€ StringBuffer ๋„ ์ด CharSequece ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ๋†“์•˜๋‹ค.
  • EUC-KR ์€ ํ•œ๊ธ€ ๋‘๊ธ€์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ 4 ๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, UTI-16 ์€ 6 ๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š ์ ์ด๋‹ค. ์ฆ‰ ์ฆ์ž ์ˆ˜์™€ ์ƒ๊ด€ ์—†์ด ๋ฌด์กฐ๊ฑด 2๋ฐ”์ดํŠธ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์˜ˆ์‹œ๋กœ, TCP ์ „๋ฌธ ํ†ต์‹ ํ•  ๋•Œ ์ „๋ฌธ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ๊ธ€์ž ์ˆ˜ ๋Œ€๋กœ ์ž˜๋ผ์„œ ์จ์•ผํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ด ๋•Œ ํ•ด๋‹น ๊ธ€์ž๊ฐ€ ํ•œ๊ธ€์ธ ๊ฒฝ์šฐ 2๋ฐ”์ดํŠธ ์ฐจ์ด๋กœ ์ธํ•ด ํ•œ๊ธ€์ธ ๊ฒฝ์šฐ ๊ธ€์ž๋ฅผ ๋” ์ž˜๋ผ์•ผ ํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค.\
  • ๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • boolean equals(Object anObject)
    • boolean equalsIgnoreCase(String anotherStr)
    • int compareTo(String anotherStr)
    • int copareToIgnoreCase(String str)
    • boolean contentEquals(CharSequence cs)d
    • boolean contentEquals(StringBuffer sb)

 

String text = "Check Value";
String text2 = "Check Value";

if (text == text2) {
	return true;
}

 

๋ฅผ ํ–ˆ์„ ๋•Œ true ๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.

๊ทธ ์ด์œ ๋Š”, ์ž๋ฐ”์— Constant Pool ์ด๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ํ’€์€ ๊ฐ„๋‹จํžˆ, ์ž๋ฐ”์—์„œ๋Š” ๊ฐ์ฒด๋“ค์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Constatant Pool ์ด๋ผ๋Š” ๊ฒƒ์ด ๋งŒ๋“ค์–ด์ ธ ์žˆ๊ณ , String ์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด, ์ด๋ฏธ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

  • Constant Pool ์ด๋ž€?

 

contentEquals()

  • ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜ค๋Š” CharSequence ์™€ StringBuffer ๊ฐ์ฒด๊ฐ€ STring ๊ฐ์ฒด์™€ ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ์‚ฌ์šฉ

 

ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ

  • boolean startWith(String prefix)
  • boolean startWith(String prefix, int tooffset)
  • boolean endsWith(String suffix)
  • boolean contains(CharSequence s)
  • boolean matches(String regex)
    • contains ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ •๊ทœ ํ‘œํ˜„์‹์œผ๋กœ ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค.
  • boolean regionMatches(boolean ignoreCase, int tooffset, String other, int ooffset, int len)
  • boolean regionMatches(int offset, STring other, int ooffset, int len)

 

indexOf() ์˜ ๋‹จ์ ์€ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋‹ค ํ™•์ธํ•ด ๋ด์•ผํ•œ๋‹ค๋Š ์ ์ด๋‹ค.

 

String ์—์„œ ๋ฌธ์ž์—ด ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ

  • indexOf(int ch)
  • indexOf(int ch, int fromIndex)
  • indexOf(String str)
  • indexOf(String str, int fromIndex)
  • lastIndexOf(int ch)
  • lastIndexOf(int ch, int fromIndex)
  • lastIndexOf(String str)
  • lastIndexOf(String str, int fromIndex)

 

char ๋‹จ์œ„์˜ ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • charAt(int index)

 

char ๋ฅผ String ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • copyValueof(char[] data)

 

String ์„ char ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • char[] toCharArray()

 

๋‚ด์šฉ์„ ๊ต์ฒดํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • String replace(char oldChar, char newChar)
  • String replaceAll();
  • STring replaceFirst(STring regex, String replacement)

 

String ์—์„œ intern() ๋ฉ”์„œ๋“œ๋Š” native ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

  • String ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ block ๋‚ด์—์„œ๋Š” ๋ฌธ์ž์—ด pool ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์žˆ์œผ๋ฉด ๊ธฐ์กด์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ , new String ์„ ํ•˜๋ฉด ๊ฐ™์€ ๋ฌธ์ž์—ด์˜ ํ’€์— ์žˆ๋˜ ๋ง๋“  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ž˜์„œ == ๊ฐ€ ๋จนํžˆ๊ณ , new ๋Š” ์•ˆ๋จนํžŒ๋‹ค.
  • intern() ์€ new String ์„ ํ•˜๋”๋ผ๋„ pool ์— ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์ฐธ์กฐํ•ด์„œ == ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • == ๊ฐ€ equals ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ, intern() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ต์ง€๋กœ ๋ฌธ์ž์—ด ํ’€์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์ €์žฅ๋˜๋Š” ์˜์—ญ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ๋ณ„๋„๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฒญ์†Œํ•˜๋Š” (GC) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค (์ฆ‰, content pool ์„ ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋“์ฐจ์„œ GC ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.) ๋”ฐ๋ผ์„œ, ์ž‘์€ ์—ฐ์‚ฐ ํ•˜๋‚˜๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ „์ฒด ์ž๋ฐ” ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค.

 

 

String, StringBuilder, StringBuffer ์˜ ์ฐจ์ด

String ์€ immutable ํ•œ ๊ฐ์ฒด๋‹ค. ์ฆ‰, ๋ถˆ๋ณ€์˜ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.(final ์ด ์„ ์–ธ๋œ ํด๋ž˜์Šค)

String ๊ฐ์ฒด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ String ๋ฌธ์ž์—ด์„ ๋”ํ•˜๋ฉด ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ด๋˜๊ณ  ๊ธฐ์กด ๊ฐ์ฒด๋Š” ๋ฒ„๋ ค์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๊ณ„์† ํ•˜๋‚˜์˜ String ์„ ๋งŒ๋“ค์–ด ๊ณ„์™ ๋”ํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค๋ฉด ๊ณ„์™ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

String text = "Hello";
text = text + "world";

์˜ ๊ฒฝ์šฐ Hello ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉฐ GC ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋‚˜์˜จ๊ฒŒ StringBuffer, StringBuilder ์ด๋‹ค

 

StringBuffer ๋Š” Thread safe ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์†๋„๋Š” StringBuilder ๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.

 

ํ•ต์‹ฌ!!!

  • ํ•˜์ง€๋งŒ, JDK 5 ์ด์ƒ์—์„œ๋Š” String ์˜ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์„ ํ•  ๊ฒฝ์šฐ, ์ปดํŒŒ์ผํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ•ด๋‹น ์—ฐ์‚ฐ์„ StringBuilder ๋กœ ๋ณ€ํ™˜ํ•ด ์ค€๋‹ค. ๋”ฐ๋ผ์„œ, ์ผ์ผ์ด ๋”ํ•˜๋Š” ์ž‘์—…์„ ๋ณ€ํ™˜ํ•ด ์ค„ ํ•„์š”๋Š” ์—†์œผ๋‚˜, for ๋ฃจํ”„์™€ ๊ฐ™์ด ๋ฐ˜๋ณต ์—ฐ์‚ฐ์„ ํ•  ๋•Œ์—๋Š” ์ž๋„์‘๋กœ ๋ณ€ํ™˜์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ผญ ํ•„์š”ํ•˜๋‹ค

 

๊ณตํ†ต์ 

  • ๋ชจ๋‘ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฌ๋‹ค.
  • CharSequence ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ฆ‰, ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ์ž‘์—…์„ ํ•  ๋•Œ String ์ด๋‚˜ StringBuilder ํƒ€์ž…์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” CharSequence ํƒ€์ž…์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.(DIP ์›์น™ ์ง€ํ‚ด)

 

 

์–ธ์ œ StringBuffer, StringBuilder?

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๋”ํ•  ๊ฒฝ์šฐ์—๋Š” StringBuilder ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ „ํ˜€ ์ƒ๊ด€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์–ด๋–ค ํด๋ž˜์Šค์— ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ๋”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ๊ณ , ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ์ด ๋ณ€์ˆ˜๋ฅผ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ StringBuffer ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

Nested Class

  • Nested class < static netsted class, inner class < local inner class, anonymous inner class

 

  • ์‚ฌ์šฉ ์ด์œ 
    • ํ•œ ๊ณณ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ - Static Nested
    • ์บก์Šํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ (A๋ผ๋Š” ํด๋ž˜์Šค์— private ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ด ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ B ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ , B ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœ์‹œํ‚ค๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒฝ์šฐ์— ์†ํ•œ๋‹ค.) ์ฆ‰, ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๊ฐ์ถ”๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์†Œ์Šค์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์„ ๋•Œ

     

     

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

 

 

์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€

  • ์–ด๋…ธํ…Œ์ด์…˜์€ ์˜์–ด๋กœ Annotation ์ด๋ฉฐ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค. JDK 5๋ถ€ํ„ฐ ๋“ฑ์žฅํ–ˆ๋‹ค.

     

  • ์‚ฌ์šฉํ•˜๋Š” ๊ณณ
    • ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜
    • ์ปดํŒŒ์ผํ•  ๋•Œ์™€ ์„ค์น˜์‹œ์˜ ์ž‘์—…์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜
    • ์‹คํ–‰ํ•  ๋Œ€ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ

     

  • ์ž๋ฐ” ์–ธ์–ด์—๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ •ํ•ด์ ธ ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ 3๊ฐœ๊ฐ€ ์žˆ๊ณ , ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์ด๋ผ๋Š” ๊ฒƒ์€ 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜์€ ์„ ์–ธ์„ ์œ„ํ•ด์„œ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‹ค์Œ์˜ 3๊ฐœ ๋ฟ์ด๋‹ค.
    • @Override
    • @Deprecated
    • @Supress Warnings

     

    @Tartget() ๊ด„ํ˜ธ ์•ˆ์— ์ ์šฉ ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.

    • CONSTRUCTOR : ์ƒ์„ฑ์ž ์„ ์–ธ์‹œ
    • FILED : enum ์ƒ์ˆ˜๋ฅผ ํฌํ•จํ•œ ํ•„๋“œ ๊ฐ’ ์„ ์–ธ์‹œ
    • LOCAL_VALRIABLE : ์ง€์—ญ ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ
    • METHOD : ๋ฉ”์†Œ๋“œ ์„ ์–ธ์‹œ
    • PACKAGE : ํŒจํ‚ค์ง€ ์„ ์–ธ์‹œ
    • PARAMETER : ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ
    • TYPE : ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค enum ๋“ฑ ์„ ์–ธ์‹œ

     

    @Retention

    • ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ณด๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค.
    • SOURCE - ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ณด๊ฐ€ ์ปดํŒŒ์ผ ์‹œ ์‚ฌ๋ผ์ง
    • CLASS - ํด๋ž˜์Šค ํŒŒ์ผ์— ์žˆ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ณด๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•จ. ํ•˜์ง€๋งŒ, ๊ฐ€์ƒ๋จธ์‹ ์—์„œ๋Š” ์‚ฌ๋ผ์ง
    • RUNTIME - ์‹คํ–‰์‹œ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ณด๊ฐ€ ๊ฐ€์ƒ ๋จธ์‹ ์— ์ฐธ์กฐ ๊ฐ€๋Šฅ

@Documented

  • ํ•ด๋‹น "์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ Javadocs(API) ๋ฌธ์„œ์— ํฌํ•จ๋œ๋‹ค๋Š” ๊ฒƒ"์„ ์„ ์–ธํ•œ๋‹ค.

 

@Inherited

  • ๋ชจ๋“  ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์„ ์–ธํ•œ๋‹ค.

 

@interface

  • ์–ด๋…ธํ…Œ์…˜์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

java.lang ์„ ๋ณ„๋„๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ด์œ ๋Š” ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋ถ€๋ชจ์— ์žˆ๋Š”์ง€(Bootstrap class loader) ํ™•์ธ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์–ด๋…ธํ…Œ์ด์…˜์˜ ์šฉ๋„

  • ์ œ์•ฝ์‚ฌํ•ญ ๋“ฑ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด : @Deprecated, @Override, @NotNull
  • ์šฉ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด : @Entity, @TestCase, @WebService
  • ํ–‰์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด : @Statefull, @Transcational
  • ์ฒ˜๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด : @Column, @XmlElment

 

 

์ •๋ฆฌ

๊ฐ์ฒด์ง€ํ–ฅ ๊ด€๋ จ ์šฉ์–ด ๋ชฉ๋ก

  • ํด๋ž˜์Šค
    • ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ–๋Š” ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ๋‹จ์œ„
  • ์ƒํƒœ์™€ ํ–‰์œ„
  •  
  • ์บก์Šํ™”
    • ์—ฐ๊ด€๋œ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ฌถ์–ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ.
    • ๊ธฐ๋Šฅ์„ ํด๋ž˜์Šค ๋ฐ–์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ์„ ์ œํ•œํ•˜๋Š” ์ •๋ณด ์€๋‹‰์ด ๊ฐ€๋Šฅ
    • ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
    • ์ด์ฒ˜๋Ÿผ ๋ฌถ์—ฌ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋ฅผ ํด๋ž˜์Šค๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • ๋ฉ”์‹œ์ง€
  • ๊ฐ์ฒด
  • ์ƒ์†
  • Overriede
  • ๋‹คํ˜•์„ฑ
  • overloading

 

 

์ฐธ์กฐ ์ž๋ฃŒํ˜•๊ณผ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ์ฐจ์ด

  • ์ดˆ๊ธฐํ™” ํ•  ๋–„ : ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ ๊ฐ’์„ ๋ฐ”๋กœ ์ง€์ •ํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ์ผ๋ฐ˜์ ์œผ๋กœ new ์™€ ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ : ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ฐ ์ฐธ์กฐ ์ž๋ฃŒํ˜• ๋ชจ๋‘ ๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€๋งŒ, ์ฐธ์กฐ ์ž๋ฃŒํ˜• ์•ˆ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋“ค์€ ์ฐธ์กฐ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  • ํŠน์ˆ˜ ํด๋ž˜์Šค : String

 

 

 

2๊ถŒ

  • T academy - ์˜ํ™˜๋‹˜ JPA ๊ฐ•์˜
  • jre ๋งŒ ์„ค์น˜ํ•˜๋ฉด, ์ž๋ฐ”๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋“ฑ์˜ ๊ฐ์ข… ํ”„๋กœ๊ทธ๋žจ์ด ์ œ์™ธ๋œ ์ƒํƒœ๋กœ ์„ค์น˜๋œ๋‹ค.
  • JDK ๋Š” JRE ์—์„œ java, javac, javadoc, jar, security, deploy, monitoring ๋“ฑ Development Tools & APIs, Java Language ๋“ฑ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

 

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

       

       

  • JDBC ๋Š” JDK1.1 ์—์„œ ์ถ”๊ฐ€๋œ ๊ฒƒ์œผ๋กœ Java Database Connectivity ์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๋Š” ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ API ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • JDK1.2
    • JIT ๋ผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Sum JVM ์— ์ฒ˜์Œ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
    • Collections ํ”„๋ ˆ์ž„์› ์ถ”๊ฐ€
    • JIT ๋Š” Just-In-Time ์˜ ์•ฝ์ž๋กœ ์–ด๋–ค ๋ฉ”์†Œ๋“œ์˜ ์ผ๋ถ€ ํ˜น์€ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ JVM ์—์„œ ๋ณ€์—ญํ•˜์ง€ ์•Š๋„๋ก ํ•จ์œผ๋กœ์จ ๋ณด๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • JDK1.3
    • JNDI๊ฐ€ ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€
      • ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•œ ํ›„, ๋‚˜์ค‘์— ๊ทธ ์ด๋ฆ„์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

       

  • JDK1.4
    • assert ์˜ˆ์•ฝ์–ด ์ถ”๊ฐ€
    • PErl ์–ธ์–ด์˜ ์ •๊ทœ ํ‘œํ˜„์‹์„ ๋”ฐ๋ฅด๋Š” ์ •๊ทœ ํ‘œํ˜„์‹ ์ถ”๊ฐ€
    • NIO ๋ผ๋Š” non-blocking ์ถ”๊ฐ€
    • logging API ์ถ”๊ฐ€
  • JDK 1.5
    • ์•ˆ์ „ํ•˜๊ฒŒ ์ปฌ๋ ‰์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ œ๋„ค๋ฆญ ์ถ”๊ฐ€
    • ์–ด๋…ธํ…Œ์ด์…˜ใ…‡์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • autoboxing ๋ฐ unboxing ์ถ”๊ฐ€
    • enum ์ถ”๊ฐ€
    • ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€๋ณ€์ ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” varags ์ถ”๊ฐ€
    • concurrent ํŒจํ‚ค์ง€ ์ถ”๊ฐ€
    • Scanner ํด๋ž˜์Šค ์ถ”๊ฐ€
  • JAVA 6
    • ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ
  • JAVA 8
    • ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ
    •  
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํŒจํ„ด
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
  • ์Šคํ”„๋ง 5.0 ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค 2/e
  • Code ์ฝ”๋“œ
  • ์ง€ํƒฑํ•˜๋Š” ๊ธฐ์ˆ  ์‹œ๋ฆฌ์ฆˆ
  • ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์ด์•ผ๊ธฐ
  • ์นดํ”„์นด ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ
  • ์ž๋ฐ” ์„ฑ๋Šฅ ํŠœ๋‹์ด์•ผ๊ธฐ

 

JIT

  • JIT ๋ฅผ ์ข€๋” ์‰ฌ์šด ๋ง๋กœ ํ•˜์ž๋ฉด, ๋™์  ๋ณ€ํ™˜์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • JIT ์˜ ๋ชฉ์ ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค
  • ๋ช…์นญ์€ ์ปดํŒŒ์ผ๋Ÿฌ์ง€๋งŒ, ์‹คํ–‰์‹œ์— ์ ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ธํ„ฐํ”„๋ฆฌํŠธ ๋ฐฉ์‹๊ณผ ์ •์  ์ปดํŒŒ์ผ ๋ฐฉ์‹์ด๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฑด๋ฐ, ๊ฐ„ํŽธํ•˜์ง€๋งŒ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์ด๋ฅผ ๋‘˜ ๋‹ค ํ•ฉ์นœ๊ฒŒ JIT ๋‹ค.
  • ๋ณ€ํ™˜ ์ž‘์—…์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด์„œ ์ง€์†์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€๋งŒ, ํ•„์š”ํ•œ ์ฝ”๋“œ์˜ ์ •๋ณด๋Š” ์บ์‹œ์— ๋‹ด์•„๋‘์—ˆ๋‹ค๊ฐ€(๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋‘์—ˆ๋‹ค๊ฐ€) ์žฌ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
  • javac ๋Š” ์ •์  ์ปดํŒŒ์ผ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ class ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅด ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ์–ด๋–ค OS ์—๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”์˜ ๋ชจํ† ์ธ "Compile once, Run anywhere" ์ด๋‹ค.
  • ์ฆ‰, ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋จน์œผ๋ ค๋ฉด ๋‹ค์‹œ ๋ณ€ํ™˜ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค. ์ด ๋ณ€ํ™˜์ž‘์—…์„ JIT ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ํ•œ๋‹ค.
  • ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ → ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ → ์ปดํŒŒ์ผ๋œ bytecode → JVM → ๊ธฐ๊ณ„ ์ฝ”๋“œ → ํ•˜๋“œ์›จ์–ด ๋ฐ OS
  • JVM → ๊ธฐ๊ณ„์ฝ”๋“œ ์—ฌ๊ธฐ์„œ JIT ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

HOTSPOT

  • HotSpot ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ๋Ÿฌ์™€ HotSpot ์„œ๋ฒ„ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ ๋‘ ๊ฐ€์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ๊ทธ๋Ÿฐ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด HotSpot ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ , ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ž๋ฐ”๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์•Œ์•„์„œ ํด๋ผ์ด์–ธํŠธ ์žฅ๋น„์ธ์ง€ ์„œ๋ฒ„ ์žฅ๋น„์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
    • 2 ๊ฐœ ์ด์ƒ์˜ ๋ฌผ๋ฆฌ์ ์ธ ํ”„๋กœ์„ธ์„œ
    • 2GB ์ด์ƒ์˜ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ
  • ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ ๊ฐ€๋Šฅ java -clinet, java -server
  • ์œˆ๋„์šฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ๋Ÿฌ

 

 

GC

  • Java 7 ๋ถ€ํ„ฐ ๊ณต์‹์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GI(Garbage First) ๋ผ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ JVM ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜์—ญ์„ ๋‚˜๋ˆ„์–ด ํž™์ด๋ผ๋Š” ๊ณต๊ฐ„์— ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • Young ์˜์—ญ์—๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ Š์€ ๊ฐ์ฒด๋“ค์ด ์กด์žฌํ•˜๋ฉฐ Old ์˜์—ญ์—๋Š” ๋Š™์€ ๊ฐ์ฒด๋“ค์ด ์ž๋ฆฌ์žก๊ฒŒ ๋œ๋‹ค.
  • Perm ์ด๋ผ๋Š ์˜์—ญ์—๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์Œ“์ธ๋‹ค. (๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์Œ“์ด๊ธด ํ•œ๋‹ค.)
  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ž๋งˆ ์ €์žฅ๋˜๋Š” ์žฅ์†Œ๋Š” Eden ์ด๋‹ค.
  • ๋งˆ์ด๋„ˆ GC ํ˜น์€ ์˜GC์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ด์•„๊ฐ€๋Š” ๊ณผ์ •(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ˆ์…˜์ด๋‹ค)
    1. Eden ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    1. Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ Survivor ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌ๋˜๊ณ , ๋‹ค์‹œ Eden ์˜์—ญ์„ ์ฑ„์šฐ๊ฒŒ ๋œ๋‹ค.
    1. SUrvivor ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค. ์ด๋•Œ, Eden ์˜์—ญ์— ์žˆ๋Š ใ„ด๊ฐ์ฒด๋“ค ์ค‘ ์‚ด์•„์ž‡๋Š” ๊ฐ์ฒด๋“ค๋กœ ๋‹ค๋ฅธ Suvivor ์˜์—ญ์œผ๋กœ ๊ฐ„๋‹ค. ์ฆ‰, Suvivor ์˜์—ญ์˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ ๋น„์–ด ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค.

     

  • ์˜ค๋ž˜ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์ง€์†์ ์œผ๋กœ ์ด๋™ํ•˜๋‹ค๊ฐ€ Old ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด GC ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๊ฒƒ์„ ๋ฉ”์ด์ € GC, ํ’€ GC ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์˜ GC ๊ฐ€ ํ’€ GC ๋ณด๋‹ค ๋น ๋ฅธ๋ฐ, ๊ทธ ์ด์œ ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ž‘์€ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜๊ณ , ๊ฐ์ฒด๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋„ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์ „์ฒด ์˜์—ญ์„ ์˜ ์˜์—ญ์œผ๋กœ ๋งŒ๋“ค๋ฉด ์žฅ์• ๋กœ ์ด์–ด์งˆ ํ™•๋ฅ ์ด ๋งค์šฐ ๋†’์•„์ง„๋‹ค.
  • ์˜ค๋ผํด ์ž๋ฐ” 7๋ถ€ํ„ฐ์ถ”๊ฐ€๋œ GI ๋ฅผ ํฌํ•จํ•œ ์ด 5๊ฐ€์ง€์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • Serial GC
    • Paralle Young Generation Collector
    • Parallel Old Generation Collector
    • ConcurrentMark & Sweep Colector (CMS)
    • GI (Garbage First)
  • WAS ๋กœ ์‚ฌ์šฉํ•˜๋Š”JVM ์—์„œ๋Š” Serial GC ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ด GC ๋Š” -client ์˜ต์…˜์„ ์ง€์ •ํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์— ์ตœ์ ํ™”๋œ GC ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ WAS ์—์„œ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉดGC ์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ ค ์›น์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—„์ฒญ ๋Š๋ ค์ง„๋‹ค.

 

java.lang

  • ์œ ์ผํ•˜๊ฒŒ import ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค, ํด๋ž˜์Šค, ์˜ˆ์™ธ ํด๋ž˜์Šค ๋“ฑ
    • ์–ธ์–ด ๊ด€๋ จ๊ธฐ๋ณธ
    • ๋ฌธ์ž์—ด ๊ด€๋ จ
    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ฐ ์ˆซ์ž ๊ณ ๋‚˜๋ จ
    • ์“ฐ๋ ˆ๋“œ ๊ด€๋ จ
    • ์˜ˆ์™ธ ๊ด€๋ จ
    • ๋Ÿฐํƒ€์ž„ ๊ด€๋ จ
  • ์ข…๋ฅ˜๋Š” P.552 ์— ์žˆ์Œ
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ ์ž๋ฐ”์˜ ํž™์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์Šคํƒ์— ์ €์žฅ๋œ๋‹ค.
  • Character ์™€ Boolean ์„ ์ œ์™ธํ•˜๊ณ ๋Š” Wrapper ํด๋ž˜์Šค๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ ๋ชจ๋‘ Number ๋ผ๋Š” abstract ํด๋ž˜์Šค๋ฅผ extend ํ•œ๋‹ค.
  • ๊ฒ‰์œผ๋กœ ๋ณด๊ธฐ์—” ์ฐธ์กฐ ์ž๋ฃŒํ˜•์ด์ง€๋งŒ, ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒ๋ฉด, ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ž๋™์œผ๋กœ ํ˜• ๋ณ€ํ™˜์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
  • Byte, Short, Integer, Long, Float, Doblue ์€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ new ๊ฐ€ ํ•„์š” ์—†๋‹ค.
  • Wrapper ๋ฅผ ๋งŒ๋“ ์ด์œ 
    • ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ
    • ์ œ๋„ค๋ฆญ๊ณผ ๊ฐ™์ด ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ
    • MIN_VALUE, MAX_VALUE ์™€ ๊ฐ™์ด ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ์ƒ์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ
    • ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ, ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•˜๊ณ , 2, 8, 10, 16 ์ง„์ˆ˜ ๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ

     

  • Sytem ํด๋ž˜์Šค
    • ์‹œ์Šคํ…œ ์†์„ฑ๊ฐ’ ๊ด€๋ฆฌ
    • ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๊ฐ’ ๊ด€๋ฆฌ
    • GC ์ˆ˜ํ–‰(์‹คํ–‰ํ•˜๋ฉด ์•ˆ๋จ)
    • JVM ์ข…๋ฃŒ(์‹คํ–‰ํ•˜๋ฉด ์•ˆ๋จ)
    • ํ˜„์žฌ ์‹œ๊ฐ„ ์กฐํšŒ
    • ๊ธฐํƒ€ ๊ด€๋ฆฌ์šฉ ๋ฉ”์†Œ๋“œ๋“ค
  • System Properties ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ Hashtable ์˜ ์ƒ์†์„ ๋ฐ›์€ ํด๋ž˜์Šค๋‹ค.
  • String.valueOf() ๋Š” null ์„ "null" ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , OBject.toString() ์€ Nullpoint ์˜ˆ์™ธ๋‚œ๋‹ค.

 

์ œ๋„ค๋ฆญ

  • ํƒ€์ž…์„ ๊ผญ ์ ๊ฒ€ํ•ด์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ ๋ผ๋Š” ์˜๋ฌธ๋ฌธ์ด ๋“ค ๋•Œ ์‚ฌ์šฉ
  • ์‚ดํŽด๋ณธ ํƒ€์ž… ํ˜• ๋ณ€ํ™˜์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ "์‚ฌ์ „"(์ปดํŒŒ์ผ ํ•  ๋•Œ)์— ์—†์• ๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • Object ๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด get ํ•  ๋•Œ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ์•Œ ์ˆ˜ ์—†์–ด ํ˜•๋ณ€ํ™˜์„ ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ •ํ™•ํ•œ type ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„ฃ๋Š” ๋ถ€๋ถ„์„ ๋ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด get ํ•  ๋•Œ ํƒ€์ž…์ด ๋ช…์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค ๋‹จ๊ณ„์—์„œ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์ œ๋„ค๋ฆญ ๋‹จ์–ด ๊ทœ์น™
    • E : ์š”์†Œ
    • K : ํ‚ค
    • N : ์ˆซ์ž
    • T : ํƒ€์ž…
    • V : ๊ฐ’
    • S, U, V : ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ ์„ ์–ธ๋œ ํƒ€์ž…

     

  • ํ•˜์ง€๋งŒ, ์ œ๋„ค๋ฆญ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ฒŒ ๋˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ํƒ€์ž…์ด ๊ณ ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ƒํ™”๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด์„œ dto<String> ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ด๋†“์œผ๋ฉด String ์ œ๋„ค๋ ‰ ํƒ€์ž…์˜ dto ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, dto<?> ํ˜•ํƒœ์˜ ์™€์ผ๋“œ ์นด๋“œ๋ฅผ ๋ฐ›์œผ๋ฉด ์–ด๋–ค ๊ฐ์ฒด๋“  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋–ค ๊ฐ์ฒด๋กœ wildcard ๋กœ ์„ ์–ธํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์™€์ผ๋“œ ์นด๋“œ๋กœ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ–ˆ์„ ๋•Œ์—๋Š” ์ด ์˜ˆ์ œ์™€ ๊ฐ™์ด ํŠน์ • ํƒ€์ž…์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ ์กฐํšŒ์šฉ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ wildcard ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ wildcard ์ฒ˜๋Ÿผ ๋„ˆ๋ฌด ์ถ”์ƒํ™”๊ฐ€ ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค method ์ œ๋„ค๋ฆญ์ฒ˜๋Ÿผ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
pubilc <T> void genericMethod(WhildcardGeneric<T> c, T addValue) {
	c.setWildcard(addValue);
  T value = c.getWildcard();
}

 

 

 

์ปฌ๋ ‰์…˜

  • ๋ชฉ๋ก์„ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
  • ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์˜์–ด๋กœ Data Source ์ด๋ฉฐ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„๋œ๋‹ค.
    • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ชฉ๋กํ˜• - List
    • ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ํ˜• - Set
    • ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์ด ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํํ˜• - Queue
    • ํ‚ค-๊ฐ’ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๋งตํ˜• - Map
  • List, Set, Queue ๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€๋งŒ Map ์€ ์•„๋‹ˆ๋‹ค.
    • public interface Collection<E> extends Iterable<E>

     

    List
    • List ์—์„œ Vector ๋Š” thread safe ํ•˜๊ณ  ArrayList thread safe ํ•˜์ง€ ์•Š๋‹ค.
    • Stack ์€ Vector ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•œ ๊ฒƒ
    • LinkedList ๋Š” List, Queue ์˜ ๊ตฌํ˜„์ฒด๋‹ค
    • Object → AbstractCollection<E> → AbstractList<E> → ArrayList<E>
    • ArrayList ๊ฐ€ ๊ตฌํ˜„์•ˆ ์ธํ„ฐํŽ˜์ด์Šค
      • Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
    • ArrayList ๋Š” ์ดˆ๊ธฐ์— 10์œผ๋กœ ์žก๊ณ  ๋Š˜์–ด๋‚˜๋Š” ๊ตฌ์กฐ, ์˜ˆ์ธก๊ฐ€๋Šฅํ•˜๋ฉด ํฌ๊ธฐ๋ฅผ ์žก๊ณ  ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Œ
    • ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด shallow copy, ๊ฐ์ฒด์˜ ๋ชจ๋“  ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ณต์ œ๋œ ๊ฐ์ฒด์— ์žˆ๋Š” ๊ฐ’ใ…‡๋ฅด ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ์— ์˜ํ–ฅ์ด ์—†๋„๋ก ํ•  ๋•Œ์—๋Š” Deep copy(arrayCopy()

     

    • list ๋ฅผ vector ์™€ ๊ฐ™์ด threadsafe ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด
    • List list = Collections.synchronizedList(new ArrayList<>()); ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

     

    Stack
    • Stack ์€ LIFO ์ด๋‹ค.
    • ArrayDeque ๋„ Stack ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ thread safe ํ•˜์ง€ ์•Š๋‹ค.
    • Object → AbstractCollection → AbstractList → Vector → Stack
    • ArrayList ์™€ ๊ตฌํ˜„ ๋ชฉ๋ก ๋™์ผ

     

    Set
    • HashSet: ์ˆœ์„œ๊ฐ€ ์ „ํ˜€ ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•œ๋‹ค. Set ์ค‘์— ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
    • TreeSet : ์ €์žฅ๋„๋‹ˆ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์— ๋”ฐ๋ผ์„œ ์ •๋ ฌ๋˜๋Š” ์…‹์ด๋‹ค. red-black ์ด๋ผ๋Š” ํŠธ๋ฆฌ ํƒ€์ž…์œผ๋กœ ๊ฐ’์ด ์ €์žฅ๋˜๋ฉฐ HashSet ๋ณด๋‹ค ์•ฝ๊ฐ„ ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๋‹ค.
    • LinkedHashSet : ์—ฐ๊ฒฐ๋œ ๋ชฉ๋ก ํƒ€์ž…์œผ๋กœ๊ตฌํ˜„๋œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ €์žฅ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฐ’์ด ์ •๋ ฌ๋œ๋‹ค. ๋Œ€์‹  ์„ฑ๋Šฅ์ด ์ด ์…‹ ์ค‘์—์„œ ๊ฐ€์žฅ ๋‚˜์˜๋‹ค.
    • red-black : ์ด์ง„ํŠธ๋ฆฌ

     

    • HashSet
      • Object → AbstractCollection → AbstractSet → HashSet
      • ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— get ๊ณผ indexOf ๊ฐ€ ์—†๋‹ค.
      • ๋กœ๋“œ ํŒฉํ„ฐ๋Š” (๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜)/(์ €์žฅ ๊ณต๊ฐ„) ์„ ์˜๋ฏธํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋กœ๋“œ ํŒฉํ„ฐ๋ณด๋‹ค ์ปค์ง€๋ฉด, ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋Š” ์ฆ๊ฐ€๋˜๊ณ  ํ•ด์‹œ ์žฌ์ •๋ฆฌ์„ ํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์‹œ ์žฌ์ •๋ฆฌ ์ž‘์—…์— ๋“ค์–ด๊ฐ€๋ฉด ๋‚ด๋ถ€์— ๊ฐ–๊ณ  ์žˆ๋Š ใ„ด์ž๋ฃŒ ๊ตฌ์กธ๋ฅด ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š ใ„ด๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์ด ๋ฐœ์ƒํ•œ๋‹ค.
      • ๋กœ๋“œํŒฉํ„ฐ๋ผ๋Š” ๊ฐ’์ด ํด์ˆ˜๋ก ๊ณต๊ฐ„์€ ๋„‰๋„‰ํ•ด์ง€์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ์‹œ๊ฐ„์€ ์ฆ๊ฐ€ํ•œ๋‹ค.

       

       

    • Queue
      • LinkedList ๋Š” List ์ธํ„ฐํŽ˜์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Queue ์™€ Deque ์ธํ„ฐํŽ˜์ด์Šค๋„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
      • Deque ๋Š” Double Ended Queue ์ด๋‹ค.
      • Deque๋Š” Queue ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์žฅํ•˜์˜€์œผ๋ฉฐ ๋งจ ์•ž์— ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋Š” ์ž‘์—…, ๋งจ ๋’ค์— ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค.

       

    • LinkedList
      • Object → AbstractCollection → AbstractList → AbstractSequentialList → LinkedList
      • Serializable, Cloneable, Iterable, Collection, Deque, List, Queue ๋ฅผ ๊ตฌํ˜„
      • List ๋„ ๋˜๊ณ  Queue ๋„ ๋˜๊ณ  Deque ๋„ ๋œ๋‹ค.
      • offer, put, ๋“ฑ ์–ด๋–ค ๊ฑธ ์จ๋„ ๊ฒฐ๊ตญ add, addLast ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

       

    • Map
      • key-value ์ด๊ณ  key ๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
      • HashMap, TreeMap, LinkedHashMap ๋“ฑ์ด ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ , HashTable ์ด๋ผ๋Š” ํด๋ž˜์Šค๋„ ์žˆ๋‹ค.
      • Hashtable ํด๋ž˜์Šค๋Š” Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅด ๊ตฌํ˜„ํ•˜๊ธด ํ–ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๋‹ค.
        • Map ์€ ์ปฌ๋ ‰์…˜ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Hashtable ์€ Enumeration ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
        • Map ์€ ํ‚ค, ๊ฐ’, ํ‚ค-๊ฐ’ ์‹ธ์‘๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Hashtable ์€ ์ด์ค‘์—์„œ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.
        • Map dใ…กใ„ด ์ดํ„ฐ๋ ˆ์ด์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„์ค‘์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ใ…ใ…ใ„ด, Hashtable ์€ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•œ๋‹ค.
        • ํ‚ค๋‚˜ ๊ฐ’์— null ์ €์žฅ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๊ฐ€ HashMap ์€ ๊ฐ€๋Šฅํ•˜๊ณ  HashTable ์€ ์•ˆ๋œ๋‹ค.
        • ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ ์•ˆ์ „ ์—ฌ๋ถ€๋Š” HasMap ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  Hashtlabe ์€ ๊ฐ€๋Šฅํ•˜๋‹ค.
        • JDK 1.2 ๋ถ€ํ„ฐ Concurrent ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ConcurrentHashMap, CopyOnWriteArrayList ๋“ฑ์ด java.util.concurrent ํŒจํ‚ค์ง€ ์†Œ์†์œผ๋กœ ์ œ๊ณต๋œ๋‹ค.

         

      • HashMap
        • ๋‹ด์„ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
        • ์–ด๋–ค ํด๋ž˜์Šค๋ฅด ๋งŒ๋“ค์–ด์„œ Hash์— ๋„ฃ์„ ๋•Œ equlas ์™€ hashcode ๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
        • ๊ทธ ์ด์œ ๋Š”, ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด hashCode() ๊ฒฐ๊ณผ ๊ฐ’์— ๋”ฐ๋ฅธ ๋ฒ„์ผ“์ด๋ผ๋Š” ๋ชฉ๋กํ˜•ํƒœ์˜ ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๋งŒ์•ฝ ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ์ €์žฅ๋˜์—ˆ๋Š”๋ฐ, hashCode() ๋ฉ”์†Œ๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด, ์ด ๋ฒ„์ผ“์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ get() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด hashcode() ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ฒ„์ผ“์— ๋“ค์–ด๊ฐ„ ๋ชฉ๋ก์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™์ผํ•œ ๊ฐ’์„ ์ฐพ๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ hashCode() ์™€ equals() ๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
        • java map buckets
        • key ์™€ value ๋ฅผ ๋”ฐ๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” keySet, valueOf
        • ๋‘˜ ๋‹ค ๊ฐ™์ด ๊ฐ€์ ธ์™€์•ผ ํ• ๋•Œ๋Š” entrySet ์œผ๋กœ Set<Map.Entity<>> ๋ฅผ ๋ฆฌํ„ด๋ฐ›์•„ ๋‘˜๋‹ค get

         

      • TreeMap
        • ์ •๋ ฌ๋œ Map
        • SortedMap ์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
        • firstKey, lastKey, higherKey, lowerKey ๋“ฑ์˜ ๋ฉ”์„œ๋“œ์ œ๊ณต

       

       

      ์“ฐ๋ ˆ๋“œ
      • JVM ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ฌด๋Ÿฐ ์˜ต์…˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด OS ๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ, ์ ์–ด๋„ 32MB ~ 64MB ์˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•œ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฉด 1MB์ด๋‚ด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ, ์“ฐ๋ ˆ๋“œ๋ฅผ "๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค" ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

       

      • ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
        1. Runnable ์ธํ„ฐํŽ˜์ด์Šค
          • run() ๋ฉ”์„œ๋“œ ๋งŒ ์กด์žฌ
          RunnableSample runnable = new RunableSample();
          new Thread(runable).start();
        1. Thread ํด๋ž˜์Šค
          • Thread ํด๋ž˜์Šค๋Š” Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
          • ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ ์ œ๊ณต
          ThreadSample thread = new ThreadSample();
          thread.start();
        • ๋‘˜ ๋‹ค java.lang
        • ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฉ”์†Œ๋“œ๋Š” run() , ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” start()
        • ์ด๋Ÿฌํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์ œ๊ณตํ•˜๋Š” ์ด์œ ๋Š” ์ž๋ฐ”๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
        • ์“ฐ๋ ˆ๋“œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” RUnnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅด ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์“ฐ๋ ˆ๋“œ ํด๋ž˜์Šค๋ฅด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.
        • AOP ์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์— ๊ด€ํ•œ ๋กœ๊น… ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
        • ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ์“ฐ๋ ˆ๋“œ๋Š” run() ๋ฉ”์†Œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋๋‚œ๋‹ค.
        • ์“ฐ๋ ˆ๋“œ์— ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Thread-n ์ด๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.
        • n ์€ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•œ๋‹ค.
        • ThreadGroup ์œผ๋กœ ๋ฌถ์„ ์ˆ˜๋„ ์žˆ๊ณ , size ๋กœ stackSize ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ OS ์— ๋”ฐ๋ผ ๋ฌด์‹œ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
        • Thread ์— ์žˆ๋Š” static ๋ฉ”์„œ๋“œ๋Š” JVM ์— ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
        • ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„๋„ ๋‹ค๋ฅธ ์‹คํ–‰์ค‘์ธ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ๋ฉˆ์ถฐ๋ฒ„๋ฆฐ๋‹ค.
        • ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์„ ์–ธํ•  ๋•Œ ๋งŒ๋“ ๋‹ค.
        • ์“ฐ๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜๋ ค๋ฉด synchronized ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
        • ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์Šคํƒ์— ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ ๋˜์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ heap ๊ณผ ๊ฐ™์€ ๊ณต์œ ๋˜๋Š” ์ž์›์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ์ˆ˜์ •ํ•  ๋•Œ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
        • synchronized ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
          • ๋ฉ”์†Œ๋“œ ์ž์ฒด๋ฅผ synchronized ๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
          • ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฉ”์†Œ๋“œ ๋‚ด์˜ ํŠน์ • ๋ฌธ์žฅ๋งŒ synchronized ๋กœ ๊ฐ์‹ธ๋Š” ๋ฐฉ๋ฒ•(synchronized statements)
        • synchronized ๋กœ ์„ ์–ธํ•˜๋ฉด ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
        public synchronized void plus(int value) {
        }
        ๋Š” ์ด ๋ฉ”์†Œ๋“œ ์ „์ฒด๊ฐ€ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ธธ๋ฉด ์ด์Šˆ๊ฐ€ ๋˜์ง€๋งŒ
        
        public void plus(int value) {
        	synchronized(this) {
        	}
        }
        
        ๋Š” ํ•ด๋‹น ๋ธ”๋ก๋งŒ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ๋น ๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.
        this ์—๋Š” ๋ณ„๋„๋กœ ์„ ์–ธํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

        ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์— ๋™์‹œ์— ์‚ฌ์šฉ๋ ๋•Œ๋งŒ ์ด๋Ÿฌํ•œ ์“ฐ๋ ˆ๋“œ ๊ณต์œ ๊ฐ€ ๋œ๋‹ค.

        ํ•˜์ง€๋งŒ, ๋”ฐ๋กœ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ์— ๋‹ด์•„ ์‹คํ–‰ํ•˜๋Š” ๊ฑด ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.

        ํ•„์š”ํ•œ add ๋‚˜ ์ˆ˜์ •๋ถ€๋ถ„์— sychronized ๋กœ ๊ฐ์‹ธ๋ฉด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์— ์œ ์šฉํ•˜๋‹ค.

        • StringBuffer ๋Š” synchronized ๋ธ”๋Ÿญ์„ ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ๊ฐ์‹ธ์„œ ์“ฐ๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜์ง€๋งŒ ๋Š๋ฆฌ๊ณ ,
        • StringBuilder ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ถ€๋ถ„์ด ์—†์–ด์„œ ๋น ๋ฅด์ง€๋งŒ ์“ฐ๋ ˆ๋“œ์„ธ์ดํ”„ ํ•˜์ง€ ์•Š๋‹ค.
        • join() - ์ˆ˜ํ–‰์ค‘์ธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€ํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค. , ๋ณ„๋„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์œผ๋ฉด ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
        • interrupt() - ์ˆ˜ํ–‰์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€ ์š”์ฒญ์„ ํ•œ๋‹ค. InterruptedException ๋ฐœ์ƒ์‹œํ‚ค๋ฉด์„œ ์ค‘์ง€

         

        ์“ฐ๋ ˆ๋“œ ์ƒํƒœ

        • NEW - ๊ฐ์ฒด๋Š” ์ƒ์„ฑ๋์ง€๋งŒ ์•„์ง ์‹œ์ž‘๋˜์ง€ ์•Š์Œ
        • RUNNALBE - ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹ซํ–‰ ์ค‘
        • BLOCKED - ์‹คํ–‰ ์ค‘์ง€ ์ƒํƒœ์ด๋ฉฐ, monitor lock ์ด ํ’€๋ฆฌ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š ใ„ด์ƒํƒœ
        • WAITING - ๋Œ€๊ธฐ์ค‘
        • TIMED_WAITING - ํŠน์ • ์‹œ๊ฐ„๋งŒํผ ์Šค๋ ˆ๋“œ ๋Œ€๊ธฐ ์ƒํƒœ
        • TERMINATED - ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ
        • NEW → ์ƒํƒœ → TERMINATED

       

      • ThreadGroup
        • ์“ฐ๋ ˆ๋“œ๋Š” ์šด์˜์ฒด์ œ์˜ ํด๋”์ฒ˜๋Ÿผ ๋ป—์–ด๋‚˜๊ฐ€๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
      • ์“ฐ๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”
        • ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•˜๋‚˜์˜ ํ”„๋กœ๋ ˆ์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ”„๋กœ์„ธ์Šค๋Š” JVM ํ•˜๋‚˜์— 64MB ๊ฐ™์€ ๋ฌด๊ฒ์ง€๋งŒ ์“ฐ๋ ˆ๋“œ๋Š” ๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•˜์—ฌ 1MB ์ •๋„ ๋ฐ–์— ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์“ฐ๋ ˆ๋“œ๋Š” ๊ฐ์ž์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ทธ ์™ธ์˜ ํ”„๋กœ์„ธ์Šค์˜ ํž™์ด๋‚˜ ํด๋ž˜์Šค ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์™€ ๊ฐ™์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์›ํ•˜์ง€ ์•Š๊ฒŒ ๊ณต์œ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.(์‹ฑ๊ธ€ํ„ด)
      • sleep() ์— InterrueptException ์„ ์žก์•„์•ผํ•˜๋Š” ์ด์œ ๋Š” ์ค‘๊ฐ„์— interrupt() ๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

       

      Object
      • wait(), wait(time), notify(), notifyAll()
      • wait ๋Š” WAITING STATUS ๋ฅผ ๋งŒ๋“ค๊ณ  notify() ๋กœ ๊นจ์šธ ์ˆ˜ ์žˆ๋‹ค.

 

IO

  • JVM ๊ธฐ์ค€์œผ๋กœ output, input ์œผ๋กœ ์นญํ•œ๋‹ค.
  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฝ๋Š” ์ž‘์—…์€ Stream ๊ธฐ๋ฐ˜์˜ InputStream, ์“ฐ๋Š” ์ž‘์—…์€ OutputStrem - abstract
  • char ๊ธฐ๋ฐ˜์˜ ๋ฌธ์ž์—ด ์€ Reader, Writer
  • JDK 1.4 ๋ถ€ํ„ฐ๋Š” I/O ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ NIO๋ผ๋Š” ๊ฒƒ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • NIO ๋Š” ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ๋ฒ„ํผ์™€ ์ฑ„๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • NIO ์˜ Files ๊ฐ€ File ํด๋ž˜์Šค ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ๋Œ€์ฒดํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค.
  • File ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋ฐ˜ํ•˜์—ฌ, Files ํด๋ž˜์Šค๋Š” ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๊ฐ€ static ์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • File ํด๋ž˜์Šค๋Š ์ƒ์„ฑํ•œ ํŒŒ์ผ ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด
    • ์กด์žฌํ•˜๋Š”์ง€, ํŒŒ์ผ์ธ์ง€ ๊ฒฝ๋กœ์ธ์ง€, ์ฝ๊ฑฐ๋‚˜, ์“ฐ๊ฑฐ๋‚˜, ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์–ธ์ œ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€
  • ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ํ•ด๋‹น ํŒŒ์ผ์˜
    • ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ , ์‚ญ์ œํ•˜๊ณ , ์ƒ์„ฑํ•˜๊ณ , ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ์ž๋ฐ”์—์„œ๋Š” \\ ๋กœ ํ•ด์•ผ๋˜๋ฉฐ UNIX ์—์„œ๋Š” / ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— File.separator ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•œ๋‹ค.
  • ํŒŒ์ผ ์œ ํ˜• ํ™•์ธ : isDirectory(), isFile(), isHidden()
  • ํŒŒ์ผ ๊ถŒํ•œ ํ™•์ธ : canWrite, canRead, canExcute()
  • getPAth() ๋Š” ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„ ๋ชจ๋‘ ๋‚˜์˜จ๋‹ค.
  • ๋งŒ์•ฝ ๊ฒฝ๋กœ๋งŒ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, getPAranet() ๋กœ ํ•˜๋ฉด ๋œ๋‹ค.
  • list() ๋ฉ”์„œ๋“œ๋Š” FileFilter ์™€ FileNameFilter ๋กœ ์›์น˜์•Š๋Š” ๊ฒƒ์„ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • FileFilter, FileNameFilter ์ธํ„ฐํŽ˜์ด์Šค์˜ accept ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ file ์„ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

  • public abstract class InputStream extends Object Closeable
  • InputStream ์„ ํ™•์žฅํ•œ ํด๋ž˜์Šค ์ค‘ ์ฃผ์š”ํ•œ ํด๋ž˜์Šค
    • FileInputStream
      • ์ƒ์„ฑ์ž public
    • FilterInputStream
      • ์ƒ์„ฑ์ž๊ฐ€ protected ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†๊ฐ์ฒด์—์„œ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ObjectInputStream

     

  • pubilc abstract class OutputStream extends Objct implements Closeable, Flushable
  • flush() ๋Š” ํ˜„์žฌ ๋ฒ„ํผ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋ง๊ณ  ๋ฌด์กฐ๊ฑด ์ €์žฅํ•ด ๋ผ๋Š” ๊ฒƒ

 

  • Reader
    • public abstract class Reader extends Object implemnts Readable, Closeable
    • BuffredReader, InputStreamReader ๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

  • Writer
    • pubilc abstract class Writer extends Object implements Appendable, Closeable, Flushable
    • BufferedWriter ๋Š” Wrtier ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๋ฒ„ํผ๋ผ๋Š” ๊ณต๊ฐ„์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋ฒ„ํผ๊ฐ€ ์ฐจ๊ฐœ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.

P.731

  • Sacnner
    • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ด๋‚˜ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

     

     

Serializable

  • java.io ์— ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ„๋„์˜ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋‹ค.
  • ํด๋ž˜์Šค๊ฐ€ ํŒŒ์ผ์— ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด JVM ์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ค€๋‹ค.
  • ๊ทธ ํ›„ serialVersionUID ๋ผ๋Š” ๊ฐ’์„ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.
  • ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋ฐ” ์†Œ์Šค๊ฐ€ ์ปดํŒŒ์ผ๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.
static final long serialVersionUID = 1L;
  • ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • A ๋ผ๋Š” ์„œ๋ฒ„์—์„œ B ๋ผ๋Š” ์„œ๋ฒ„๋กœ SerialDTO ๋ผ๋Š” ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ „์†กํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด์ •์†กํ•˜๋Š” A ์„œ๋ฒ„์— SerialDTO ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ด์ฝ์•ผ ํ•˜๊ณ , ์ „์†ก๋ฐ›์€ B ์„œ๋ฒ„์—๋„ SerialDTO ํด๋ž˜์Šค๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ๋งŒ ๊ทธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ž„์„ ์•Œ์•„์ฐจ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ A ์„œ๋ฒ„๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” SerailDTO ์—๋Š” ๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ ์žˆ๊ณ , B ์„œ๋ฒ„์˜ SerialDTO ์—๋Š” ๋ณ€์ˆ˜๊ฐ€ 4๊ฐœ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ž๋ฐ”์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ์„œ๋ฒ„๊ฐ€ ์‰ฝ๊ฒŒ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€์ง€ ๋‹ค๋ฅธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” serialVersionUID ๋กœ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.์ฆ‰, ํด๋ž˜์Šค ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ID ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ผ๊ณ  ์ธ์‹ํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ๊ฐ™์€ UID ๋ผ๊ณ  ํ• ์ง€๋ผ๋„ ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž… ๋“ฑ์ด ๋‹ค๋ฅด๋ฉด ์ด ๊ฒฝ์šฐ์—๋„ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์ธ์‹ํ•œ๋‹ค.
  • ObjectOutputStream ๊ณผ ObjectIputerStream ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ฝ๊ณ  ์“ด๋‹ค.
  • serialVersionUID ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฉค๋ฒ„๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง„ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ serialVersionUID ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „์€ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๋ณ€์ˆ˜ ์•ž์— transient ๋ฅผ ์„ ์–ธํ•˜๋ฉด JVM ์œผ๋กœ ๋ณด๋‚ผ ๋•Œ Serializable ์˜ ๋Œ€์ƒ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.
  • ํŒจ์Šค์›Œ๋“œ ๊ฐ™์€ ๋ณด์•ˆ์ƒ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

NIO

  • NIO ๋Š” ์†๋„ ๋•Œ๋ฌธ์— ๋‚˜์™”๋‹ค.
  • ์ฑ„๋„๊ณผ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฑ„๋„์€ ๋„๋งค์ƒ์ด๊ณ  ๋ฒ„ํผ๋Š” ๋„๋งค์ƒ์—์„œ ๋ฌผ๊ฑด์„ ์‚ฌ๊ณ , ์†Œ๋น„์ž์—๊ฒŒ ๋ฌผ๊ฑด์„ ํŒŒ๋Š” ์†Œ๋งค์ƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ByteBuffer ์™€ FileChannel ์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Buffer

  • ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer ๋“ฑ์ด ์žˆ๋‹ค.
  • 0 < position ≤ limit ≤ ํฌ๊ธฐ(capacity())
  • ํ˜„์žฌ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ position()
  • ์ผ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์—†๋Š” ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ limit()
  • ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด capacity()

 

 

Java 7 ์—์„œ ๋ณ€๊ฒฝ๋œ ๊ฒƒ๋“ค

  • JSR 336 ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ
  • ๋ณ€๊ฒฝ๋œ ๋ชฉ๋ก
    • ์ˆซ์ž ํ‘œ์‹œ ๋ฐฉ๋ฒ• ๋ณด์™„
      • 16, 10, 8 ์ง„์ˆ˜ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ด์ง
      • ์ˆซ์ž ์‚ฌ์ด์— _ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์ˆซ์ž๋งŒ!
    • switch ๋ฌธ์—์„œ String ์‚ฌ์šฉ
    • ์ œ๋„ค๋ฆญ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Diamond
      • ์ œ๋„ค๋ฆญ ์ƒ์„ฑ์ž ํƒ€์ž… ์‹œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์€ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
      • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์ด ๋”ฐ๋ฆ„
        • ๋‹ค์ด์•„๋ชฌ๋“œ ๋ฏธ ์ง€์ •์‹œ ์ปดํŒŒ์ผ ๊ฒฝ๊ณ  ๋ฐœ์ƒ
        • ๋‹ค์ด์—„๋ชฌ๋“œ ์ƒ์„ฑ ์‹œ ์œ ์˜ ์‚ฌํ•ญ 1 - ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ์‹œ
        • ๋‹ค์ด์•„๋ชฌ๋“œ ์ƒ์„ฑ ์‹œ ์œ ์˜ ์‚ฌํ•ญ 2 - ์ œ๋„ค๋ฆญํ•˜๋ฉด์„œ๋„ ์ œ๋„ค๋ฆญํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด ์ƒ์„ฑ์‹œ
        • ์ƒ์„ฑ์ž์— ์žˆ๋Š” new ํด๋ž˜์Šค ์ด๋ฆ„ ์‚ฌ์ด์— ํƒ€์ž… ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‘๋ ค๋ฉด, ๋‹ค์ด์•„๋ชฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์‹œ ๋‹ค์ค‘ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • @SafeVarargs
      • ๊ฐ€๋ณ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 
      • final ์ด๋‚˜ static ์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      • ๊ฐ€๋ณ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ reifiable ํƒ€์ž…์ด๊ณ , ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ

      ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

    • try - catch -resource ์—์„œ๋Š” AutoCloseable ์„ ์ƒ์† ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ close() ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

     

    Java 7 ์— ์ถ”๊ฐ€๋œ ๊ฒƒ๋“ค
    • Fork/Join ์€ CPU ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๋‹ค.
    • Work stealing ์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, Dequeue ์—์„œ ๋ฐ”์œ ์ž‘์—…์— ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์ ธ๊ฐ€์„œ ํ•ด์ฃผ๋Š ใ„ด๊ฒƒ
    • Fork / Join ์€ ava.util.concurrent ํŒจํ‚ค์ง€์˜ RecursiveAction ๊ณผ RecursiveTask ๋ผ๋Š” abstract ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • RecursiveAction
      • publci abstaract class RecursiveAction extends ForJoinTask<Void>
    • RecursiveTask
      • public abstract class RecursiveTask<V> extends ForkJoinTask<V>

       

    • ForJoinTask ๋ผ๋Š” ํด๋ž˜์Šค๋Š” FUture ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. Future ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” Java 5 ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋น„๋™๊ธฐ์ ์ธ ์š”์ฒญ์„ ํ•˜๊ณ  ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ ์‚ฌ์šฉ ๋œ๋‹ค.
    • ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด Fok/Join ์˜ ํ•ต์‹ฌ์ด๋‹ค.
    • NIO 2 ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
      • Java 6 ๊นŒ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค.
        • ์‹ฌ๋ณผ๋ฆญ ๋งํฌ, ์†์„ฑ, ํŒŒ์ผ์˜ ๊ถŒํ•œ ๋“ฑ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์ด ์—†์Œ
        • ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” delete() ๋ฉ”์†Œ๋“œ๋Š” ์‹คํŒจ์‹œ ์•„๋ฌด๋Ÿฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  boolean ํƒ€์ž…์˜ ๊ฒฐ๊ณผ๋งŒ ์ œ๊ณตํ•ด์คŒ
        • ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ lastModified() ๋ผ๋Š ๋„ด์†Œ๋“œ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” long ํƒ€์ž…์˜ ๊ฒฐ๊ณผ๋กœ ์ด์ „ ์‹œ๊ฐ„๊ณผ ๋น„๊ตํ•˜๋Š” ์ˆ˜ ๋ฐ–์— ์—†์—ˆ์Œ. ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์—ฐ๊ณ„๋˜์–ด ํ˜ธ์ถœ๋˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‹ค์ˆ˜ ์กด์žฌํ•˜์—ฌ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๋„ ๋งŽ์Œ

         

      • NIO2 ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ€์ฒด๋จ
        • Paths
        • Files
        • FileSystems
        • FileStore
      • lastModifed() ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ WatchService ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•จ.
      • NIO2 ์—์„œ ์ถ”๊ฐ€๋œ ํด๋ž˜์Šค
        • SeekableByteChannel(random access)
        • NetworkChannel ๋ฐ MulticastChannel
        • Asynchronous I/O
          • AsynchronousChannelGroup ์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅด ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ ํ’€์„ ์ œ๊ณตํ•˜์—ฌ ๋ณด๋‹ค ์•ˆ์ •์ ์œผ๋กœ ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ๊ทธ ์™ธ ์ถ”๊ฐ€๋œ ๊ฒƒ๋“ค
        • JDBC4.1
          • RowSetFactory ์™€ RowSetProvider ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
          • Connection ๋ฐ Statement ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด SQL Query ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
          • RowSetFactory ์™€ RowSetProvider ๋Š” ์•„์ฃผ ์‰ฝ๊ฒŒ RowSet ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
        • TransFerQueue ์ถ”๊ฐ€
        • Objects ํด๋ž˜์Šค ์ถ”๊ฐ€
          • Object ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ null ์ด๋ผ๊ณ  ํ• ์ง€๋ผ๋„ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•ด ๋†จ๋‹ค.

     

Java 8 ์—์„œ ์ถ”๊ฐ€๋œ ๊ฒƒ๋“ค

  • Lamda ํ‘œํ˜„์‹
  • Functional(ํ•จ์ˆ˜ํ˜•) ์ธํ„ฐํŽ˜์ด์Šค
  • Stream(์ŠคํŠธ๋ฆผ)
  • Optional
  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ
  • ๋‚ ์งœ ๊ด€๋ จ๋œ ํด๋ž˜์Šค ์ถ”๊ฐ€
  • ๋ณ‘๋ ฌ ๋ฐฐ์—ด ์ •๋ ฌ
  • StringJoiner ์ถ”๊ฐ€

 

 

Optional

  • optional ์€ Funtional ์–ธ์–ด์ธ HAskell ๊ณผ Scala ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋”ฐ์˜จ ๊ฒƒ์ด๋‹ค.
  • null ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • public final class Optional<T> extends Object
  • final ๋กœ ์ƒ์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.
  • ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ empty(), of(), ofNullable() ๋ฉ”์†Œ๋“œ ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
    • empty() : ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” Optioanl ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ofNullable() : ๋งŒ์•ฝ null ์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์‚ฌ์šฉํ•œ๋‹ค.
    • of() : ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—๋Š” of() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ get(), orElse(), orElseGet(), orElseThrow() ๋‹ค
    • get() : ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” null ์ด ๋ฆฌํ„ด๋œ๋‹ค.
    • orElse() : ๋งŒ์•ฝ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • orElseGet() : Supplier<T> ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • orElseThrow() : ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์— ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์‚ฌ์šฉํ•œ๋‹ค. Exception ๋„ Supplier<T> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

Default Method

  • ๋งŒ๋“ค์–ด์ง„ ์ด์œ ๋Š” ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋‚ ์งœ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค

  • Date ๋‚˜ SimpleDateFormatter ๋Š” ์“ฐ๋ ˆ๋“œ ์„ธ์ดํ”„ ํ•˜์ง€ ์•Š๋‹ค.
  • ๋ถˆ๋ณ€ ๊ฐ์ฒด๋„ ์•„๋‹ˆ์–ด์„œ ์ง€์†์ ์œผ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
  • API ๊ตฌ์„ฑ๋„ ๋ณต์žกํ•˜๊ฒŒ ๋˜์–ด ์žˆ์–ด์„œ ์—ฐ๋„๋Š” 1900๋…„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋„๋ก ๋˜์–ด ์žˆ๊ณ  ๋‹ฌ์€ 1๋ถ€ํ„ฐ, ์ผ์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์Šˆ๋“ค ๋•Œ๋ฌธ์— java.time ์ด๋ผ๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
  • https://docs.oracle.com/javase/tutorial/datatime/iso/index.html

 

๋ณ‘๋ ฌ ๋ฐฐ์—ด ์ •๋ ฌ

  • paralleSort() ๋ผ๋Š” ์ •๋ ฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, For-Join ํ”„๋ ˆ์ž„์›์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • CPU ๋Š” ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ ์†๋„๋Š” ๋น ๋ฅด๋‹ค.
  • ๋”ฐ๋ผ์„œ, 5000๊ฐœ ์ •๋„๋ถ€ํ„ฐ parallelSort() ์„ฑ๋Šฅ์ด ๋นจ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— CPU ๊ฐ€ ์ข‹์œผ๋ฉด ์‚ฌ์šฉํ•œ๋‹ค.

 

StringJoiner

  • ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋œ๋Š ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
public void joinStringOnly(String[] stringArray) {
	StringJoinner joiner = new STringJoiner(",");
	for (String string : stringArray) {
		joiner.add(string);
	}
}

public void withCollector(STring[] stringArray) {
	List<String> strings = Arrays.asList(stringArray);
	STring result = strings.stream().collect(Collectors.joining(","));
}

 

 

Lamda

  • ์ต๋ช… ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ๋„ ๋–จ์–ด์ง€๊ณ  ๋ถˆํŽธํ•œ๋ฐ, ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๋Œ€์‹ , ์ด ํ‘œํ˜„์‹์€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ธ ๊ฒƒ๋“ค๋งŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋žŒ๋‹ค ํ‘œํ˜„์‹์€ ์ต๋ช… ํด๋ž˜์Šค๋กœ ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ต๋ช… ํด๋ž˜์Šค๋Š” ๋žŒ๋‹ค ํ‘œํ˜„์‹์œผ๋กœ ์ „ํ™˜ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    • java.lang.Runnable
    • java.util.Comparator
    • java.io.FileFilter
    • java.util.concurrent.Callable
    • java.security.PrivilegedAction
    • java.nio.file.PathMatcher
    • java.lang.reflect.InvocationHandler

     

private void calculateClassic() {
	Calculate calculateAdd = new Calculate() {
		@Override
		public int operation(int a, int b) {
			return a + b;
		}
	};
}

->

private void calculate() {
	Calculate calculateAdd = (a, b) -> a + b;
	calculateAdd.operation(1, 2);
}

 

  • ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” interface ์— ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ 1๊ฐœ๋ฟ์ด์—ฌ์•ผ ๋˜๋Š”๋ฐ, ์ฆ‰ Funcional ์ธํ„ฐํŽ˜์ด์Šค์ด์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ๊ทธ๋Ÿฌํ•œ ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ @FunctionalInterface ๋ฅผ ์„ ์–ธํ•ด ๋†“์„ ์ˆ˜ ์žˆ๋‹ค.

 

private void runCommonThread() {
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getContextClassLoader());
        }
    };
    
    new Thread(runnable).start();
}

->

private void runCommon() {
    new Thread(() -> System.out.println(Thread.currentThread().getContextClassLoader())).start();
}

 

 

java.util.funcion ํŒจํ‚ค์ง€

  • Predicate
    • test() ๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ  boolean ์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ถ”๊ฐ€๋กœ and(), negate(), or() ์ด๋ผ๋Š” default ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, isEquals() ์ด๋ผ๋Š” static ๋ฉ”์†Œ๋“œ๋„ ์žˆ๋‹ค.
  • Suplier
    • get() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’์€ generic ์œผ๋กœ ์„ ์–ธ๋œ ํƒ€์ž…์„ ๋ฆฌํ„ดํ•œ๋‹ค. ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๋ฉ”์†Œ๋“œ๋Š” ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
  • Comsumer
    • accept() ๋ผ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’์ด ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ถœ๋ ฅ์„ ํ•  ๋•Œ์ฒ˜๋Ÿผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ผ์ด ์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ถ”๊ฐ€๋กœ andThen() ์ด๋ผ๋Š” default ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๋ฐ, ์ˆœ์ฐจ์ ์ธ ์ž‘์—…์„ ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Function
    • apply() ๋ผ๋Š” ํ•˜๋‚˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’๋„ ์กด์žฌํ•œ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” Function<T, R> ๋กœ ์ •์˜๋˜์–ด ์žˆ์–ด, Generic ํƒ€์ž…์„ ๋‘ ๊ฐœ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์•ž์— ์žˆ๋Š” T ๋Š” ์ž…๋ ฅ ํƒ€์ž…, ๋’ค์— ์žˆ๋Š” R ์€ ๋ฆฌํ„ด ํƒ€์ž…์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋ณ€ํ™˜์„ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • UnaryOperator: A unary operator from T → T
    • apply() ๋ผ๋Š” ํ•˜๋‚˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’๋„ ์กด์žฌํ•œ๋‹ค. ๋‹จ, ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์— ๋Œ€ํ•˜์—ฌ ๊ฒฐ๊ณผ๋„ ๊ฐ™์€ ๊ฒฝ์šฐ์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • BinaryOperator : A binary operator from (T, T) → T
    • apply() ๋ผ๋Š” ๋‘๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋ฆฌํ„ด๊ฐ’๋„ ์กด์žฌํ•œ๋‹ค. ๋‹จ, ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์— ๋Œ€ํ•˜์—ฌ ๋ฆฌํ„ดใ„ฑ๋ฐง๋„ ๊ฐ™์€ ํƒ€์ž…์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

     

Stream

  • ๋ญ”๊ฐ€ ์—ฐ์†๋œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ : ์ปฌ๋ž™์…˜์˜ ๋ชฉ๋ก์„ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ค‘๊ฐœ ์—ฐ์‚ฐ : ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๊ฐœ ์—ฐ์‚ฐ ๋ถ€๋ถ„์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์•„๋ฌด๋Ÿฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. (parallelStream() ์€ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ CPU ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ , ๋ช‡๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ• ์ง€๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์€ stream() ์„ ์“ด๋‹ค.)
  • ์ข…๋‹จ ์—ฐ์‚ฐ : ๋งˆ์ง€๋ง‰์œผ๋กœ ์ค‘๊ฐœ ์—ฐ์‚ฐ์—์„œ ์ž‘์—…๋œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ด ์ค€๋‹ค.

 

  • ์ค‘๊ฐ„ ์—ฐ์‚ฐ
    • filter(pred)
    • map(mapper) / mapToInt() / mapToLong() / mapToDobule()
    • flatMap(flat-mapper) / ์œ„์™€ ์œ ์‚ฌ
    • distinct()
    • sorted(comparator)
    • peak()
    • limit()
    • skip()

     

  • ์ข…๋‹จ ์—ฐ์‚ฐ
    • forEach() / forEachOrdered()
    • toArray(array-factory)
    • any / all / noneMath(pred)
    • findFirst / Any(pred)
    • cumulate(binop)
    • reduce(binop) / reduce(base, binop)
    • collect(collector)
    • min(), max(), count()
    • anyMatch(), allMatch(), noneMatch9)

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

  • static ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
  • ํŠน์ • ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
  • ํŠน์ • ์œ ํ˜•์˜ ์ž„์˜์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ
  • ์ƒ์„ฑ์ž ์ฐธ์กฐ

 

 

Violate

  • JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ optimization ์„ ์ ์šฉํ•ด์„œ CPU ์บ์‹œ ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  CPU ์บ์‹œ์— ์ €์žฅ๋˜๊ณ  ์ฐธ์กฐํ•˜๋„๋ก ํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ฒƒ์ด Thread ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ๋•Œ ์บ์‹ฑ์ด ๋˜๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿด ๋•Œ violate ๋ฅผ ๋ณ€์ˆ˜์—
  • private violatile double instanceVariable = 0;
  • ์“ฐ๋ ˆ๋“œ์— ์„ ์–ธ๋œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ผ์ด ์žˆ์„ ๋•Œ, ์ด์ฒ˜๋Ÿผ violatile ๋กœ ์„ ์–ธํ•จ๋…€ ํ•ด๋‹น ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด "๋‚ด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” volatile ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ, ๋„ˆ๋„ ์ด๊ฑฐ ์“ฐ๋‹ˆ๊ฐ€ ๊ฐ’์„ ๋ฐ”๊ฟ”" ๋ผ๊ณ  ์–˜๊ธฐํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ๊ฐ™์€ ๊ฐ์ฒด์— ์ด์“ดใ„ด ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋ณ€์ˆ˜์— ์ด๋ ‡๊ฒŒ volatile ์ด๋ผ๊ณ  ์จ ์ค„ ํ•„์š”๋Š” ์—†๋‹ค.
  • ๋‚จ๋ฐœํ•˜๋ฉด ์„ฑ๋Šฅ์ƒ์œผ๋กœ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋˜ํ•œ volatile ์ด๋ผ๊ณ  ์ ์–ด์ฃผ์ง€ ์•Š์•˜๋‹ค๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๊ผฌ์ด๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.
  • ์ตœ์ ํ™”๊ฐ€ ๋˜์ง€ ์•Š์•„ ์บ์‹œ๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ณด์ง€ ์•Š์Œ๋…€ volatile ์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

'๋…์„œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ”์˜ ์‹ (1, 2๊ถŒ)  (0) 2021.01.19