Skip to content

Latest commit

ย 

History

History
565 lines (358 loc) ยท 15.7 KB

language.md

File metadata and controls

565 lines (358 loc) ยท 15.7 KB

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด



๋™๊ธฐ, ๋น„๋™๊ธฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žฅ๋‹จ์ ์„ ๊ฐ๊ฐ ์„ค๋ช… ํ•ด๋ณด์„ธ์š”.

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)
  • ๋™๊ธฐ : callํ•˜๊ณ  ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์Œ ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.
    • ์žฅ์  : ์•ˆ์ „์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.
    • ๋‹จ์  : ๋Š๋ฆฌ๋‹ค.
  • ๋น„๋™๊ธฐ : callํ•˜๊ณ  ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์•„๋„ ๋‹ค์Œ ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.
    • ์žฅ์  : ๋น ๋ฅด๋‹ค
    • ๋‹จ์  : ์ฒ˜๋ฆฌ ํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กญ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.



HashMap ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)

HashMap์ด๋ž€ ๊ฐ์ฒด๋ฅผ Map์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

key-value์Œ ํ•˜๋‚˜๋งŒ ๋„ฃ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๋ฉฐ, ๋ฐฐ์—ด์˜ ํ•œ ์š”์†Œ๋ฅผ bucket ์ด๋ผ๊ณ  ํ•œ๋‹ค. (์ž๋ฐ”์—์„œ๋Š”, ํ‚ค์™€ ๊ฐ’์˜ ํƒ€์ž…์€ ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ธฐ๋ณธ ํƒ€์ž… ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.)

๋˜ํ•œ, HashMap์—์„œ์˜ key๋Š” uniqueํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (key๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€, value๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅ))

key-value์Œ ์ด ๋“ค์–ด๊ฐ€๋Š” ์œ„์น˜๋Š”, key ์˜ Hash๊ฐ’ (HashCode) ์ด๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ O(1) ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด ๋•Œ, ๋™์ผํ•˜์ง€ ์•Š์€ ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ์œ„์น˜์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ Collision ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, Collision ์€ Map์˜ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ, ์–ด๋–ค Hash ํ•จ์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์— ๋”ฐ๋ผ์„œ ๋” ๋‚˜์€ Map์ด ๋  ์ˆ˜ ์žˆ๋‹ค.


์ด ๋•Œ, Map์— ๋” ๋“ค์–ด๊ฐˆ ๊ณต๊ฐ„์ด ์—†์„๋•Œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•œ๋‹ค.

  1. ๋ฆฌ์ŠคํŠธ๋กœ ๋„ฃ๋Š”๋‹ค.
  2. size๋ฅผ ๋Š˜๋ฆฐ๋‹ค.

size๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. Load factor ๋Š” Map์˜ capacity ๋ฅผ ๋ช‡ %๋กœ ํ• ์ง€๋ฅผ ์ •ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ๊ฐ€๋ น, Map์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 4์ด๊ณ , load factor๊ฐ€ 0.75๋ผ๊ณ  ํ•ด๋ณด์ž.

Map<String, String> map = new HashMap<>(4, 0.75f);

์ฃผ์˜) ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆด ๋•Œ, Iterator ๋ฐ”๋กœ ๋ชป ์“ฐ๊ณ , keySet() ํ•˜๊ณ  ์จ์•ผํ•จ.

๊ทธ๋Ÿฌ๋ฉด, Map์˜ ๊ณต๊ฐ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

ํŒŒ์ƒ์งˆ๋ฌธ. HashMap์˜ HashCode(), equals() ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.

  1. hashCode() : ๊ฐ์ฒด ๊ณ ์œ ์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. : ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  2. equals() : == ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. : ๋‘ ๊ฐ์ฒด์˜ ๋‚ด์šฉ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ฐธ๊ณ ) instanceof ์‚ฌ์šฉ

