Rustλ₯Ό 곡λΆνλ μ΄μ
Rustλ₯Ό 곡λΆνλ μ΄μ λ 무μμΌκΉ?
- κ°λ ₯ν νμ μμ€ν μ λν νꡬ (Some, Option)
- rustλ Some, Option ν€μλμμ 보λ―μ΄ ν¨μν νλ‘κ·Έλ¨μ μ§μνλ κ°λ ₯ν νμ μμ€ν μ κ°μ§κ³ μλ€, μ΄λ₯Ό ν΅ν΄μ λ°νμμ μμ ν λμμ 보μ₯νλ€
- λ©λͺ¨λ¦¬ μ κ·Όμ λν νꡬ (stack, heap)
- CμΈμ΄ 보λ€λ νΈλ¦¬νμ§λ§, μλ°μ€ν¬λ¦½νΈ 보λ€λ μ§μ μ μΌλ‘ λ©λͺ¨λ¦¬μ μ κ·Ό ν μ μλ€. μλ‘ μλ°μ€ν¬λ¦½νΈλ λμ μΈ λ²‘ν°λ§ μ§μνλλ° λ°ν΄, Rustλ λμ κ³Ό μ μ μ¬μ΄μ¦μ νμ λ κ°μ΄ μ§μνλ€.
- λͺ¨λνμ λν νꡬ (mod)
- Rustλ κΈ°λ³Έμ μΌλ‘ λͺ¨λνλ₯Ό ꡬμ±μ μ μ λ‘ μ€κ³λμλ€. modλΌλ νμΌμ΄ λͺ¨λμ μ§μ μ μΌλ‘μ μ¬λ¬ λͺ¨λλ€μ λ§λ€κ³ λ©μΈ λͺ¨λμμ μ¬μ© ν μ μλλ‘ λͺ¨λ μμ€ν μ΄ κ°μ³μ€ μλ€
μ€νκ³Ό νμ λν λ¬μ€νΈ 곡μ μλ£
λ무λ μ€μνλ€. νμ κΈ°μ΅νμ
μ€νκ³Ό ν λ§μ νλ‘κ·Έλλ° μΈμ΄λ€ μμμ, μ°λ¦¬λ κ·Έλ κ² μμ£Ό μ€νκ³Ό νμ λν μκ°μ ν νμκ° μμ΅λλ€. κ·Έλ μ§λ§ λ¬μ€νΈμ κ°μ μμ€ν νλ‘κ·Έλλ° μΈμ΄μμλ, κ°μ΄ μ€νμ μλμ§ νμ μλμ§μ μ¬λΆκ° μΈμ΄μ λμ λ°©μκ³Ό μ°λ¦¬μ κ²°λ¨μ λ ν° μν₯μ μ€λλ€. μ°λ¦¬λ μ΄ μ₯μ λ€μͺ½μμ μ€νκ³Ό νμ κ΄κ³λ μμ κΆμ μΌλΆλΆμ κΈ°μ ν κ²μ΄κΈ°μ, μ¬κΈ°μλ μ€λΉ μΌμ κ°λ΅ν μ€λͺ λ§ νκ² μ΅λλ€.
μ€νκ³Ό ν λλ€ μ¬λ¬λΆμ μ½λμμμ λ°νμμ μ¬μ©ν μ μλ λ©λͺ¨λ¦¬μ λΆλΆμ λλ€λ§, μ΄λ€μ κ°κΈ° λ€λ₯Έ λ°©μμΌλ‘ ꡬ쑰ν λμ΄ μμ΅λλ€. μ€νμ κ°μ λ°μλ€μΈ μμλλ‘ κ°μ μ μ₯νκ³ λ°λ λ°©ν₯μΌλ‘ κ°μ μ§μλλ€. μ΄κ²μ last in, first outμ΄λΌκ³ νμ£ . μμ¬μλ μ μλ₯Ό μκ°ν΄λ³΄μΈμ; μ¬λ¬λΆμ΄ μ μλ₯Ό λ μΆκ°νλ €λ©΄ μ μλλ―Έμ κΌλκΈ°μ μμμ¬λ¦¬κ³ , μ¬λ¬λΆμ΄ μ μκ° νμν΄μ§λ©΄ κΌλκΈ°μμλΆν° νμ₯ κΊΌλ΄κ² λ©λλ€. μ€κ°μ΄λ λ°μμλΆν° μ μλ₯Ό μΆκ°νκ±°λ μ κ±°νλ 건 μ μλ κ²λλ€! λ°μ΄ν°λ₯Ό μΆκ°νλ κ²μ μ€νμ νΈμνκΈ° (pushing on the stack)λΌκ³ λΆλ₯΄κ³ , λ°μ΄ν°λ₯Ό μ κ±°νλ κ²μ μ€νμ ννκΈ° (popping off the stack)λΌκ³ λΆλ¦ λλ€.
μ€νμ λ°μ΄ν°μ μ κ·Όνλ λ°©μ λνμ λΉ λ¦ λλ€: μ΄ λ°©μμ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ£μ΄λκΈ° μν κ³΅κ° νΉμ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ 곡κ°μ κ²μν νμκ° μ ν μλλ°, λ°λ‘ κ·Έ 곡κ°μ΄ νμ μ€νμ κΌλκΈ°(top)μ΄κΈ° λλ¬Έμ λλ€. μ€νμ λΉ λ₯΄κ² ν΄μ£Όλ λλ€λ₯Έ νΉμ±μ μ€νμ λ΄κΈ΄ λͺ¨λ λ°μ΄ν°κ° κ²°μ λμ΄ μλ κ³ μ λ ν¬κΈ°λ₯Ό κ°κ³ μμ΄μΌ νλ€λ μ μ λλ€.
μ»΄νμΌ νμμ ν¬κΈ°κ° κ²°μ λμ΄ μμ§ μκ±°λ ν¬κΈ°κ° λ³κ²½λ μ μλ λ°μ΄ν°λ₯Ό μν΄μλ, νμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μμ΅λλ€. νμ μ‘°κΈ λ 볡μ‘ν©λλ€: λ°μ΄ν°λ₯Ό νμ λ£μλ, λ¨Όμ μ μ₯ν 곡κ°μ΄ μλμ§ λ¬Όμ΄λ΄ λλ€. κ·Έλ¬λ©΄ μ΄μ체μ κ° μΆ©λΆν 컀λ€λ ν μμ λΉ μ΄λ€ μ§μ μ μ°Ύμμ μ΄ κ³³μ μ¬μ©μ€μ΄λΌκ³ νμνκ³ , ν΄λΉ μ§μ μ ν¬μΈν°λ₯Ό μ°λ¦¬μκ² λλ €μ£Όμ£ . μ΄ μ μ°¨λ₯Ό ν κ³΅κ° ν λΉνκΈ°(allocating on the heap)λΌκ³ λΆλ₯΄κ³ , μ’ μ’ κ·Έλ₯ "ν λΉ(allocating)"μΌλ‘ μ€μ¬ λΆλ¦ λλ€. μ€νμ ν¬μΈν°λ₯Ό νΈμ±νλ κ²μ ν λΉμ ν΄λΉλμ§ μμ΅λλ€. ν¬μΈν°λ κ²°μ λμ΄ μλ κ³ μ λ ν¬κΈ°μ κ°μ΄λ―λ‘, μ°λ¦¬λ μ€νμ ν¬μΈν°λ₯Ό μ μ₯ν μ μμ§λ§, μ€μ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ μ ν λλ ν¬μΈν°λ₯Ό λ°λΌκ°μΌ ν©λλ€.
νμ μ μ₯λ λ°μ΄ν°μ μ κ·Όνλ κ²μ μ€νμ μ μ₯λ λ°μ΄ν°μ μ κ·Όνλ κ²λ³΄λ€ λλ¦°λ°, κ·Έ μ΄μ λ ν¬μΈν°κ° κ°λ¦¬ν¨ κ³³μ λ°λΌκ°μΌ νκΈ° λλ¬Έμ λλ€. νλ νλ‘μΈμλ€μ λ©λͺ¨λ¦¬ λ΄λΆλ₯Ό λ λ°μ΄λ€λ λ λ λΉ¨λΌμ§λλ€. μ μ¬ν μλ‘, μ¬λ¬ ν μ΄λΈλ‘λΆν° μ£Όλ¬Έμ λ°λ λ μ€ν λμ μ¨μ΄ν°λ₯Ό μκ°ν΄λ³΄μΈμ. λ€μ ν μ΄λΈλ‘ μμ§μ΄κΈ° μ μ μ§κΈ ν μ΄λΈμμ λͺ¨λ μ£Όλ¬Έμ λ€ λ°λ κ²μ΄ κ°μ₯ ν¨μ¨μ μ΄κ² μ£ . A ν μ΄λΈμμ νλ μ£Όλ¬Έ λ°κ³ , λ€μ B ν μ΄λΈλ‘ κ°μ νλ μ£Όλ¬Έ λ°κ³ , λ€μ Aλ‘, λ€μ Bλ‘ κ°λ©° νλμ© μ£Όλ¬Έμ λ°μΌλ©΄ ν¨μ¬ λλ €μ§ κ²λλ€. μ΄μ λ§μ°¬κ°μ§λ‘, νλ‘μΈμλ (νμ μλ λ°μ΄ν°μ κ°μ΄) λ©λ¦¬ λ¨μ΄μ Έ μλ λ°μ΄ν°λ€ 보λ€λ (μ€νμ μλ κ²κ³Ό κ°μ΄) λΆμ΄μλ λ°μ΄ν°λ€μ λν μμ μ νλ©΄ λ λΉ¨λΌμ§λλ€. νμΌλ‘λΆν° ν° κ³΅κ°μ ν λΉλ°λκ² λν μκ°μ΄ 걸릴 μ μμ΅λλ€.
μ½λμ μ΄λ λΆλΆμ΄ νμ μ΄λ€ λ°μ΄ν°λ₯Ό μ¬μ©νλμ§ μΆμ νλ κ², νμ μ€λ³΅λ λ°μ΄ν°μ μμ μ΅μννλ κ², κ·Έλ¦¬κ³ ν λ΄μ μ¬μ©νμ§ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ¬ κ³΅κ°μ΄ λͺ¨μλΌμ§ μκ² νλ κ²μ λͺ¨λ μμ κΆκ³Ό κ΄κ³λ λ¬Έμ λ€μ λλ€. μ¬λ¬λΆμ΄ μμ κΆμ μ΄ν΄νκ³ λλ©΄, μ¬λ¬λΆμ λμ΄μ μ€νκ³Ό νμ λν μκ°μ΄ μμ£Ό νμμΉ μκ² λ κ²λλ€λ§, ν λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ κ²μ΄ 곧 μμ κΆμ μ‘΄μ¬ μ΄μ μμ μκ² λλ κ²μ μ΄κ²μ΄ μ΄λ€ λ°©μμΌλ‘ μλνλμ§ μ€λͺ νλλ° λμμ μ€ μ μμ΅λλ€.