-
Notifications
You must be signed in to change notification settings - Fork 4
Description
λλ€λ μ§λ ¬ν ν΄μλ μλλ μ΄μ
λλ€λ μ΅λͺ ν΄λμ€μ²λΌ μ§λ ¬ν ννκ° κ΅¬νλ³λ‘(κ°λ Ή κ°μλ¨Έμ λ³λ‘) λ€λ₯Ό μ μλ€. λ°λΌμ λλ€λ₯Ό μ§λ ¬ννλ μΌμ κ·Ήν μΌκ°μΌ νλ€(μ΅λͺ ν΄λμ€μ μΈμ€ν΄μ€λ λ§μ°¬κ°μ§λ€) - p.285 -
μ€λΌν΄ 곡μλ¬Έμμμλ λλ€ ννμκ³Ό μ΅λͺ ν΄λμ€μ λν μ§λ ¬νλ₯Ό 'κ°λ ₯νκ²' κΆμ₯νμ§ μλ€
κ·Έ μ΄μ λ λλ€ ννμμ΄λ μ΅λͺ
ν΄λμ€μ λν΄μ μ§λ ¬νλ₯Ό ν λ, μλ° μ»΄νμΌλ¬κ° νΉμ ꡬ문μ λν΄μ Synthetic constructs(μΈμ‘° κ΅¬λ¬Έμ΄ λ§λ λ²μ κ°μ)μ μ½μ
νλλ° μ΄ Synthetic constructsλ μ»΄νμΌλ¬μ ꡬν λ°©μμ λ°λΌμ λ€λ₯Ό μ μλ€.
μ΄ μλ―Έλ '.class' νμΌλ μ»΄νμΌλ¬ ꡬνμ λ°λΌ λ€λ₯Ό μ μμμ μλ―Ένλ€. λ΄μ© 보기
κ²°κ³Όμ μΌλ‘ μμ μ΄μ μ μν΄μ λ€λ₯Έ μ»΄νμΌλ¬λ₯Ό μ¬μ©νκ³ μλ κ²½μ° νΈνμ±μ λ¬Έμ κ° λ°μν μ μκΈ° λλ¬Έμ μ§λ ¬νλ₯Ό νλκ²μ κ°νκ² κΆμ₯νμ§ μλλ€!
λλ€λ₯Ό μ§λ ¬ν νλ λ°©λ²
νμ§λ§ λμ λ°λΌμ λλ ννμμ΄λ μ΅λͺ ν΄λμ€κ° ν¬ν¨λ ν΄λμ€λ₯Ό μ§λ ¬νλ₯Ό ν΄μΌν λλ μμ μ μλ€
λ¨Όμ , λλ€κ° μ μλ ν΄λμ€λ₯Ό λ
λ€ μ§λ ¬ν/μμ§λ ¬νλ₯Ό ν΄λ³΄μ

main λ©μλμμ ν μ€νΈ λ°©λ²μ λ€μκ³Ό κ°λ€
- Runnable κ°μ²΄ fn νλ
- fn μ€ν
- fn μ§λ ¬ν ν νμΌλ‘ μ μ₯
- νμΌ μμ§λ ¬ν
- μμ§λ ¬ν λ κ°μ²΄ deserializedFn μ€ν
main λ©μλλ₯Ό μ€ν ν΄λ³΄λ©΄