a instanceof b
  • a๋Š” b๋กœ ํ˜• ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ์ง€
  • ๋ฐ˜ํ™˜๊ฐ’: true or false


ํŒŒ์ƒ์งˆ๋ฌธ. HashTable๊ณผ HashMap์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.


  • ๊ณตํ†ต์ 

    • key-value ์Œ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ๋ฉด์—์„œ๋Š” ๋™์ผํ•˜๋‹ค.
  • ์ฐจ์ด์ 

    • HashTable: ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „(thread safe)ํ•˜๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • HashMap: ๋น ๋ฅธ ๋Œ€์‹ ์— ๋™๊ธฐํ™”์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
      • ConcurrentHashMap ์‚ฌ์šฉ
      • Collections.synchronizedMap ์‚ฌ์šฉ
    Map m = Collections.synchronizedMap(new HashMap(...));



Array vs List vs Vector ์ฐจ์ด์ 

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)



P NP ๋ฌธ์ œ์—๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”




ArrayList์™€ LinkedList๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)
  • ArrayList์™€ LinkedList์— ๊ณตํ†ต์ ์œผ๋กœ List๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค. ์ฆ‰ ์„ ํ˜•์ž๋ฃŒ๊ตฌ์กฐ๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.
  • Array List์˜ ์ด๋ฆ„๋Œ€๋กœ Array(๋ฐฐ์—ด) ์ž…๋‹ˆ๋‹ค. Linked List๋Š” ์ด๋ฆ„๋Œ€๋กœ Linked(doubly linked list)์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์กฐํšŒ, ์‚ฝ์ž…, ์‚ญ์ œ์— ๋Œ€ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋ฐฐ์—ด, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
ArrayList LinkedList
dynamic array๋ฅผ ์ด์šฉํ•˜์—ฌ element ์ €์žฅ doubly linked list๋ฅผ ์ด์šฉํ•˜์—ฌ element ์ €์žฅ
dynamic array์ด๊ธฐ์— ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ผ๋ถ€๋ถ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ •์ ์œผ๋กœ ํ• ๋‹นํ•œ ์ƒํƒœ์ด๋‹ค. element์˜ ์•ž ๋’ค ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
Manipulation(์‚ฝ์ž…, ์‚ญ์ œ) ์—ฐ์‚ฐ์€ ๋Š๋ฆฌ๋‹ค. element๊ฐ€ ์‚ฝ์ž… ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์˜ํ–ฅ๋ฐ›๋Š” element๋ฅผ ์ด๋™ํ•ด์•ผํ•œ๋‹ค. (bit shifting ํ•„์š”) Manipulation(์‚ฝ์ž…, ์‚ญ์ œ) ์—ฐ์‚ฐ์€ ArrayList ๋น„ํ•ด ๋น ๋ฅด๋‹ค. ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜๊ธฐ์— bit shifting๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๊ธฐ์— list ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. List, Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๊ธฐ์— list, queue ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
element ์ ‘๊ทผ์ด ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด ArrayList๊ฐ€ ์ข‹์€ ์„ ํƒ์ด๋‹ค. ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋งŒ ์•ˆ๋‹ค๋ฉด O(1)์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. element ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด LinkedList๊ฐ€ ์ข‹์€ ์„ ํƒ์ด๋‹ค.




Java vs Python ์— ๋Œ€ํ•ด์„œ ์„ค๋ช… ํ•ด๋ณด์„ธ์š”.

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)
Java Python
๋ฉ”๋ชจ๋ฆฌ JVM์—์„œ Garbage Collection์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ,
๋Œ€์ƒ์€ heap์˜์—ญ.
[ Python Garbage Collection ]

์ถ”๊ฐ€์„ค๋ช… ํ•„์š”.
์‹คํ–‰ [์ž‘๋™ ๋ฐฉ์‹]

