week11_jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
νλ‘κ·Έλ¨μ΄ μΈλΆμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λ, μ
μΆλ ₯μ κΈ°λ€λ¦¬λ λ°©μμ λΆλ₯
Blocking-I/O
: λ©μΆ°μ κΈ°λ€λ¦¬κΈ°
μΈλΆμμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λμ κ°λ§ν κΈ°λ€λ¦¬λ κ². μΈλΆμ μμ
κ²°κ³Όλ₯Ό λ©μΆ°μ κΈ°λ€λ¦¬κΈ° λλ¬Έμ κ²°κ³Όλ₯Ό κ·Έ μ리μμ λ°λ‘ λ°μ μ μμ.
νΈμΆλ ν¨μκ° μμ μ μμ μ λͺ¨λ λ§μΉ λκΉμ§ νΈμΆν ν¨μμκ² μ μ΄κΆμ λκ²¨μ£Όμ§ μκ³ λκΈ°νκ² νλ λ°©μ.
Non-Blocking I/O
: λ©μΆμ§ μκ³ λ€λ₯Έ μμ
μ νλ©΄μ κΈ°λ€λ¦¬κΈ°.
μΈλΆμμ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λμ λ©μΆμ§ μκ³ λ€λ₯Έ μΌμ νλ©΄μ κΈ°λ€λ¦Ό.
μ¦ νλ‘κ·Έλ¨μ΄ κ²°κ³Όλ₯Ό μ»μ΄μ€κΈ°κΉμ§ λ©μΆ°μμ§ μκ³ λ€λ₯Έ μΌμ νλ€κ° λμ€μ κ²°κ³Όλ₯Ό μ¬μ©νλκ² κ°λ₯ν΄μ‘μ λ κ²°κ³Όλ₯Ό λ°μμ€λ λ°©μ. β μμ μ νμ¬ λ§₯λ½κ³Ό μκ΄μμ΄ μΈλΆ μμ κ³Ό λ°μ΄ν°λ₯Ό 곡μ ν λ°©λ²μ΄ νμνκ³ μ΄λ₯Ό μν μΆκ° ꡬν νμ.
νΈμΆλ ν¨μκ° μΌλ¨μ λ°λ‘ 리ν΄ν΄μ νΈμΆν ν¨μμκ² μ μ΄κΆμ λκ²¨μ£Όκ³ , νΈμΆν ν¨μκ° λ€λ₯Έ μΌμ ν μ μλ κΈ°νλ₯Ό μ£Όλ λ°©μ.
- Syncμ Asyncλ₯Ό ꡬλΆνλ κΈ°μ€μ
μμ μμ
μ΄λ€.
λκΈ°μ λͺ¨λΈμ λͺ¨λ μμ
λ€μ΄ μΌλ ¨μ μμλ₯Ό λ°λ₯΄λ©° κ·Έ μμμ λ§κ² λμ
νλ€. μ¦, A,B,C μμλλ‘ μμ
μ΄ μμλμλ€λ©΄ A,B,C μμλ‘ μμ
μ΄ λλμΌ νλ€.
μ€λ Ή μ¬λ¬ μμ μ΄ λμμ μ²λ¦¬λκ³ μλ€κ³ ν΄λ, μμ μ΄ μ²λ¦¬λλ λͺ¨λΈμ μμκ° λ³΄μ₯λλ€λ©΄ μ΄λ λκΈ°μ μ²λ¦¬ λͺ¨λΈμ΄λΌκ³ ν μ μλ€.
λ°λ©΄ λΉλκΈ°μ λͺ¨λΈμ μμ μ μμκ° λ³΄μ₯λμ§ μλλ€.
λ§κ·Έλλ‘ λΉλκΈ°(Asynchronous) μ²λ¦¬ λͺ¨λΈλ‘, A,B,C μμλ‘ μμ μ΄ μμλμ΄λ A,B,C μμλ‘ μμ μ΄ λλλ€κ³ 보μ₯ν μ μλ€.
-
Synchronous/Asynchronous
λ νΈμΆλλν¨μμ μμ μλ£ μ¬λΆλ₯Ό λκ° μ κ²½μ°λ
κ° κ΄μ¬μ¬λ€.
νΈμΆλλ ν¨μμκ² callback
μ μ λ¬ν΄μ, νΈμΆλλ ν¨μμ μμ
μ΄ μλ£λλ©΄ νΈμΆλλ ν¨μκ° μ λ¬λ°μ callbackμ μ€ννκ³ , νΈμΆνλ ν¨μλ μμ
μλ£ μ¬λΆλ₯Ό μ κ²½μ°μ§ μμΌλ©΄ Asynchronous
λ€.
λ°λ©΄, νΈμΆνλ ν¨μκ° νΈμΆλλ ν¨μμ μμ
μλ£ ν 리ν΄μ κΈ°λ€λ¦¬κ±°λ, λλ νΈμΆλλ ν¨μλ‘λΆν° λ°λ‘ λ¦¬ν΄ λ°λλΌλ μμ
μλ£ μ¬λΆλ₯Ό νΈμΆνλ ν¨μ μ€μ€λ‘ κ³μ νμΈνλ©° μ κ²½μ°λ©΄ Synchronous
λ€.
1.2 μ¬λ¬κ°μ§ μΌμ λ€λ£¨λ λ κ°μ§ λ°©μ, λ³λ ¬μ±(Parallelism)κ³Ό λμμ±(Concurrency)
β μΌκΎΌμ΄ μΌνλ λ°©μ
λ³λ ¬μ±(Parallelism
)μ μμ
μ μ²λ¦¬νλ μΌκΎΌμ 물리μ μΌλ‘ μ¬λΏμ λμ΄ κ°μ μμ
μ λμμ
μννλ κ²μ λ»νκ³ , λμμ±(Concurrency)
μ μΌκΎΌμ΄ μ¬λ¬κ°μ§ μΌμ λ²κ°μ κ°λ©° μννλ
κ²μ λ»νλ€. λ³λ ¬μ±μ μΌκΎΌμ΄ μ¬λΏμ΄μ΄μΌλ§ μ±λ¦½νλ κ°λ
μ΄μ§λ§, λμμ±μ μΌκΎΌμ μ μλ
μκ΄ μμ΄ μ€λ‘μ§ μΌκΎΌμ΄ μΌνλ λ°©μκ³Ό μ°κ΄ μλ€.
λμμ±μ μΌκΎΌμ΄ μμ μ μ°¨λ‘λλ‘ λλ΄κ°λ©° μ§ννλ κ²μ΄ μλ, 맑μ μΌμ΄ λλμ§ μμμμλ μ¬λ¬ μΌμ νμμ λ°λΌ λ²κ°μ κ°λ©΄μ μ§ννλ λ°©μμΌλ‘ μΌνλ κ²μ λ»νλ€. νλμ μΌκΎΌ λ§μΌλ‘λ λμμ±μ ν보ν μ μμΌλ©°,μ¬λ¬ μΌκΎΌμ μ¬μ©νμ¬ λ³λ ¬μ±μ ν보νκ³ μ΄μ λν΄ λμμ±μ ν보νλ κ²λ κ°λ₯νλ€. λμμ±μ λ³λ ¬μ±κ³Ό μλμ§ ν¨κ³Όκ° μκΈ° λλ¬Έμ νμ λ°©μμ ν΅ν΄ λμμ±μ ν보νλ κ²½μ°κ° μ‘°κΈ λ μΌλ°μ μ΄λ€. μ£Όμν΄μΌνλ μ μ λ³λ ¬μ±κ³Ό λμμ±μ κ°μ΄ ν보νλ κ²½μ° μλμ§ ν¨κ³Όλ₯Ό λΌ μ μμ§λ§, λ μ¬μ΄μ μμ‘΄μ±μ μ ν μλ€λ κ²μ΄λ€.
λμμ±μ μμμ ν¨μ¨μ μΌλ‘ μ¬μ©
νλ κ²μ΄ λͺ©μ μ΄κ³ , λ³λ ¬μ±μ λ§μ μμμ ν¬μ
ν΄μ μΌμ μ²λ¦¬λμ λ리λ κ²μ΄ λͺ©μ μ΄λ€.
μΆμν΄λμ€λ abstract λΌλ ν€μλμ ν¨κ» μ μΈλ ν΄λμ€μ΄λ€ (μΆμ λ©μλλ₯Ό ν¬ν¨ν μλ μκ³ νμ§ μμ μλ μλ€). μΆμν΄λμ€λ μΈμ€ν΄μ€ν λ μ μμ§λ§ μμλ μ μλ€.
μΆμλ©μλλ μλμ κ°μ΄ λ©μλ ꡬνλΆκ° μλ λ©μλμ΄λ€.
abstract void moveTo(double deltaX, double deltaY); μ΄λ€ ν΄λμ€κ° μΆμλ©μλλ₯Ό ν¬ν¨νλ€λ©΄ μΆμν΄λμ€λ‘ μ μΈλμ΄μΌ νλ€.
public abstract class GraphicObject {
// declare fields
// declare nonabstract methods
abstract void draw();
}
μΆμν΄λμ€λ₯Ό μμλ°λ ν΄λμ€μμλ μΌλ°μ μΌλ‘ λΆλͺ¨ν΄λμ€μ μλ λͺ¨λ μΆμλ©μλλ€μ ꡬννλ€. κ·Έλ μ§ μμκ²½μ° ν΄λΉ μλΈν΄λμ€ λν abstract λ‘ μ μΈλμ΄μΌ νλ€.
μΆμν΄λμ€μ μΈν°νμ΄μ€λ μΈμ€ν΄μ€ν νλ κ²μ λΆκ°λ₯νλ©°, ꡬνλΆκ° μλ λ©μλμ μλ λ©μλ λͺ¨λ κ°μ§ μ μλ€λ μ μμ μ μ¬νλ€.
μΈν°νμ΄μ€μμ λͺ¨λ λ³μλ κΈ°λ³Έμ μΌλ‘ public static final
μ΄λ©°, λͺ¨λ λ©μλλ public abstract
μΈ λ°λ©΄
μΆμν΄λμ€μμλ static
μ΄λ final
μ΄ μλ νλλ₯Ό μ§μ ν μ μκ³ , public, protected, private
λ©μλλ₯Ό κ°μ§ μ μλ€.
μΈν°νμ΄μ€λ₯Ό ꡬννλ μ΄λ€ ν΄λμ€λ, λ€λ₯Έ μ¬λ¬κ°μ μΈν°νμ΄μ€λ€μ ν¨κ» ꡬνν μ μλ€. μΆμν΄λμ€λ μμμ ν΅ν΄ ꡬνλλλ°, μλ°μμλ λ€μ€μμμ μ§μνμ§ μμΌλ―λ‘ μΆμν΄λμ€λ₯Ό μμλ°μ μλΈν΄λμ€λ λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ μ μλ€.
- κ΄λ ¨μ±μ΄ λμ ν΄λμ€ κ°μ μ½λλ₯Ό 곡μ νκ³ μΆμ κ²½μ°
- μΆμν΄λμ€λ₯Ό μμλ°μ ν΄λμ€λ€μ΄ 곡ν΅μΌλ‘ κ°μ§λ λ©μλμ νλκ° λ§κ±°λ, public μ΄μΈμ μ κ·Όμ μ΄μ(protected, private) μ¬μ©μ΄ νμν κ²½μ°
- non-static, non-final νλ μ μΈμ΄ νμν κ²½μ°. μ¦, κ° μΈμ€ν΄μ€μμ state λ³κ²½μ μν λ©μλλ₯Ό μ μΈν μ μλ€.
- μλ‘ κ΄λ ¨μ±μ΄ μλ ν΄λμ€λ€μ΄ μΈν°νμ΄μ€λ₯Ό ꡬννκ² λλ κ²½μ°μ μ¬μ©νλ€. μλ₯Ό λ€μ΄, Comparable, Cloneable μΈν°νμ΄μ€λ μ¬λ¬ ν΄λμ€λ€μμ ꡬνλλλ°, ꡬνν΄λμ€λ€ κ°μ κ΄λ ¨μ±μ΄ μλ κ²½μ°κ° λλΆλΆμ΄λ€.
- νΉμ λ°μ΄ν° νμ μ νλμ λͺ μνκ³ μΆμλ°, μ΄λμ κ·Έ νλμ΄ κ΅¬νλλμ§λ μ κ²½μ°μ§ μλ κ²½μ°.
- λ€μ€μμμ νμ©νκ³ μΆμ κ²½μ°
JDK μμ μΆμν΄λμ€μ λνμ μΈ μμλ Collections Framework
μ μΌλΆμΈ AbstractMap
μ΄λ€. AbstractMap μ μλΈν΄λμ€μΈ HashMap, TreeMap, ConcurrentHashMap
μμλ AbstractMap μ μ μλμ΄ μλ get, put, isEmpty, containsKey, containsValue λ±μ λ©μλλ₯Ό 곡μ νλ€.
μ¬λ¬κ°μ μΈν°νμ΄μ€λ₯Ό ꡬννλ JDK μ ν΄λμ€ μμλ‘λ HashMap
μ΄ μλ€. HashMap μ Serializable, Cloneable, Map<K,V> λ₯Ό ꡬνν ν΄λμ€μ΄λ€. μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ HashMap μ μΈμ€ν΄μ€λ 볡μ κ°λ₯νλ©°, μ§λ ¬ν(byte stream μΌλ‘ 컨λ²ν
)κ° κ°λ₯νλ©°, map μΌλ‘μ¨μ κΈ°λ₯μ κ°μ§λ€λ κ²μ μΆλ‘ ν μ μλ€.
Java 8 μ΄μ μλ μΆμν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄μμ κ°μ₯ ν¬κ² λκ»΄μ‘λ λΆλΆμ μΈν°νμ΄μ€λ λ©μλ ꡬνλΆλ₯Ό κ°μ§ μ μμ§λ§, μΆμν΄λμ€μμλ κ°μ§ μ μλ€ λ κ²μ΄μλ€. μ΄ ν° μ°¨μ΄μ λλ¬Έμ λ€λ₯Έ μ€μν λΆλΆλ€μ΄ λμ λμ§ μμλ€. νμ§λ§ Java 8 λΆν° μΈν°νμ΄μ€λ default ν€μλλ₯Ό μ¬μ©ν΄ λ©μλ ꡬνλΆλ₯Ό κ°μ§ μ μκ² λλ©΄μ μλΉν λΉμ·ν΄μ‘λ€κ³ ν μ μκ² μΌλ, κΈ°μ‘΄μλ μμμ§λ§ ν¬κ² μ κ²½μ°μ§ μμλ(?) λμ μ°¨μ΄μ μ΄ λΆλͺ νκ² λλ¬λκ² λ κ² κ°λ€.
https://yaboong.github.io/java/2018/09/25/interface-vs-abstract-in-java8/