π‘ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP) μ΄λ?
Object Oriented Programming, μ€μ¬μ OOPλΌκ³ νλ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ
νλ‘κ·Έλ¨μ λ¨μν λ°μ΄ν°μ μ²λ¦¬ λ°©λ²μΌλ‘ λλλ κ²μ΄ μλ,
'κ°μ²΄'λ₯Ό κΈ°μ€μΌλ‘ λλμ΄ μ΄λ€μ μνΈμμ©μΌλ‘ μμ νλ λ°©μμ λ§ν©λλ€.
μ€μ μΈκ³λ₯Ό λͺ¨λΈλ§ν΄μ λ°μ΄ν°μ μ μ°¨λ₯Ό νλμ κ°μ²΄λ‘ λ¬Άμ΄μ κ΄λ¦¬ν©λλ€.
μ΄λ κ°μ²΄λΆν° 무μμΈμ§ μ κ°μ΄ μ μ¬ μ μμ΅λλ€. μ°μ μλ―ΈλΆν° μ΄ν΄λ΄ μλ€.
π‘ κ°μ²΄(Object)λ?
μ½κ² λ§νλ©΄ λμμ λνλ΄λ λ¨μ΄μ λλ€. λͺ¨λ 물체μ μ¬λλ κ°μ²΄κ° λ μ μκ³ λ μμ λν κ°μ²΄λΌκ³ λ³Ό μ μμ΅λλ€.
λͺ¨λ κ°μ²΄μλ μμ±(Property)μ νμ(Method)λ₯Ό κ°μ§κ³ μλλ°μ.
μλ₯Ό λ€μ΄ νμμΌλ‘ μ΄ν΄λ³΄λ©΄ λͺ νλ μΈμ§, λ¬΄μ¨ λ°μΈμ§ λ±μ²λΌ μ 보λ₯Ό μμ±(Property) = νλμ΄λΌ λ³Ό μ μκ³
νμμ΄ μ± μ λ³Έλ€, νμμ΄ κ³΅λΆλ₯Ό νλ€. μ΄λ°μμΌλ‘ λμ¬(νλ, λμ)λ₯Ό νμ(Method) = λ©μλλΌκ³ ν©λλ€.
μλ¬Έμ μ΄ λ€ μ μμ΅λλ€. κ°μ²΄λ κ²μ λ°°μ μ΄λ μ΄λ₯Ό μ΄λμμ μ΄λ»κ² νλ‘κ·Έλλ°μ μ μ©μ μν¨λ€λ κ²μΈμ§...
μ°μ λ¨μν μκ°ν΄λ³΄λ©΄ νλ‘κ·Έλ¨μ κ°μ²΄λ₯Ό μ¨μΌνλ€λ κ²μ μ κ² κ°μ΅λλ€.
κ·Έλ°λ° μ κ°μ΄ μμ΅λλ€. κ°μ²΄λ₯Ό μ°λ €λ©΄ λ§λ€μ΄μΌ νλλ° μ§κΈκΉμ§ λ°°μ λ κ²μμλ λ³μλ‘ λ§λλ μΆμ μ μμ΅λλ€.
κ·Έλ°λ° μ¬κΈ°μ κ°μ²΄λ μμ±κ³Ό νμλ₯Ό λͺ¨λ κ°μ§κ³ μλ€κ³ νμ£ .
λ³μλ₯Ό λ°°μ΄λ‘ ν΄μ μμ±κ°μ λ£μ μλ μμ κ²μ λλ€. νμ§λ§ νμκ° λ¬Έμ μ£ . νμλ λμ¬ μ¦, λλλ₯Ό νλ μ¬λ¬ λ΄μ©λ€μ΄ λ€μ΄κ°ν λ° μ΄λ»κ² λ°°μ΄μ λ£μ μ μμκΉμ? (ex μ± μ λ³Έλ€λ νμλ μ± μ μ°Ύκ³ -> μ± μ νΌμΉκ³ -> μ± μ λ³Έλ€ λ± μ¬λ¬ λ¬Έμ₯)
μ΄λ μ°λ κ²μ΄ ν΄λμ€μ λλ€.
π‘ ν΄λμ€(Class) μ΄λ?
μ΄λ° κ°μ²΄λ€μ λ§λλ μ€κ³λ λλ νμ λ§ν©λλ€.
μλ₯Ό λ€λ©΄ νμμ΄λΌλ ν΄λμ€λ₯Ό λ§λλ κ²μ λλ€.
ν΄λμ€μλ μμ±κ³Ό νμλ₯Ό μ μν©λλ€.
μμ λ₯Ό 보면μ ν¨κ» κ°μ λ μ΅νλ³ΌκΉμ?
class Student {
int grade; // νλ
// κ³΅λΆ νλ€.
void study() {
// μ€νλ¬Έμ₯
}
}
μ΄λ°μμΌλ‘ grade = μμ±, study() = νμλ₯Ό μ μν©λλ€.
β κ°μ²΄ λ§λ€κΈ°
μ€κ³λλ₯Ό λ§λ€μμΌλ©΄ μ€κ³λλ₯Ό ν λλ‘ κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νκ² μ£ ?
μμ ν΄λμ€μμ κ°μ²΄λ₯Ό λ§λ€λ €λ©΄ ' ν΄λμ€μ΄λ¦ λ³μλͺ = new ν΄λμ€μ΄λ¦(); ' μΌλ‘ κ°μ²΄λ₯Ό λ§λ€κ² λ©λλ€.
Student λ³μλͺ
= new Student();
ν΄λΉ κ°μ²΄μ μμ±κ³Ό νμλ₯Ό κ°μ§κ³ μ¬λ €λ©΄ μ΄λ»κ² ν΄μΌν κΉμ?
λ³μλͺ
.grade = 3;
λ³μλͺ
.study();
1) λ³μλͺ .grade = 3; -> ν΄λΉ κ°μ²΄μ grade(μμ±)λ₯Ό 3μΌλ‘ μ§μ νλ€λ λ»μ λλ€.
2) λ³μλͺ .study(); -> ν΄λΉ κ°μ²΄μ study() μμ μ€νλ¬Έμ₯μ μ€νν©λλ€.
μ΄λλ‘ λλκΈ°μλ μμ§ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ±μ μ΄ν΄λ³΄μ§ μμμ΅λλ€.
π‘ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νΉμ±
β 1. μΊ‘μν
λΉμ·ν μν μ νλ μμ±κ³Ό νμλ₯Ό νλλ‘ λ¬Άκ³ μ κ·Ό μ§μ μλ₯Ό ν΅ν΄ μ μ΄νλ λ°©μμ λλ€.
μ μ΄ν¨μΌλ‘μ¨ κ°μ²΄ λ΄λΆ μ 보λ₯Ό μλνλ νΉμ§μ κ°μ§κ³ μμ΅λλ€.
μ¦, μΈλΆμμ 보μ¬μ§ νμκ° μλ λ°μ΄ν°λ₯Ό μ¨κΈΈ μ μκ³ μνλ κΈ°λ₯λ§ μ 곡 κ°λ₯νλλ‘ μ€μ ν μ μμ΅λλ€.
μ κ·Ό μ§μ μμλ ν¬κ² 4κ°μ§ μ’ λ₯(public, protected, default, private)λ₯Ό κ°μ§κ³ μμ΅λλ€.
| μ κ·Ό μ μ΄μ | λμΌ ν΄λμ€ | λμΌ ν¨ν€μ§ | (λ€λ₯Έ ν¨ν€μ§μ μλ) μμ ν΄λμ€ | λ€λ₯Έ ν¨ν€μ§ |
| public | O | O | O | O |
| protected | O | O | O | X |
| default | O | O | X | X |
| private | O | X | X | X |
class Student {
public int grade; // νλ
protected String name; // μ΄λ¦
int id; // νλ²
private String school; // νκ΅
public void setSchool(String school) {
this.school = school;
}
public String getSchool() {
return this.school;
}
}
μ΄λ°μμΌλ‘ νμ μ°λ int gradeκ° μλ μμ μ κ·Ό μ μ΄μλ₯Ό λΆμ΄κ² λ©λλ€.
int id κ°μ κ²½μ°μλ default μ κ·Ό μ μ΄μκ° λΆμ΄μμ§λ§ μλ΅λ κ²½μ°μ λλ€.
privateμ μ μΈν λ€λ₯Έ λ³μλ€μ κ°μ²΄λ₯Ό μμ±ν ν λ³΄ν΅ λ°λ‘ μ κ·Ό ν μ μμ΅λλ€.
λ³μλͺ .grade = 3; κ³Ό κ°μ΄ λ§μ΄μ£
νμ§λ§ private κ°μ κ²½μ°μλ λμΌν ν΄λμ€μμλ§ μ¬μ©ν μ μμ΅λλ€.
μ¦, κ°μ²΄λ₯Ό μμ±νλ κ²μ class(μ€κ³λ)κ° μλ λ€λ₯Έ κ³³μμ μμ±νκΈ° λλ¬Έμ λ°λ‘ μ κ·Ό ν μ μκ² λ©λλ€.
λ³μλͺ .school = "name"; μ μ°κ² λλ€λ©΄ μ€λ₯κ° λ°μνκ² λ©λλ€.
μ΄λ΄λ μ°λ κ²μ΄ λ°λ‘ getter, setter μ λλ€.
getterλ schoolμ κ°μ 리ν΄μμΌμ£Όκ³
setterλ schoolμ κ°μ μ§μ ν΄μ£Όλ λ©μλ μ λλ€.
β 2. μμ
μμν΄λμ€μ νμ ν΄λμ€λΌλ κ°λ μ΄ μκΈ°κ³ ,
νμ ν΄λμ€μκ² μμν΄λμ€μ κΈ°λ₯μ λ¬Όλ €μ£Όλ κ²μ λ§ν©λλ€.
λΆλͺ¨κ° μμμκ² μ μ μ 보λ₯Ό λ겨주λ κ²κ³Ό μ μ¬ν λ§μ λλ€.
μ₯μ μ λμΌν νΉμ±μ μ¬μ μν νμκ° μμ΄ νμ ν΄λμ€λ λμ± κ°κ²°νκ² λ§λ€κ³ μ μ§ λ³΄μμλ μ μ©ν©λλ€.
μμμμλ extendsλΌλ ν€μλκ° λ±μ₯νκ² λ©λλ€.
public class Person {
String name;
int age;
public void study() {
System.out.print("곡λΆλ₯Ό ν©λλ€.");
}
}
public class Student extends Person {
}
μ΄λ°μμΌλ‘ λ³΄κ² λλ©΄ Personμ μμν΄λμ€κ° λκ³ Studentμ νμν΄λμ€κ° λ©λλ€.
μ΄μ μμν΄λμ€μ name, age, study()λ₯Ό Studentμμλ μ¬μ©ν μ μκ² λ©λλ€.
λ°λ‘ name, age, study()λ₯Ό λ€μ μ¨μ€ νμκ° μμ΄μ§κ² λλ κ²μ΄μ£ .
extendsλ₯Ό λ°μ λ νμλ 무μ νμ λλ€.
Personμμ Studentλ‘ extendsλ₯Ό νκ³ λ€λ₯Έ ν΄λμ€μμ λ extendsλ₯Ό νλ€κ³ ν΄λ μκ΄μμ£ .
νμ§λ§ λ¬Έμ λ λ€μ€ μμμ΄ μλλ€λ μ μ λλ€.
μλ₯Ό λ€μ΄ extends Person, People { } μ΄λ°μμΌλ‘ 2κ°μ§ μ΄μ μ¨μ£Όκ² λ κ²½μ° μ€λ₯κ° λ°μν©λλ€.
λν, μμμ κ°λ μ λ°°μ°κ² λλ©΄ ObjectλΌλ κ²μ λ°°μ°κ² λ©λλ€.
κ°μ²΄λΌλ μμ΄κ° μλλΌ μμμ μ΅μμ ν΄λμ€μ λλ€. μ΅μμλΌλ κ²μ λͺ¨λ ν΄λμ€κ° μ΄ Objectλ₯Ό μμλ°λλ€λ λ»μΈλ°μ. κ·Έλ°λ° κΆκΈν μ μ΄ μμ΅λλ€. Personλ Studentλ μ΄λμͺ½μμλ extends Objectλ₯Ό λ°μ§ μμμ΅λλ€.
μ΄λ μλμΌλ‘ μμλ°λ κ²μ΄κ³ μλ° μ»΄νμΌλ¬μ μν΄ μλμΌλ‘ μ΄λ£¨μ΄μ§λλ€.
β 3. λ€νμ±
μ΄λ° μκ°μ ν΄λ΄ μλ€.
λλ¬Όμ μΈμμ리λ₯Ό κ°μ§κ³ μμ΅λλ€.
λλ¬Όμλ κ°μμ§μ κ³ μμ΄κ° μμ£ .
κ°μμ§μ κ³ μμ΄ ν΄λμ€λ₯Ό λ§λ€μ΄ λλ¬Ό ν΄λμ€λ₯Ό μμλ°μ κ²λλ€.
λλ¬Ό ν΄λμ€μλ cry()λΌλ λ©μλκ° μκ³ λ©λ©μ΄λΌλ μ€νλ¬Έμ₯μ΄ μμ΅λλ€.
κ°μμ§λ μκ΄μμ§λ§ κ³ μμ΄λ μ΄λ¨κΉμ?
κ³ μμ΄λ λ³΄ν΅ μΌμΉμ΄λΌκ³ μλλ€. κ·ΈλΌ cry()λΌλ λ©μλ μ°μ§ λ§κ³ catCry()λΌλ λ©μλλ₯Ό λ°λ‘ λ§λ€μ΄ μ¬μ©νλ κ²μ΄ λ§μκΉμ? κ·Έλ κ² νλ©΄ cry(), catCry()... λ무 μκΈ° νλ€μ΄μ§λλ€. κ·Έλ΄ λ νμν κ²μ΄ λ°λ‘ λ€νμ± μ λλ€.
λ€νμ±μ΄λ κ°μ λͺ¨μμ ν¨μκ° μν©μ λ°λΌ λ€λ₯΄κ² λμνλ κ²μ μλ―Ένλλ°μ.
λνμ μΌλ‘ μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ΄ μμ΅λλ€.
μ€λ²λ‘λ©μ΄λ κ°μ ν¨μλͺ μ΄μ§λ§ λ§€κ°λ³μμ νμ μ΄λ κ°μκ° λ€λ₯΄κ² νμ¬ μ°¨μ΄μ μ λμ΄ ν΄λΉ νμ κ³Ό κ°μκ° μΌμΉνλ©΄ κ·Έ λ©μλλ₯Ό μ€νμν€λ κ²μ λλ€.
μ€λ²λΌμ΄λ©μ κ°μ ν¨μλͺ , κ°μ νμ κ³Ό λ§€κ°λ³μ λ± λͺ¨λ λμΌμ ν΄μΌν©λλ€. κ·ΈλΌ μ΄λ»κ² ꡬλΆμ ν΄μΌν κΉμ?
μ΄λ μμ κ΄κ³μμλ§ μΈ μ μλ€λ νμ μ λ‘λλ€. μμ ν΄λμ€μ λͺ¨λ λμΌνμ§λ§ νμ ν΄λμ€μμ λ€λ₯΄κ² μ€νλ¬Έμ₯μ μμ±νλ κ²μ΄μ£ . μ¦, μ¬μ μ νλ€λ λ»μ λλ€. κ·ΈλΌ μμ ν΄λμ€μ κ°μ²΄μΌκ²½μ° μμ ν΄λμ€ λ΄μ©μ μ€ννκ³ νμ ν΄λμ€μ κ°μ²΄μΌκ²½μ° νμ ν΄λμ€ λ΄μ©μ μ€ννκ² μ£ .
μ κ° μ€λͺ νλ κ°μμ§μ κ³ μμ΄ μμκ°μ κ²½μ°μλ μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ© μ€ μ΄λ κ²μ μ¨μΌ λ μ’μκΉμ?
λλ¬Όκ³Ό κ³ μμ΄κ° μμ κ΄κ³μ μκ³ λ©μλμ λͺ¨μμ λμΌνμ§λ§ λ΄μ©λ§ λ€λ₯΄κ² νκ³ μΆμ κ²μ΄κΈ° λλ¬Έμ
μ€λ²λΌμ΄λ©μ μ°λκ²μ΄ λ μ’μ κ² κ°μ΅λλ€.
class Animal {
public void cry() {
System.out.print("λ©λ©");
}
}
class Dog extends Animal { }
class Cat extends Animal {
@Override
public void cry() {
System.out.print("μΌμΉ");
}
}
μ΄λ @Override λ μ€λ²λΌμ΄λ©μ νκ² λ€κ³ λͺ μν΄μ£Όλ κ²μ λλ€.
λ§μ½ μλμ μλ λ©μλκ° μμλ°μ μμν΄λμ€ λ©μλμ μλ€λ©΄ μ€λ₯λ₯Ό μΆλ ₯ν΄μ€λλ€.
β 4. μΆμν
κ³΅ν΅ μμ± λλ κΈ°λ₯μ λ¬Άμ΄ μ΄λ¦μ λΆμ΄λ κ²μ λλ€.
μλ₯Ό λ€μ΄ κ°μμ§, κ³ μμ΄, λ±, μ¬μ λ±μ λ°λ‘ λ°λ‘ λ΄λ λκ² μ§λ§ νλλ‘ λ¬ΆμΌλ©΄ λλ¬Όμ΄λΌκ³ ν μ μμ΅λλ€.
μ΄λ κ² μΆμμ μΌλ‘ ν¬κ² μ μνλ κ²μ λ§ν©λλ€.
μΆμνμλ μΆμ λ©μλ, μΆμ ν΄λμ€ λ λμκ° μΈν°νμ΄μ€λΌλ κ°λ μ΄ μμ΅λλ€.
μ΄λ° μΆμνμ λν κΉμ μ€λͺ μ λ€μ μκ°μ μ€λͺ νλλ‘ νκ² μ΅λλ€.
κ°μ¬ν©λλ€ :)