1) ์ปดํŒŒ์ผ๋Ÿฌ : ๋ชจ๋“  ์†Œ์Šค์ฝ”๋“œ(.java) => ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)
2) JVM : ์šด์˜์ฒด์ œ์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜

=> ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์ง€๋งŒ, ์‹คํ–‰ ์†๋„๋Š” ๋น ๋ฆ„.
[์ž‘๋™ ๋ฐฉ์‹]

1) Interpreter : ํ•œ ์ค„์”ฉ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰

=> ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ํ•ด์„๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ฆผ.
(๋ณ€์ˆ˜ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒ€์‚ฌํ•˜์—ฌ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.)
์ž๋ฃŒํ˜• ์ •์ ์œ ํ˜• (ํƒ€์ž…์„ ์–ธ O) ๋™์ ์œ ํ˜• (ํƒ€์ž…์„ ์–ธ X)
์Šค๋ ˆ๋”ฉ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฐ ์ œ์–ด์™€ ๊ด€๋ จ๋œ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,
์šด์˜์ฒด์ œ์— ์ƒ๊ด€์—†์ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.
์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์ด๋ฉฐ,
๋ณ„๋„ ๋ชจ๋“ˆ์„ ์ด์šฉ ํ•ด์•ผํ•จ.

cf) ์–ธ์–ด๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด, ์ธํ„ฐํ”„๋ฆฌ ์–ธ์–ด๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€ ๋ฐฉ๋ฒ•์ผ๊นŒ?





[Java] Exception, Error์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)

Error, Exception์€ Throwable class์˜ subclass์ด์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


โ € Error Exception
ํŒจํ‚ค์ง€ java.lang.error java.lang.exception
๋ฐœ์ƒ ์‹œ์  ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐœ์ƒ. ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. Checked Exception์€ ์ปดํŒŒ์ผ ์‹œ์ ์— ์•Œ ์ˆ˜ ์žˆ๋‹ค. Unchecked Exception์€ ๋Ÿฐํƒ€์ž„์—์„œ๋งŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋ณต๊ตฌ ์—๋Ÿฌ๋Š” ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ try cactch ๋ธ”๋ฝ์„ ์ด์šฉํ•˜์—ฌ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
ํƒ€์ž… ๋ชจ๋“  ์˜ˆ์™ธ๋Š” Unchecked Type Checked Type, Unchecked Type์œผ๋กœ ๋ถ„๋ฅ˜
์˜ˆ์‹œ OutOfMemory, StackOverFlow Checked Exception: NoSuchMethod, ClassNotFound
Unchecked Exception: NullPointer, IndexOutOfBounds

error vs exception

  • Checked Exception: ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ SQLException, FileNotFoundException
  • Unchecked Exception: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์‹œ ๋ฐœ์ƒํ•˜๋Š” ArrayIndexOutOfBoundException, NullPointerException




interface์™€ abstract์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”. - 1ํŽธ

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ๊ตฌํ˜„์ฒด๋“ค์€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ •์˜ํ•ด๋‘” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œ ํ•จ์— ์žˆ์–ด ์‚ฌ์šฉํ•˜๋ฉฐ

์ถ”์ƒํด๋ž˜์Šค๋Š” ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๋กœ์ง์„ ์ถ”์ƒํ™”์‹œํ‚ค๊ณ , ์ž์‹ํด๋ž˜์Šค๋“ค์ด ๋ถ€๋ชจํด๋ž˜์Šค๋ฅผ ํ™•์žฅ์‹œํ‚ค๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์–ด๋–ป๊ฒŒ ํ™œ์šฉ?