μ§λ ¬νλ₯Ό νλ €κ³ ν λ **NotSerializableException**μ΄ λ°μνλ©΄μ μ§λ ¬νμ μ€ν¨νλ€..
λλ€ μ§λ ¬νλ₯Ό νλ©΄ μλλ€κ³ νμ§,, νμ§ λͺ»νλ€κ³ λ μ νμμ,,
class νμΌμ λ΄λ λ³ λ¬Έμ κ° μμ΄λ³΄μ΄λλ°..
κ·Έλ λ€,,,! μ΅λͺ ν΄λμ€μ μμ±,λμ λ°©μμ μ»΄νμΌ νμμ κ²°μ λμ§λ§, λλ€λ λ°νμμ μ€μ νΈμΆμ κ²°μ λλ€κ³ νλ€. (invokedynamic)
κ·Έλ κΈ° λλ¬Έμ javaλ₯Ό μ€ν μν¬ λ -Djdk.internal.lambda.dumpProxyClasses={output-dir} μ΅μ
μ λ£μ΄μ£Όκ² λλ©΄ μ€μ λλ€κ° μμ±λλ ν΄λμ€ νμΌμ λ³Ό μ μλ€.
β
-Djdk.internal.lambda.dumpProxyClassesμ΅μ μ¬μ© μ κ°μ΄ μ¬μ©λκ³ μλ λͺ¨λ λΌμ΄λΈλ¬λ¦¬μ λν class νμΌμ΄ μμ±λ μ μλ€
μ°λ¦¬κ° μΌλ°μ μΌλ‘ μ§λ ¬νλ₯Ό ν λ νλ λ°©μμΌλ‘ NotSerializableLambdaExpression ν΄λμ€μ Serializable μΈν°νμ΄μ€λ₯Ό μ μΈνμ§λ§,, μ μ΅μ μΌλ‘ μμ±λ λλ€μ class νμΌμ 보면 Serializable μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μμ§ μλ€..
λλ€λ₯Ό μ§λ ¬ν νλ €λ©΄ νμ μΊμ€νΈ(Type cast)λ₯Ό ν΄μ£Όμ΄μΌ νλ€
μ°λ¦¬κ° μ μΈν ν¨μν μΈν°νμ΄μ€μ Serializeble μΈν°νμ΄μ€λ₯Ό κ²°ν©ν νμ μΌλ‘ λλ€μμ νμ μΊμ€ν μ ν΄μΌλλ€
μλ₯Όλ€μ΄ μ°λ¦¬κ° μ¬μ©νκ³ μλ ν¨μν μΈν°νμ΄μ€λ Runnableμ΄κ³ μ΄λ₯Ό νμ
μΊμ€ν
νλ©΄ μλμ κ°λ€

νμ
μΊμ€ν
μ ν΄μ€ λ€ μμ±λ λλ€ class νμΌμ μ΄ν΄λ³΄λ©΄

μ κ³Όλ λ€λ₯΄κ² Runnableκ³Ό Serializable μΈν°νμ΄μ€λ₯Ό λͺ¨λ ꡬννκ³ μλκ²μ λ³Ό μ μλ€!
π‘
(Runnable & Serializable)λ°©μμΌλ‘ νμ μΊμ€ν μ ν΄μ£Όμ΄λ λμ§λ§ μ΄λ 보μΌλ¬ νλ μ΄νΈ μ½λκ° λ μ μμΌλ―λ‘
λͺ μμ μΌλ‘ λ μΈν°νμ΄μ€λ₯Ό μμν 컀μ€ν ν μΈν°νμ΄μ€λ₯Ό λ§λ λ€ νμ μΊμ€νΈλ₯Ό νλ©΄ λ κΉλνλ€
ex)
interface SerializableRunnable extends Runnable, Serializable { }(SerializableRunnable) () β System.out.println(ββ);
νμ μΊμ€νΈλ₯Ό ν΄μ€λ€, λ€μ νλ² main λ©μλλ‘ ν μ€νΈλ₯Ό ν΄λ³΄μ!
μ μμ μΌλ‘ μ λμνλκ²μ λ³Ό μ μλ€..ππ»ππ»
λλ€ μ§λ ¬νμ κΈ°λ³Έ λ©μ»€λμ¦μ λν΄ λ μμΈν μκ³ μΆμΌλ©΄ Serialize a Lambda in Javaλ₯Ό μ°Έκ³ νμ
μ 리
- λλ€λ μΌλ°μ μΈ μ§λ ¬ν λ°©μμΌλ‘λ μ§λ ¬ν λμ§ μμΌλ―λ‘ νμ μΊμ€νΈλ₯Ό ν΄μΌνλ€
- νμ§λ§ 곡μμ μΌλ‘λ λλ€λ μ΅λͺ ν΄λμ€μ λν μ§λ ¬νλ₯Ό βκ°νκ²β κΆμ₯νμ§ μλλ€
- κΌ νμν κ²½μ°κ° μλλΌλ©΄ 리ν©ν°λ§ νλκ²μ κΆμ₯νλ€
κ΄λ ¨ μμ€λ μ¬κΈ°μμ λ³Ό μ μμ΅λλ€


