[Java] 04. ν΄λμ€μ κ°μ²΄
- -
π. ν΄λμ€μ κ°μ²΄
νλ‘κ·Έλλ°μ νλ€ λ³΄λ©΄ κ°μ²΄ μ§ν₯ λ°©μκ³Ό μ μ°¨ μ§ν₯ λ°©μ λ± λ€μν νλ‘κ·Έλλ° κ°λ° λ°©μμ λν΄ λ§μ΄ λ€μ΄λ³Ό μ μμ΅λλ€. λν λ°λ³΅λλ λ³μλ€κ³Ό ν¨μλ€μ μμ νκ³ νΈλ¦¬νκ² κ΄λ¦¬νλ λ°©λ²μ μ°Ύμλ³΄κ² λ©λλ€.
μ€λμ κ°μ²΄ μ§ν₯ μΈμ΄μ μ μ°¨ μ§ν₯ μΈμ΄μ μ°¨μ΄μ κ³Ό κ°μ²΄ μ§ν₯ μΈμ΄μ νΉμ§μ λ°°μλ³΄κ² μ΅λλ€. κ°μ²΄ μ§ν₯ μΈμ΄μ λνμ μμμΈ μλ°μ ν΄λμ€μ κ°μ²΄μ λν΄ μμλ³΄κ³ , κ°μ²΄ μ§ν₯ μΈμ΄λ‘μ¨ μλ°μ νΉμ§μ μμλ³΄κ² μ΅λλ€. λ§μ§λ§μΌλ‘ μλ° ν΄λμ€μ κΈ°λ³Έ ꡬ쑰λ₯Ό μμλ΄ λλ€.
π I. κ°μ²΄ μ§ν₯ μΈμ΄μ νΉμ§
π 1. μ μ°¨ μ§ν₯ μΈμ΄ vs κ°μ²΄ μ§ν₯ μΈμ΄
(1) μ μ°¨ μ§ν₯ μΈμ΄ (Procedural Programming)
컀νΌλ₯Ό λ΄λ¦°λ€κ³ κ°μ μ ν΄λ΄ μλ€. μ΄ κ³Όμ μ μμ νλ©΄
λ±μΌλ‘ μμ λ μ μμ κ²μ λλ€.
νλ‘κ·Έλλ° μΈμ΄μμ μ΄λ κ² λ¬Έμ ν΄κ²° λ°©λ²μ κ° λ¨κ³λ³λ‘ λλλ κ²μ μ μ°¨ μ§ν₯ νλ‘κ·Έλλ° (Procedural Programming)λΌκ³ ν©λλ€. CμΈμ΄μ κ°μ μ μ°¨ μ§ν₯ μΈμ΄λ λ°μ΄ν°λ₯Ό λ¨Όμ κΈ°μ νκ³ λ°μ΄ν°λ₯Ό μ¬μ©νκ³ μ‘°μνλ ν¨μλ₯Ό λ§λλλ€. μ΄λ κ² μ μ°¨ μ§ν₯ μΈμ΄λ ν¨μ κΈ°λ°μ μ¬μ©ν΄ κ°μ’ ν¨μλ‘ λ°μ΄ν°λ₯Ό μ‘°μνλ©° λ¬Έμ λ₯Ό ν΄κ²°ν΄ λκ° μ μμ΅λλ€. κ°μ₯ ν° λ¬Έμ λ₯Ό μμ λ¬Έμ λ€λ‘ λλμ΄ ν΄κ²°νλ Top-Down λ°©μμ μ΄μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
(2) μ μ°¨ μ§ν₯ μΈμ΄μ λ¬Έμ μ
νλμ¨μ΄μ μννΈμ¨μ΄κ° λΉ λ₯΄κ² λ³ννκ³ λ°μ νλ©΄μ μ μ°¨ μ§ν₯ μΈμ΄μ λ¨μ μ΄ λλ¬λκ² λ©λλ€.
- μ μ§ λ³΄μμ μ΄λ €μ
λͺ¨λ ꡬμ±μμκ° μ κΈ°μ μΌλ‘ μ°κ²°λμ΄ νλμ μμκ° κ³ μ₯ λ¬μ λ, μμ€ν μ 체μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. - μ격νκ² μμκ° μ ν΄μ Έ λΉν¨μ¨μ
μ€ν μμκ° μ ν΄μ Έ μμ΄ μ½λμ μμκ° λ³κ²½λ λ κ²°κ³Όκ° λ¬λΌμ§ μ μμ΅λλ€.
(3) κ°μ²΄ μ§ν₯ μΈμ΄(Object-Oriented Language)
λ€μ 컀νΌλ₯Ό λ΄λ¦°λ€κ³ κ°μ μ ν©μλ€. μ΄λ²μλ μ κ³Ό λ€λ₯΄κ² ꡬ체μ μΈ μ¬λ¬Ό, μ¬λ, κ°λ λ±μΌλ‘ κ³Όμ μ λΆλ¦¬ν΄λ΄ μλ€.
λ±κ³Ό κ°μ΄ κΈ°μ λ μ μμ κ²μ λλ€. μ μ μΌκΈ°λ μ»€νΌ κΈ°κ³μ μ μμ μΌ€ κ²μ΄κ³ , μ»€νΌ μλ μΊ‘μμ μ»€νΌ κΈ°κ³μ μ»€νΌ μλ μΊ‘μμ λ£μ κ²μ λλ€.
νλ‘κ·Έλλ° μΈμ΄μμλ μ 보λ₯Ό λ΄κ³ μλ λ°μ΄ν°μ μ΄λ₯Ό μ‘°μνλ ν¨μλ₯Ό νλλ‘ λ¬Άμ΄ κ°μ²΄(Object)λ₯Ό λ§λ€ μ μμ΅λλ€. κ°μ²΄λ€ κ°μ μνΈμμ©μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νλ μΈμ΄λ₯Ό κ°μ²΄ μ§ν₯ μΈμ΄ (Object-Oriented Language)λΌκ³ ν©λλ€. μ€μ κ°μ²΄λ μ€μ€λ‘ κΈ°λ₯μ ν μ μμ΄ νλ‘κ·Έλλ¨Έλ μλ κ³Όμ μ μ νμ μμ΄ μ€μ¬λ§ νλ©΄ λ©λλ€. κ°μ²΄ μ§ν₯ μΈμ΄λ κ°μ₯ μμ λ¬Έμ λ€λΆν° νλμ© ν΄κ²°ν΄κ°λ©° ν° λ¬Έμ λ₯Ό ν΄κ²°νλ Bottom-Up λ°©μμΌλ‘ νλ‘κ·Έλλ°ν©λλ€.
π 2. κ°μ²΄ μ§ν₯ μΈμ΄(Object-Oriented Language)μ νΉμ§
κ°μ²΄μ§ν₯μΈμ΄λ λ€μμ νΉμ§λ€μ κ°μ§λλ€.
- μΆμν (Abstraction) : λ¬Έμ ν΄κ²°μ μν΄ κ΄μ¬ μλ λΆλΆμλ§ μ§μ€νμ¬ ν΄κ²°
- μΊ‘μν (Encapsulation) : μ°κ΄λ λ°μ΄ν°μ μκ³ λ¦¬μ¦μ ν λ©μ΄λ¦¬λ‘ λ¬Άμ
- μ 보μλ (Information Hiding) : λ¬ΆμΈ λͺ¨λ κ² μ€ μ€μν μΈν°νμ΄μ€λ§ λλ¬λ΄κ³ λ΄λΆ ꡬνμ μ¨κΉ
- μμμ± (Inheritance) : ν κ°μ²΄μ μ±μ§μ λ€λ₯Έ κ°μ²΄κ° λ¬Όλ €λ°μ
- λ€νμ± (Polymorphism) : ν ννλ‘ λ³΄μ΄λ λ€λ₯Έ μν λ€μ μνν μ μμ
π 3. κ°μ²΄ μ§ν₯ μΈμ΄μ μ₯μ
- μ¬μ©λ μ½λμ λ°μ΄ν°κ° λμ³μ Έ μμ΄ λͺ¨λν λ μ½λμ μ¬μ¬μ©μ΄ μ©μ΄
- μ μμ±λ μ½λλ₯Ό μ¬μ¬μ©νκΈ°μ μ λ’°μ± μλ μννΈμ¨μ΄λ₯Ό μ½κ² μμ±
- λλ²κΉ μ΄ μ¬μ
- μ κ·Έλ μ΄λ λ±μ μ μ§ λ³΄μκ° μ©μ΄
π II. ν΄λμ€μ κ°μ²΄μ κΈ°μ΄ κ°λ
π 1. κ°μ²΄(Object)
- νμ€ μΈκ³μ μ¬λ¬Ό λλ λμ, κ΄λ μ λͺ¨λ°©ν νλ‘κ·Έλ¨ μμ κ°μ²΄
- μΌ μ²λ¦¬λ₯Ό μν κ°μ²΄κ° κ°λ "λ°μ΄ν°"μ κ°μ²΄κ° μ 곡νλ "κΈ°λ₯"μΌλ‘ νν
π 2. OOP νΉμ§ 1: μΆμν(Abstraction)
- μΆμν : κ°μ²΄λ₯Ό λ§λ€ λλ κ°μ²΄μκ² κ΄μ¬ μλ λΆλΆμλ§ κ΄μ¬μ κ°μ ΈμΌ ν¨
- κ°μ²΄λ€μ 곡ν΅λ μμ±κ³Ό νμλ₯Ό μΆμΆ
- κ°μ²΄μ μμ±κ³Ό νμ μ€μμ κ΄μ¬ λμλ§ μΆμΆν΄ νννκ³ μλ λΆλΆμ λλ¬λ΄μ§ μμ
π 3. κ°μ²΄ μ§ν₯(Object-Oriented) νλ‘κ·Έλλ°
- νμ€μ μ‘΄μ¬νλ μ¬λ¬Όκ³Ό μ¬λ¬Όμ μν, κ·Έ νλμ μ€μ²΄νμν€λ νλ‘κ·Έλλ°
- κ°μ²΄ = λ°μ΄ν°(μμ±) + μκ³ λ¦¬μ¦(λ©μλ)
- νλμ νλ‘κ·Έλ¨μ μνΈ μ°κ²°λ κ°μ²΄ μ§ν©μ μνΈμμ©μ ν΅ν λ¬Έμ ν΄κ²°μ μΆκ΅¬
- λ¬Έμ μ κ΄λ ¨λ κ°μ²΄λ₯Ό λ§λ€κ³ κ°μ²΄ κ°μ λ©μμ§ κ΅νμΌλ‘ λ¬Έμ ν΄κ²°
π 4. ν΄λμ€μ κ°μ²΄μ κ΄κ³
λ³ λͺ¨μ μΏ ν€λ₯Ό λ§λ λ€κ³ μκ°ν΄λ΄ μλ€. λ§μ μΏ ν€λ₯Ό ꡬμμΌ ν λ μΏ ν€ νλμ© λͺ¨μμ λΉλ κ²μ λΉν¨μ¨μ μ΄κ³ νλ€ μΌ
μ΄ λ κ²μ λλ€. λ³ λͺ¨μ νμ λ§λ€κ³ κ·Έ νμ λ§μΆμ΄ μΏ ν€λ₯Ό μ°μ΄λΈλ€λ©΄ ν¨μ¨μ μΌλ‘ μμ ν μ μμ κ²μ λλ€.
νλ‘κ·Έλ¨ μΈμ΄μμλ λκ°μ΅λλ€. λ§λ€κ³ μ νλ νμ΄ "ν΄λμ€", κ·Έ νλ‘ λ§λ κ²μ΄ "κ°μ²΄"μ λλ€.
λν μΏ ν€μ λͺ¨μμ κ°μ§λ§ μ΄μ½ μΏ ν€, λ²ν° μΏ ν€ λ± λ€μν μμ± κ°μ κ°μ§ μ μμ κ²μ λλ€.
- ν΄λμ€(Class) : κ°μ²΄λ₯Ό λ§λ€μ΄ λ΄κΈ° μν μ€κ³λ νΉμ ν
- κ°μ²΄(Object) : ν΄λμ€ λͺ¨μ κ·Έλλ‘ μμ±λ μ€μ²΄, κ°μ²΄λ₯Ό ν΄λμ€μ μΈμ€ν΄μ€(instance)λΌκ³ λ λΆλ¦
- ν΄λμ€λ νλμ§λ§ κ°μ²΄λ€μ μ μμ΄ μμ°λ μ μμ
- κ°μ²΄λ€μ ν΄λμ€μ λͺ¨μλλ‘ λμΌν μμ±μ κ°μ§μ§λ§, κ³ μ ν κ°μΌλ‘ ꡬλΆλ¨
π 5. κ°μ²΄μ ꡬμ±μμ
(1) μμ± (attributes)
- κ°μ²΄μ μν μ λ³΄μΈ νΉμ±μ νν
- μ μ μΈ μ±μ§
(2) νμ (behaviors)
- κ°μ²΄ λ΄λΆμμ μ²λ¦¬ν μΌμ΄λ κ°μ²΄λ€ κ°μ μν₯μ μ£Όκ³ λ°λ μΌ
- λμ μΈ μΌμ μ²λ¦¬
π 6. ν΄λμ€(class)
- κ°μ μ’ λ₯μ κ°μ²΄μ 곡ν΅λ 'λ°μ΄ν° ꡬ쑰'μ 'κΈ°λ₯'μ λ°λ‘ λ½κ³ μΆμμ μΌλ‘ νννμ¬ ν΄λμ€λ₯Ό μ μ
- ν΄λμ€ μ μλ μ§μ κ°μ²΄κ° λ§λ€μ΄μ§κ±°λ μ€νλλ κ²μ΄ μλ, νμ μ μν λΏ
- λ©€λ² νλ(μμ±) μ μμ λ©μλ(νμ) μ μ λ λ²μλ‘ λλ¨
π 7. OOP νΉμ§ 2: μΊ‘μν(Encapsulation)
- λ°μ΄ν°μ κ·Έμ κ΄λ ¨λ μ°μ°(ν¨μ)λ€μ κ°μ²΄(object)λ‘ λ¬Άμ
- μ°κ΄λ μ²λ¦¬λ₯Ό νλ νμμ μν λ°μ΄ν°λ₯Ό λ¬Άμ΄ λ³΅μ‘ν κ³Όμ μ μ¨κΉ
- κΌ νμν μΈν°νμ΄μ€λ§ μΈλΆμ λνλ΄ μ½κ² μ¬μ©νλλ‘ ν¨
π III. μλ° ν΄λμ€μ κΈ°λ³Έ ꡬ쑰 λ° μ¬μ©
π 1. κΈ°λ³Έ ν΄λμ€μ ꡬ쑰
- λ³μμ μμλ‘ μν μ 보λ₯Ό μ μ₯νλ λ©€λ² νλ, νμ μ 보λ₯Ό κΈ°μ νλ λ©μλλ‘ κ΅¬μ±
- ν΄λμ€ λ©€λ² λ° λ©μλ μ¬μ©μ μ΄λ μ λκΉμ§ νμ©ν μ§λ₯Ό μ νλ μ κ·Ό μ νμ
- ν΄λμ€μ νΉμ§μ μ§μ νλ ν΄λμ€ μ’ λ₯
- ν΄λμ€λ μΈλ―Έμ½λ‘ (;)μΌλ‘ λλμ§ μκ³ , ν¨μμ ꡬνμ λͺΈμ²΄μμ κΈ°μ
π 2. λ©€λ² νλ
[μ κ·Ό μ ν] [static] <μλ£ν> <μλ³μ>;
- λ©€λ² νλλ instance / static λ κ°μ§λ‘ λΆλ¦¬λ¨
- instance λ©€λ² νλλ κ³ μ ν λ©λͺ¨λ¦¬ μ μ₯ 곡κ°μ΄ ν λΉλ¨
- static λ©€λ² νλλ νλ‘κ·Έλ¨μ΄ μμλλ©΄ λ©λͺ¨λ¦¬λ₯Ό ν λΉ λ°μ
* μ κ·Ό μ νμ μ΄ λ©€λ²λ₯Ό μ΄λ λ²μμμ μ κ·Όν μ μλμ§λ₯Ό μ§μ ν©λλ€. κ° λ³μλ³λ‘ μ§μ ν μ μμΌλ©° λνμ μΌλ‘ public ν€μλκ° μμ΅λλ€. static λ©€λ² λ³μλ₯Ό μ μΈνλ©΄ λͺ¨λ κ°μ²΄κ° λ©€λ²λ₯Ό 곡μ ν©λλ€
π 3. λ©μλ
- κ°μ²΄κ° μνλ μ μλ λμμ μ μ
- μ€μ€λ‘ μν κ°μ μ μ₯νκ³ κ·Έ μν κ°μΌλ‘ νμλ₯Ό μννλ€λ μ μμ λ¨μ λ³μλ€κ³Όλ λ€λ₯Έ νΉμ§
- λ©€λ² νλλ₯Ό μ‘°μνλ μμ ν λ°©λ²μ μ 곡 ex) getter/setter
- ν΄λμ€ μ μ μμ λ©μλ ꡬνλΆλ₯Ό λͺ¨λ κΈ°μ
π 4. λ©μλμ μμ±
- ν΄λμ€ μ μ μμ κ°μ²΄μ νμλ₯Ό κΈ°μ
- μ€μ λ₯Ό μννλ λ¬Έμ₯λ€μ { } μμ λμ΄
- μΈμλ€μ μμλλ‘ λ§€κ°λ³μλ₯Ό ν΅ν΄ μ λ¬ λ°μ
- λ°ν κ°μ returnμ ν΅ν΄ λ°κ³ , λ°ν κ°μ΄ μλλ©΄ void λ°μ μμ
π 5. λ©μλμ νΈμΆ
[λ³μ = ] κ°μ²΄λͺ . λ©μλλͺ (μΈμ1, μΈμ2, ... , μΈμn)
- κ°μ²΄μ μ§μ λ νμλ₯Ό μννλλ‘ νλ κ²
- ν΄λμ€λ₯Ό μ μνλ κ²μ λ©μλλ₯Ό μλ μ€ννλ κ²μ΄ μλ νΈμΆλμ΄μΌ μ€νλ μ μμ
- λ©μλ νΈμΆ μ νΈμΆ μΈ‘μ μΈμλ₯Ό λκ²¨μ€ μ μκ³ , νΈμΆμ κ²°κ³Όλ₯Ό λ°νν μλ μμ
π 6. λμ λ©λͺ¨λ¦¬ ν λΉ
- λμ ν λΉλλ κ°μ²΄λ μ€μ λ‘ λ§μ΄ μ¬μ©λκ³ νμμ λ°λΌ μ§μμ μΌλ‘ μ¬μ©λλλ‘ λ§λ€ μ μμ
- JAVA νλ‘κ·Έλλ¨Έλ μ΄λ¬ν κ³ λ―Όλ€μ λ°νμΌλ‘ κ°μ²΄λ λ°λμ λμ ν λΉμ ν΅ν΄ λ§λ€μ΄μ§λλ‘ ν¨
- νλ‘κ·Έλλ¨Έκ° μνλ μκ°μ μνλ ν¬κΈ°μ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°λ λ°©λ²
- new μ°μ°μλ₯Ό μ¬μ©νμ¬ λμ ν λΉλ ν¬κΈ°λ₯Ό μλμΌλ‘ κ³μ°ν΄μ€
- μ°Έμ‘° μλ£ν λ³μμ μ€μ κ°μ λν μ μ₯곡κ°μ ν λΉλ°κΈ° μν΄ νμ
λμ ν λΉλ°μ λ©λͺ¨λ¦¬κ° λ μ΄μ μ°Έμ‘°λμ§ μλλ€λ©΄ JVMμ μνμ¬ μλμΌλ‘ νμλ©λλ€. μ΄λ κ² μ°Έμ‘°λμ§ μλ λμ ν λΉλ λ©λͺ¨λ¦¬λ₯Ό μλ ν λΉ ν΄μ νλ κ²μ κ°λΉμ§ 컬λ μ (Garbage Collection)μ΄λΌκ³ ν©λλ€. JVMμ κ°λΉμ§ 컬λ ν°μ μν΄ λ©λͺ¨λ¦¬ λΆμ‘±μ λ°©μ§ν μ μμ΅λλ€.
π 7. κ°μ²΄μ μμ±κ³Ό λ©€λ² μ κ·Ό
1. μ°Έμ‘° λ³μμ μ μΈ
Circle c1;
ν΄λμ€ νμ μ λ³μλ₯Ό μ μΈν©λλ€. μ΄ λ³μλ μ°Έμ‘° μλ£νμΌλ‘ κ° κ°μ²΄μ idκ°λ§μ μ μ₯ν©λλ€.
2. μ μΈλ λ³μμ κ°μ²΄λ₯Ό μμ±
c1 = new Circle();
λμ ν λΉ μ°μ°μ newλ₯Ό μ΄μ©ν΄ λ³μμ κ°μ²΄λ₯Ό μμ±ν©λλ€. κ°μ²΄ μμ± μ Circle();κ³Ό κ°μ΄ ( )λ₯Ό λ°λμ μμ±ν΄μΌ ν©λλ€. μ΄λ μμ±μμ κ΄λ ¨μ΄ μμ΅λλ€.
3. λ©€λ² μ κ·Ό
c1.radius = 1;
double area = c1.getArea();
c1μ μ°Έμ‘° λ³μμ λλ€. κ·Έλ¬λ μλ°μμ κ°μ²΄μ μ κ·Όνλ λ°©λ²μ μ°Έμ‘° λ³μλ₯Ό μ΄μ©ν΄ λμ ν λΉλ°μ λΆλΆμΌλ‘ μ κ·Όνλ λ°©λ²λ°μ μκΈ° λλ¬Έμ c1μ κ°μ²΄λΌκ³ λ ν©λλ€. λ©€λ² μ κ·Όμ .μ°μ°μλ‘λ₯Ό μ¬μ©ν©λλ€.
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] 06. μΊ‘μνμ μ 보 μλ (1) | 2022.09.30 |
---|---|
[Java] 05. ν΄λμ€μ λ©€λ² (0) | 2022.09.29 |
[JAVA] # ν¬μΈν° VS μ°Έμ‘° μλ£ν (1) | 2022.09.23 |
[JAVA] 03. μλ° νλ‘κ·Έλ¨μ μλ£ν (1) | 2022.09.22 |
[JAVA] 02. μλ° νλ‘κ·Έλ¨μ κΈ°λ³Έ ꡬ쑰 (1) | 2022.09.22 |
μμ€ν κ³΅κ° κ°μ¬ν©λλ€