interface Remocon {
 public void on();
  public void off();
  public void upChannel();
  public void downChannel();
}
public class LGSmartRemocon implements Remocon {
  public void on() { ์ „์› ์ผœ์ง ๊ตฌํ˜„ }
  public void off() { ์ „์› ์ผœ์ง ๊ตฌํ˜„ }
  public void upChannel() { ์ฑ„๋„ ์ฆ๊ฐ€ ๊ตฌํ˜„ } 
  public void downChannel() { ์ฑ„๋„ ๊ฐ์†Œ ๊ตฌํ˜„ }
}
public class SamsungSmartRemocon implements Remocon {
  public void on() { ์ „์› ์ผœ์ง ๊ตฌํ˜„ }
  public void off() { ์ „์› ์ผœ์ง ๊ตฌํ˜„ }
  public void upChannel() { ์ฑ„๋„ ์ฆ๊ฐ€ ๊ตฌํ˜„ } 
  public void downChannel() { ์ฑ„๋„ ๊ฐ์†Œ ๊ตฌํ˜„ }
}

์ •๋ถ€์—์„œ ๋ฆฌ๋ชจ์ฝ˜์˜ ์ŠคํŒฉ์€ ๋ฌด์กฐ๊ฑด ์ฑ„๋„ ์ „์›์ผฌ, ๋”, ์ฑ„๋„ ์ฆ๊ฐ€, ์ฑ„๋„ ๊ฐ์†Œ๊ฐ€ ์žˆ์–ด์•ผ ์ „ํŒŒ์ธ์ฆ์„ ๋‚ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด LG, Samsung์€ Remocon ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฌด์กฐ๊ฑด ์ฑ„๋„ ์ „์›์ผฌ, ๋”, ์ฑ„๋„ ์ฆ๊ฐ€, ์ฑ„๋„ ๊ฐ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถ”์ƒํด๋ž˜์Šค ์˜ˆ์ œ๋Š” https://velog.io/@foeverna/Java-์ถ”์ƒํด๋ž˜์Šค-์˜ˆ์ œ ์ด๊ฒŒ ์ œ์ผ ์ข‹๋„ค์š”!


์†์„ฑ

  1. ์ถ”์ƒํด๋ž˜์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ์ถ”์ƒํด๋ž˜์Šค๋Š” ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ–‰์œ„๋งŒ ๊ฐ€์ง„๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘์ƒ์†์ด ๋˜๊ณ , ์ •์˜๋œ ๋ชจ๋“  ํ–‰์œ„๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๊ณ ์š”.

2์˜ ์ด์œ  ๋•Œ๋ฌธ์— interface๋Š” static, final ๋ณ€์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.


DI๋กœ ๋ณธ ์Šคํ”„๋ง๊ณผ ์ธํ„ฐํŽ˜์ด์Šค ์ด์•ผ๊ธฐ

  • ์Šคํ”„๋ง์˜ ๊ฐœ๋…์ธ DI ์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง์€ DI ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด, Bean Factory ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ IoC ์ปจํ…Œ์ด๋„ˆ์ธ Application Context ๊ฐ€ ์‹ฑ๊ธ€ํ†ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋–„๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์‹ฑ๊ธ€ํ†ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜ ๋งŒ๊ฐœ์˜ ์š”์ฒญ์ด ๋™์‹œ์— ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ์ด ์•„๋‹Œ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • DI์— ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, DI ๋ฅผ ํ•˜๋Š” ๋Œ€์ƒ์ด ์ƒํƒœ ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ Thread safe ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.




interface์™€ abstract์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”. - 2ํŽธ

์˜ˆ๋น„ ๋‹ต์•ˆ ๋ณด๊ธฐ (๐Ÿ‘ˆ Click)

