μ΄ ν¬μ€ν μ μΏ ν‘ ννΈλμ€ νλμ μΌνμΌλ‘, μ΄μ λ°λ₯Έ μΌμ μ‘μ μμλ£λ₯Ό μ 곡λ°μ μ μμ΅λλ€.
μΆμ² : http://www.hyunlog.com/blog/entry/μ-μκ³ λ¦¬μ¦μ-μμμΌ-νμ§
μ μκ³ λ¦¬μ¦μ μμμΌ νμ§?
μκ³ λ¦¬μ¦μ λν΄ κΈμ μ¨ λ³΄κΈ°λ‘ νλ€.
λλ μκ³ λ¦¬μ¦μ΄ μ μ°νμ κ°μ₯ κΈ°λ³Έ, κ°μ΄λΌ μκ°νλ€. μΈκ³΅μ§λ₯, μ΄μ체μ , DBMS λ± μ μ°νμ μ΄λμκ³ μ μ ν μκ³ λ¦¬μ¦μ λν μ΄ν΄κ° νμνμ§ μλ κ³³μ΄ μλ€. νλ§μμ λ°μ μ¬λλ€μ 보λλΌλ κ·Έ μ€ λ§μ μ¬λλ€μ΄ μκ³ λ¦¬μ¦μ λ°°μ°λ€ 보면 λμ€λ μλ°λ€μ΄λ€.
λλ λνμμμ μνμ λ
Όλ¦¬νκ³Ό μκ³ λ¦¬μ¦μ λ°°μ°λ©΄μ λ΄κ° μ΄ μͺ½μμ μμ€νΌνΈκ° λ λ§νΌ μ€λ§νΈνμ§ μλ€λ κ²μ μμλ€. κ·Έλλ μκ³ λ¦¬μ¦μ μ μ°νμ νκΈ°μ νμνλ―λ‘ μκ³ μμ΄μΌ νλ€κ³ μκ°ν΄ λ
Έλ ₯νλ€. μκ³ λ¦¬μ¦ μ±
μ λ§μ§λ§ 본격μ μΌλ‘ λ³Έ κ²μ΄ 92λ
κ²½μ΄λΌ κΈ°μ΅νλ€.
μ μ§κΈ λ€μ μκ³ λ¦¬μ¦μ΄ μκ°λ κΉ?
μ°λ¦¬ νμ¬μμ μλ‘μ΄ μνμ μ€λΉνλλ° μκ³ λ¦¬μ¦ νλ ¨μ΄ νμνκΈ° λλ¬Έμ΄λ€. μκ³ λ¦¬μ¦ νλ ¨μ΄ λμ§ μμ μ¬λμ λ¨μ coder μ΄κ³ , μκ³ λ¦¬μ¦μ μ΄ν΄νκ³ μ μ©νλ©΄μ λΆν° νλ‘κ·Έλλ¨ΈλΌ λΆλ₯Ό μ μλ€. μκ³ λ¦¬μ¦ νλ ¨μ΄ λκ³ μ΄μ λ°νν μ μ°νμ μ¬λ¬ λΆμΌλ₯Ό μκ²λλ©΄ μ»΄ν¨ν° μμ§λμ΄ λλ κ³ΌνμλΌ λΆλ₯Έλ€. μ»΄ν¨ν° μμ§λμ΄/κ³Όνμμ μμν μ¬λΆμΈ Donald Knuthμ The Art of Computer Programming μ 보μ. μ±
μ΄λ¦μ "μ»΄ν¨ν° νλ‘κ·Έλλ° κΈ°μ " μ΄λΌκ³ νλ€. μ΄ κ² λ³΄κ³ μ΄ν΄ν΄μΌμ§ νλ‘κ·Έλλ¨Έλλ€. μ°λ¦¬ νμ¬κ° μ’μ νλ‘κ·Έλλ¨Έ, μμ§λμ΄κ° νμνκ³ λλΆν° λ€μ νλ ¨ν΄μΌ μ§μλ€ λμ μ€ μ μμ κ² κ°λ€.
μκ³ λ¦¬μ¦μ Cormen λ±μ΄ μ΄ Introduction to Algorithms μΌλ‘ 곡λΆνλ€. κ½€ λκΊΌμ΄ μ±
μΌλ‘ μ΄ μͺ½ λΆμΌμ λ² μ€νΈμ
λ¬λ€. μκ³ λ¦¬μ¦ μ½μ§ μλ€. μ€μ£½νλ©΄ λΉ κ²μ΄μΈ κ° "λκ° μ λ§ μ’μ νλ‘κ·Έλλ¨ΈλΌλ©΄ Knuthμ The Art of Programmingμ 보μμΌ νκ³ , μ λ§ λ€ μ½μμΌλ©΄ μ¬λΉ¨λ¦¬ μκΈ°μκ² μ΄λ ₯μ 보λ΄λΌ" νμκΉ? μ΄ μ±
μ΄ 4κΆμ΄λ€. μλ§ μ΄ λΆμΌμμ κ°μ₯ μ λͺ
νλ©΄μλ κ°μ₯ λ§μ΄ μ³λ€ λ³΄κΈ°λ§ ν μ±
μΌ κ²μ΄λ€. μ΄ μ±
λ€ 4κΆ λ€ μ½μ μ¬λμ΄λΌλ©΄ λκ° μ±κ°λμ§λ λͺ¨λ₯΄κ² μ± κ° κ²μ΄λ€. ꡬκΈμ μΈλ₯΄κ²μ΄ λΈλ¦°μ΄ μλ§λ μ μ© λΉνκΈ° λ³΄λΌ μ§λ λͺ¨λ₯Έλ€.
μ΄ μ λλ©΄ μΈμΌν°λΈ λμ§ μμκΉ?
90λ
λ μ΄μ μ§κΈ κ½€ μκ³ λ¦¬μ¦ μ§νμ΄ λ°λμλ€. μκ³ λ¦¬μ¦μ΄ λ°λ κ²μ΄ μλλΌ μκ³ λ¦¬μ¦μ μ¬μ©νλ SW νκ²½μ΄ λ°λμλ€. κ°μ₯ ν° λ³νλ JAVAμ κ°μ κ°μ²΄μ§ν₯ μΈμ΄μ κΈ°μ μ΄ λ³΄κΈλλ©΄μ JAVAμ Collection κ°μ΄ νΈλ¦¬ν μλ£κ΅¬μ‘° API λ€μ΄ λ±μ₯ν κ²μ΄λ€. μμ£Ό μ’μ νμμ΄λ€.
JAVA Collection κ°μ λꡬ, νλΆμμ μλ£κ΅¬μ‘°λ₯Ό κ°λ₯΄μΉλ©΄μ λκΌλ μ΄λ €μ, κ·Έλ¦¬κ³ μ΅κ·Όμ λνμμμ κ°μ²΄μ§ν₯ κΈ°μ μ κ°μνλ©΄μ μκΈ΄ μννΈμ¨μ΄ κ΄μ μ λ³ν, SWμ μ¬μ¬μ©μ±, νμ€μ μΌλ‘ μ΄μ© μ μμ΄ κ³μ μꡬμ¬νμ΄ λ°λκΈ° λλ¬Έμ SWλ μ§μμ μΌλ‘ λ°λμ λ°μ μλ€λ extreme programming λ°©λ²λ‘ λ±μ΄ λ€ μ°λ¦¬κ° μκ³ λ¦¬μ¦μ 보λ λ°©λ²μ λ³νλ₯Ό μꡬνκ³ μλ€κ³ μκ°νλ€. μμ μ μ°λ¦¬κ° red-black treeλ₯Ό μ§μ μ§°λ€λ©΄ μ΄μ λ JAVA Collection μ€μ μ λΉν λ
μμ λΆλ¬ μΈ μ μκ² λ κ²μ΄λ€. νΈλ¦¬ν¨μ μ»μμ§λ§ νλ‘κ·Έλλ° μλ―Ένλ κΈ°μ μ μμ΄ κ°λ€. μΌλ§λ μ Collection APIκ° κ΅¬νλμμκΉ κΆκΈνκΈ°λ νλ€. 20λ
μ μλ λ€λ₯Έ μ¬λμ΄ λ§λ κ² λ―Ώμ§ λͺ»νλ μ§μ μμ μ΄ κ΅¬νν΄μΌ νλ€κ³ νκ² μ§λ§, μ΄μ λ κ°λ€ μ°λ κ²μ΄ λ§λ€. λ΄κ° μ¬μ¬μ©νλλ‘ κ°λ₯΄μΉλλ°...
μ΄λ° κ΄μ μμ μκ³ λ¦¬μ¦μ λ³΄κ³ μΆλ€. κ°μ²΄μ§ν₯μ ν΄λμ€, encapsulation, hierarchy, polymorphismμ΄ μ λ§ μΌλ§λ μκ³ λ¦¬μ¦μ΄ μμ‘΄νλ λ°μ΄ν°κ΅¬μ‘° (Abstract Data Type)μ λ± λ§λ μ§ (μ λ§ κ·Έλ λ€), ν¬μΈν° μλ JAVAλ‘ μ΄λ»κ² μκ³ λ¦¬μ¦μ΄ μ ꡬνλλμ§ μμ λ³΄λ € νλ€. νλ€ λ³΄λ©΄ κΎκ° λ§μ΄ λ ν°μΈλ°. μ¬λ₯μ΄ λΆμ‘±νλ μκ°λ κ±Έλ¦¬κ² κ³ , κ·Έλ μ§λ§ λ ννΈ λ΄κ° μ΄ν΄ ν μ λλ©΄ μ΅μν The Art of Programming μ κ·Έλ₯ 보λ κ² λ³΄λ€λ λ«μ§ μμκΉ?
μ€λλ§μ 머리λ μ¨ λ³΄κ³ , μλ°λ νλ ¨ν κ² κ°μ μ€λ λ€.
Knuthκ΅μλμ κ°μλ₯Ό λ³΄κ³ μΆμΌλ©΄ μ¬κΈ°λ‘. μ¬λ―Έμλ κ²μ΄ μ¬κΈ°μ λ§μ΅λλ€. μμ΄μ μκ³ λ¦¬μ¦μ μκ²λλ©΄ μλ‘μ΄ μΈμμ΄ λ³΄μΌ κ²μ
λλ€.
Hang on.