Day 12(21.09.16) - Gomserker/Java-101 GitHub Wiki
β» λ€μ΄κ°κΈ°μ μμ
λ³Έ μ 리κΈμ μμ
μ μ§νλλ‘ μ 리νκ³ μκΈ°μ λ΄μ©μ λ°λΌ μμκ° λ€μ£½λ°μ£½μΌ μ μμ΅λλ€.
15. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP)μ νΉμ§
(1) μΊ‘μν(Encapsulation)
νλ, λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μ€μ ꡬν λ΄μ©μ κ°μΆλ κ²μ λ§νλ€. μΈλΆ κ°μ²΄λ κ°μ²΄ λ΄λΆμ ꡬ쑰λ₯Ό μ μ μμΌλ©° κ°μ²΄κ° κ²μΌλ‘ λλ¬λμ μ 곡νλ νλμ λ©μλλ§ μ 곡ν μ μλ€. μ½κ² λ§νλ©΄ μΈλΆ κ°μ²΄μμλ μΊ‘μνλ κ°μ²΄μ νλμ μ κ·Όν μ μλ¨ μκΈ°λ€.
μ΄λ κ² μΊ‘μνλ₯Ό ν΅ν΄ κ°μ²΄ μ 보λ₯Ό 보νΈνλ μ΄μ λ μΈλΆμ μλͺ»λ μ¬μ©μΌλ‘ μΈν΄ κ°μ²΄κ° μμλμ§ μλλ‘ νκΈ° μν¨μ΄λ€. μλ₯Ό λ€μ΄, μλμ°¨μ μ€μ λΆνμ΄ κ²μΌλ‘ λλ¬λ 좩격 λ±μ μΈλΆμ μμΈμ μν΄ λ§κ°μ§μ§ μλλ‘ μ°¨μ²΄ λ΄λΆμ μ¨κΈ°λ κ²μ΄λ λ§μ°¬κ°μ§λ€. μ΄λ¬ν μΊ‘μνλ μΈλΆμμ μ κ·Όμ νλ½ν κ²μΈκ°λ₯Ό κ²°μ νκΈ° μν΄ **μ κ·Ό μ νμ(Access Modifier)**λ₯Ό μ¬μ©νλ€. μ κ·Ό μ νμμ μ’
λ₯μλ private, default, protected, publicμ΄ μλλ° μ΄λ€μ λν λ΄μ©μ μλμ μμ±ν μμ μ΄λ€.
(2) μμ(Inheritance)
μμμ΄λ μΌλ°μ μΌλ‘ λΆλͺ¨κ° κ°μ§κ³ μλ κ²μ μμμκ² λ¬Όλ €μ£Όλ κ²μ λ§νλ€. κ°μ²΄ μ§μ νλ‘κ·Έλλ°μμλ λΆλͺ¨ μν μ νλ μμ κ°μ²΄μ μμ μν μ νμ κ°μ²΄κ° μλλ°, μμ κ°μ²΄λ μμ μ΄ κ°μ§κ³ μλ νλμ λ©μλλ₯Ό νμ κ°μ²΄μκ² λ¬Όλ €μ€ μ μλ€. μ΄λ¬ν μμμ μμ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ¬ νμ κ°μ²΄λ₯Ό μ½κ³ λΉ λ₯΄κ² μ€κ³ν μ μλλ‘ λμμ£Όλ©°, μ΄λ―Έ κ°λ°λ κ°μ²΄λ₯Ό μ¬μ©νλ κ²μ΄λ―λ‘ λ°λ³΅λ μ½λμ μ€λ³΅μ μ€μ¬μ€λ€. λν, μμ κ°μ²΄μ μμ ν¨μΌλ‘μ νμ κ°μ²΄λ₯Ό μμ νλ ν¨κ³Όκ° μμΌλ―λ‘ μ μ§ λ³΄μ μκ°μ μ΅μνμμΌ μ£ΌκΈ°λ νλ€.
(3) λ€νμ±(Polymorphism)
κ°μ νμ μ΄μ§λ§ μ€ν κ²°κ³Όκ° λ€μν κ°μ²΄λ₯Ό μ΄μ©ν μ μλ μ±μ§μ λ§νλ€. νλ‘κ·Έλλ° μΈ‘λ©΄μμλ νλμ νμ μ μ¬λ¬ κ°μ²΄λ₯Ό λμ νμ¬ λ€μν κΈ°λ₯μ μ΄μ©ν μ μλλ‘ ν΄μ£Όλ κ²μ΄λ€. μλ°μμ μ΄λ₯Ό μν΄ λΆλͺ¨ ν΄λμ€ λλ μΈν°νμ΄μ€μ νμ λ³νμ νμ©νκ³ μλ€. λΆλͺ¨ νμ μλ λͺ¨λ μμ κ°μ²΄κ° λμ λ μ μμΌλ©°, μΈν°νμ΄μ€ νμ μλ λͺ¨λ ꡬν κ°μ²΄κ° λμ λ μ μλ€. μλ₯Ό λ€μ΄, μλμ°¨ νλκ° μμ λ, νμ΄μ΄λΌλ©΄ K νμ΄μ΄λ , H νμ΄μ΄λ μ λΆ μ¬μ©ν μ μμΌλ μ±λ₯μ΄ λ€λ₯΄κ² λμ€λ κ²κ³Ό λ§μ°¬κ°μ§μ΄λ€.
16. μμ±μ(Constructor)
μμ±μλ new μ°μ°μμ κ°μ΄ μ¬μ©λλ©° ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό μμ±ν λ νΈμΆλμ΄ κ°μ²΄μ μ΄κΈ°νλ₯Ό λ΄λΉνλ€. μ¬κΈ°μ κ°μ²΄μ μ΄κΈ°νλ νλλ₯Ό μ΄κΈ°ννκ±°λ, λ©μλλ₯Ό νΈμΆν΄μ κ°μ²΄λ₯Ό μ¬μ©ν μ€λΉλ₯Ό νλ κ²μ λ§νλ€. μ΄ μμ±μλ₯Ό μ€νμν€μ§ μκ³ μλ κ°μ²΄λ₯Ό λ§λ€ μ μμΌλ©°, new μ°μ°μλ‘ κ°μ²΄κ° μμ±λλ©΄ heap μμμ κ°μ²΄κ° μμ±λκ³ , stack μμμ κ°μ²΄μ μ£Όμκ° λ¦¬ν΄λλ€.γγ
(1) κΈ°λ³Έ μμ±μ
λͺ¨λ ν΄λμ€μλ νλ μ΄μμ μμ±μκ° λ°λμ μ‘΄μ¬νλ€.
ν΄λμ€κ° public classλ‘ μ μΈλλ©΄ κΈ°λ³Έ μμ±μμλ publicμ΄ λΆμ§λ§, public μμ΄ classλ‘λ§ μ μΈλ ν΄λμ€μλ κΈ°λ³Έ μμ±μμλ publicμ΄ λΆμ§ μλλ€. publicκ³Ό default μ λν μκΈ°λ λ€μ ννΈμμ νμΈνκΈ°λ‘ νλ€.
(2) μμ±μ μ μΈ
κΈ°λ³Έ μμ±μ λμ μμ±μλ₯Ό λͺ μμ μΌλ‘ μ μΈνλ €λ©΄ λ€μκ³Ό κ°μ ννλ‘ μμ±νλ€.
Class (Parameter 1, Parameter 2, ...) {
//κ°μ²΄μ μ΄κΈ°ν μ½λ
}
μμ±μλ λ©μλμ λΉμ·ν ννλ₯Ό νκ³ μμΌλ λ¦¬ν΄ νμ μ΄ μκ³ , ν΄λμ€ μ΄λ¦κ³Ό λμΌνλ€. μμ±μ λΈλ‘ λ΄λΆμλ κ°μ²΄ μ΄κΈ°ν μ½λκ° μμ±λλλ°, μΌλ°μ μΌλ‘ νλμ μ΄κΈ°κ°μ΄λ λ©μλ νΈμΆ λ±μ κ°μ²΄ μ¬μ© μ μ νμν μ€λΉλ₯Ό νλ€. λ€μ μμλ₯Ό 보μ.
Car myCar = new Car("Grandeur", "black", 300);
μμμ Car μμ±μλ₯Ό νΈμΆν λ μΈ κ°μ κ°μ μ 곡νλ€κ³ νλ€λ©΄, λ€μκ³Ό κ°μ΄ μμ±μλ₯Ό μ μΈν΄μΌ νλ€.
public class Car {
//μμ±μ
Car(String model, String color, int maxSpeed)
}
ν΄λμ€μ μμ±μκ° λͺ μμ μΌλ‘ μ μΈλμ΄ μμ λ λ°λμ μ μΈλ μμ±μλ₯Ό νΈμΆν΄μ κ°μ²΄λ₯Ό μμ±ν΄μΌλ§νλ€.
//Car.java
public class Car {
Car(String color, int cc) {
}
}
//CarExample.java
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car("black", 3000);
//Car myCar = new Car(); // μμμ μμ±μκ° λͺ
μμ μΌλ‘ μ μΈλμκΈ°μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆν μ μλ€.
κ΄λ‘μ μΌλ‘λ μμ±μμ λ§€κ°λ³μλ‘ νλμ λμΌν μ΄λ¦μ κ°λ λ§€κ°λ³μλ₯Ό μ¬μ©νλλ°, μ΄ κ²½μ° νλμ λ§€κ° λ³μμ μ΄λ¦μ΄ λμΌνκΈ° λλ¬Έμ μμ±μ λ΄λΆμμ νλμ μ κ·Όν μ μλ€. λμΌν μ΄λ¦μ λ§€κ° λ³μκ° μ¬μ© μ°μ μμκ° λκΈ° λλ¬ΈμΈλ°, μ΄λμ ν΄κ²° λ°©λ²μ νλμ ν΄λΉνλ λ³μ μμ "this."μ λΆμ΄λ©΄ λλ€. μ΄λ κ°μ²΄κ° μκΈ° μμ μ thisλΌκ³ λΆλ₯΄λ κ²μΌλ‘ μ°Έμ‘° λ³μλ‘ νλλ₯Ό μ¬μ©νλ κ²κ³Ό λμΌνλ€.
17. μ κ·Ό μ νμ(Access Modifier)
main() λ©μλλ₯Ό κ°μ§μ§ μλ λλΆλΆμ ν΄λμ€λ μΈλΆμμ μ΄μ©ν λͺ©μ μΌλ‘ μ€κ³λ λΌμ΄λΈλ¬λ¦¬ ν΄λμ€μ΄λ€. μ΄ λΌμ΄λΈλ¬λ¦¬ ν΄λμ€λ₯Ό μ€κ³ν λμ μΈλΆμμ μ κ·Όν μ μλ λ©€λ²μ μ κ·Όν μ μλ λ©€λ²λ‘ ꡬλΆν΄μ μ€κ³νλ κ²μ΄ λ°λμ§νλ€. μ΄λ μ¬μ©κ°λ₯ν κ²μ΄ λ°λ‘ μ κ·Ό μ νμ(Access Modifier)μ΄λ€.
μ κ·Ό μ νμμ μ’ λ₯
(1) public
μ μ© λμ : ν΄λμ€, νλ, μμ±μ, λ©μλ
μ κ·Όν μ μλ ν΄λμ€ : μμ
(2) protected
μ μ© λμ : νλ, μμ±μ, λ©μλ
μ κ·Όν μ μλ ν΄λμ€ : μμ ν΄λμ€κ° μλ λ€λ₯Έ ν¨ν€μ§μ μμλ ν΄λμ€
(3) default
μ μ© λμ : ν΄λμ€, νλ, μμ±μ, λ©μλ
μ κ·Όν μ μλ ν΄λμ€ : νλ, μμ±μ, λ©μλ
(4) private
μ μ© λμ : νλ, μμ±μ, λ©μλ
μ κ·Όν μ μλ ν΄λμ€ : λͺ¨λ μΈλΆ ν΄λμ€
18. Getterμ Setter λ©μλ
μμ κ°μ μ κ·Ό μ νμμ μ©λλ κ°μ²΄ μΈλΆμμ κ°μ²΄ λ°μ΄ν°μ μ§μ μ μΌλ‘ μ κ·Όνλ κ²μ λ§κΈ° μν¨μ΄λ€. κ·Έ μ΄μ λ κ°μ²΄μ λ°μ΄ν°λ₯Ό μΈλΆμμ λ§μλλ‘ μ½κ³ λ³κ²½ν κ²½μ° κ°μ²΄μ 무결μ±μ΄ κΉ¨μ§ μ μκΈ° λλ¬Έμ΄λ€. μλ₯Ό λ€μ΄ μλμ°¨μ μλ ₯μ μ ν λ μΈλΆμμ -100μ΄λ 4250 κ°μ λΉμ μμ μΈ λ°μ΄ν°λ₯Ό μ λ ₯ν κ²½μ° λ¬Έμ κ° λ°μν μ μκΈ° λλ¬Έμ΄λ€. μ΄λ¬ν λ¬Έμ μ μ μ¬μ μ λ°©μ§νκ³ ν΄κ²°νκΈ° μν΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμλ λ©μλλ₯Ό ν΅ν΄μ λ°μ΄ν°λ₯Ό λ³κ²½νλ λ°©λ²μ μ νΈνλ€. μ΄λ¬ν μν μ νλ λ©μλλ₯Ό SetterλΌκ³ νλλ°, μλμ°¨μ μλλ₯Ό setSpeed() λ©μλλ‘ λ³κ²½ν κ²½μ° μ λ ₯λλ κ°μ 쑰건μ λΆμ¬ν μ μμ΄ μ¬μ μ κ²μ¦νλ κ³Όμ μ κ±°μΉ μκ° μλ€.
μΈλΆμμ κ°μ²΄μ λ°μ΄ν°λ₯Ό μ½μ κ²½μ°μλ λ³λμ λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’μλ°, μΈλΆμμ κ°μ²΄μ νλ κ°μ μ¬μ©νκΈ°μ λΆμ μ ν κ²½μ°κ° μκΈ° λλ¬Έμ΄λ€. μλ₯Ό λ€λ©΄ ν¬λ‘λ―Έν°λ λ§μΌκ³Ό κ°μ΄ λ¨μκ° λ€λ₯Έ κ²½μ°κ° μλλ°, μ΄λ΄λ Getter λ©μλλ₯Ό μ¬μ©νλ©΄ νλκ°μ μμ νκ² λ³κ²½ λ° μ¬μ©ν μ μλ€.
Getter Setter λ©μλ μ°μ΅
result
color is Yellow
speed is 120