1) interface

  1. ๋ฌด์—‡์ธ๊ฐ€?

    : ์ถ”์ƒ ๋ฉ”์„œ๋“œ, static, final ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ์ƒ์„ฑ์ด ๋˜๋Š” ์„ ์–ธ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

  2. ์™œ ์“ฐ๋Š”๊ฐ€?

    : ๋‹ค์ค‘ ์ƒ์†์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

    cf) ์ œ์–ธ : C++์€ ๋‹ค์ค‘ ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‚˜ Java๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ์ƒ์†๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์ค‘ ์ƒ์†์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    : ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ์„ ๋ณด์žฅํ•œ๋‹ค.

  3. ์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜?

    // ์„ ์–ธ
    public interface Person{
    public static final String name = "ํ™๊ธธ๋™";    // ๋ณ€์ˆ˜ ์„ ์–ธ (public, static, final ์ƒ๋žตํ•ด๋„ ์ž๋™)
    public void eat();                           // ๋ฉ”์„œ๋“œ ์„ ์–ธ
    }
    // ์‚ฌ์šฉ
    public class Student implements Person{
    public void study(){            // ๋ฉ”์„œ๋“œ ์„ ์–ธ
       // some code here 
    }
    public void eat(){              // ์˜ค๋ฒ„๋ผ์ด๋”ฉ
       // some code here 
    }
    
    }

2) abstract

  1. ๋ฌด์—‡์ธ๊ฐ€?

    : ์ž์ฒด๋กœ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋˜์ง€ ์•Š๋Š”, ์ƒ์†์„ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

  2. ์™œ ์“ฐ๋Š”๊ฐ€?

    : ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์ถ”์ƒํด๋ž˜์Šค์˜ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณตํ†ต์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ ์ถ”์ƒํด๋ž˜์Šค์˜ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ์— ๊ตฌํ˜„ํ•˜์—ฌ DRY ์›์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

    : ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ์„ ๋ณด์žฅํ•œ๋‹ค.

    : non-static, non-final ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜?

    // ์„ ์–ธ
    public abstract class Person{
    public abstract void eat();  // ์ถ”์ƒ ๋ฉ”์„œ๋“œ
    public void work(){	         // ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ
       // some code here 
    }
    }
    // ์ƒ์†
    public class Student extends Person{
    public void eat(){           // ์˜ค๋ฒ„๋ผ์ด๋”ฉ
       
    }
    }



์“ฐ๋ ˆ๋“œ์„ธ์ดํ”„๋ž€?




Garbage Collection์ด๋ž€, ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์„ธ์š”.




ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์—๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ  ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์žฅ์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”

  • ์ถ”๊ฐ€์งˆ๋ฌธ: ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋Š ์˜์—ญ์— ์ €์žฅ๋˜๋‚˜์š”?


Garbage Collection์ด๋ž€?




Memory Leak์˜ ๋Œ€์ฒ˜๋ฐฉ๋ฒ•




์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜ ํŠน์ง•

#์ปดํŒŒ์ผ ํ•„์š”์—†๋‹ค #๋ฆฌ๋ฒ„์‹ฑ์— ์ทจ์•ฝ




[Java] ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์™€์˜ ์ฐจ์ด




[C++] STL map์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š”๊ฐ€?




๋ฉ”๋ชจ๋ฆฌ ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์žˆ๋Š”๊ฐ€?

  • ๊ผฌ๋ฆฌ์งˆ๋ฌธ(๋ถ€์ž‘์šฉ? ์ •์ฑ… ๋ฐ์ดํ„ฐ์— ์ˆ˜์‹œ๋กœ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง€๋Š” ์ƒํ™ฉ์— ๋ฝ์„ ๊ฑธ์ง€ ์•Š๊ณ  ์ •์ฑ…์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€?)


๋‹คํ˜•์„ฑ์ด๋ž€?




์ฃผ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ




๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด๊ฐ€ ์ ˆ์ฐจ์ง€ํ–ฅ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ง€๋Š” ์žฅ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?




์–ธ์ œ SingletonํŒจํ„ด์„ ์“ฐ๋ฉด ์œ ์šฉํ•œ์ง€ ์„ค๋ช…ํ•˜์„ธ์š”.





์šฉ๊ฐํ•œ ์นœ๊ตฌ๋“ค with ๋‚จ์†ก๋ฆฌ ์‚ผ๋ฒˆ์ง€