λͺ©μ°¨
Object Oriented Programming
Encapulattion(μΊ‘μν-μλ)
- μΈλΆμμ μ¬μ©μκ° μμ±μ μ§μ μ‘°ν, μμ ν μ μλλ‘ μ ν
- κ°λ°μκ° λ§λ€μ΄ μ£Όλ λλ‘λ§ μ¬μ©ν μ μλλ‘ λ©μλ μ 곡 → setXxx, getXxx
- κ΄λ‘) μμ±μ λ°μ μμ±
setXxx
- νλλ₯Ό μμ νλ€
μμ±λ²
- modefier ⇒ public
- returntype ⇒ void
- methodName ⇒ setXxx()
- parameter ⇒ Exist!
μ μ°μ§?
λ©μλμ΄λκΉ κΈ°λ₯μ λ§λ€ μ μλ€! μ μ μ μμμΉ λͺ»ν μν©μ μ μ΄.
⇒ μμΈ μ²λ¦¬ν΄μ νλ‘κ·Έλ¨μ λΌμ΄ν μ¬μ΄ν΄μ΄ μνλ λ°©ν₯μΌλ‘ νλ¬κ°λλ‘.
public void setAge(int age) {
if (age > 18) this.age = age;
}
getXxx
- νλλ₯Ό μ‘°ννλ€
μμ±λ²
- modefier ⇒ public
- returntype ⇒ μνλ λ°μ΄ν° νμ
- methodName ⇒ getXxx()
- parameter ⇒ null
μ μ°μ§?
κΈ°λ₯μ λ£μ μ μλ€. μνλ λλ‘ λ°μ΄ν°λ₯Ό κ°κ³΅νμ¬ λ°μ΄ν°λ₯Ό μ 곡ν μ μλ€!
public int getAge() {
if(μμΌ μ§λ¨) return age-1;
else return age-2;
}
Singleton Pattern
- μΈλΆμμ κ°μ²΄λ₯Ό μ§μ μμ±νμ§ λͺ»νλλ‘ ν¨
- νμ¬ κ°μ²΄λ₯Ό μ§μ μμ±ν΄μ 리ν΄ν΄μ£Όλ λ©μλ μ 곡
μ μ°μ§?
κ°λ°μκ° μ§μ κ°μ²΄λ₯Ό λ§λ€μ΄ μ£ΌκΈ° λλ¬Έμ κ°λ°μκ° μλνλλ‘λ§ μμ±λλ€
μμ± λ°©λ²
- private κΈ°λ³Έ μμ±μ
- λ©€λ²νλλ‘ static μκΈ° μμ νμ μ μΈ
- public static methodλ₯Ό μ 곡νμ¬ κ°μ²΄λ₯Ό μ¬μ©ν μ μλλ‘ λ°ν
public class Test {
private static Test instance = new Test();
// μμ±μ
private Test() {}
// λ©μλ
public static Test getInstance([parameter]) {
return instance;
}
}
/* μΈλΆ μλΉμ€ */
Test t1 = Test.getInstance(); // singleton!
Test t2 = Test.getInstance(); // singleton!
Test t3 = Test.getInstance(); // singleton!
/* μΆλ ₯κ²°κ³Ό */
t1 = day04.constructor.Test@6aaa5eb0
t2 = day04.constructor.Test@6aaa5eb0
t3 = day04.constructor.Test@6aaa5eb0
cf) Calendar κ°μ²΄λ μ±κΈν€μ΄ μλ! μκ°μ κ³μ λ¬λΌμ§λκΉ.
Calendar c1 = new Calendar // λΆκ°
Calendar c2 = Calendar.getInstance(); // λ€λ₯Έκ² λμ€κΈ΄ ν¨
Inheritance(μμ)
κ°μ²΄μ§ν₯μ πΈ
- μμμ΄λ λΆλͺ¨(Super) classμ μμ±(μ μλ³μ = Field)κ³Ό methodλ₯Ό μμ λ°λ κ².
- λΆλͺ¨ classμ μμ±μμ private μμλ₯Ό μ μΈν λͺ¨λ κ²μ μμλ°λλ€.
- λΆλͺ¨ classμ methodμ μμ±μ λ³λμ μ μΈ μμ΄ λ΄μμ μλ κ²μ²λΌ μ κ·Όνμ¬ μ¬μ©.
- λ¨μΌμμλ§ κ°λ₯(λΆλͺ¨λ λ¨ νλ. νμ§λ§ λλ¬Όλ¦Όμ κ°λ₯.)
- extends ν€μλ μ¬μ©
- ex) class A extends B { } ~> Aκ° Bλ₯Ό μμ λ°λλ€. Aλ Bμ κ²λ€μ λ€ μ¬μ©νλ€.
- javaμ λͺ¨λ classλ Object(class)λ₯Ό μμλ°λλ€. (javaμ μ΅κ³ μ‘°μ. λΆλͺ¨κ° μλ κ°μ²΄λ μλ€.)
- μκΈ°λ§μ μμ±, κΈ°λ₯λ μΆκ°λ‘ λ§λ€ μ μλ€.
- λΆλͺ¨νμ μΌλ‘λ μμμ μμ±, λ©μλλ₯Ό μ¬μ©ν μ μλ€.
- μμμ λ§λ€λ©΄ λΆλͺ¨λ νλμ κ°μ²΄λ‘ ν¨κ» μμ±λλ€. ν μμμ κ°μ²΄κ° λ§λ€μ΄μ§λ€.
μ νμν κΉ?
μλλ¦¬μ€ μμ κ°μ²΄κ° κ°μ ΈμΌ νλ 곡ν΅μ μμ±(νλ), κΈ°λ₯(λ©μλ)λ₯Ό λ§λ€μ΄ λκ³ μ¬μ¬μ©νκΈ° μν΄
Overriding
μ¬μ μ
μμκ΄κ³μμ Super(λΆλͺ¨)classμ μ μλμ΄ μλ methodλ₯Ό Sub(μμ) classμμ μ¬μ μ νλ κ².
μ¬μ μ λ°©λ²
- modifierμ μ κ·Όμ νμλ λ°λμ λΆλͺ¨ classμ μ νμ λ³΄λ€ ν¬κ±°λ κ°μμΌ νλ€. β¨ μ κ·Όμ νμ μ΄μΈμ modifier(abstract)λ κ°μλ λ¬λΌλ μκ΄μλ€.
- returnType 무쑰건 κ°λ€.
- methodμ΄λ¦, μΈμ 무쑰건 κ°λ€.
- κΈ°λ₯μ λ€λ₯΄κ² λ§λ λ€. (κΈ°λ₯μ΄ λ€λ₯΄μ§ μμΌλ©΄ λ§λ€ νμκ° μλ€) β¨ μ¦, λΆλͺ¨ classμ method κΈ°λ₯μ΄ λ§μμ λ€μ§ μμ λ€λ₯Έ κΈ°λ₯μΌλ‘ μ¬μ μ.
μμ κ΄κ³μΌ λ μμ±μμ κ°λ
- μμ classκ° μμ± λ λ λΆλͺ¨ classμ κΈ°λ³Έ μμ±μ νΈμΆλλ€.
- μμ classκ° μΈμκ° μλ μμ±μλ₯Ό νΈμΆνλλΌλ λΆλͺ¨ classμ κΈ°λ³Έ μμ±μκ° νμνλ€.β¨ μμ μμ±μμ ꡬνλΆ μ²« λ²μ§Έ μ€μμ super(); μλ΅λ κ²κ³Ό κ°λ€.
- ex) new Sub(5); μ²λΌ νΈμΆνλλΌλ super(); (κΈ°λ³Έμμ±μ)κ° νΈμΆλλ€.
- μμ classμμ μΈμμ μΌλ‘ super(κ°, κ°, ... ); νΈμΆνλ©΄ λΆλͺ¨μ κΈ°λ³Έμμ±μ νμμλ€.
- β¨ λ¨, λͺ¨λ μμμμ±μμμ super(κ°, κ°, ... ); νΈμΆλμ΄ μμ΄μΌ λ¬Έλ²μ μ€λ₯κ° μλ€.
- μμ μμ±μ ꡬνλΆ μ²« λ²μ§Έ μ€μμ this(κ°, κ°, ... );μ νΈμΆνλ©΄ λ¨Όμ νΈμΆλ μμ μμ±μμ κ°μ μ΄λν μμ μμ±μ ꡬνλΆ μ²« λ²μ§Έ μ€μμ super(); νΈμΆλλ€.
ex) toString(Object obj)
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#toString()
Objectμ μλλ° Stringμμ μ¬μ μ
@Override
@Override
Indicates that a method declaration is intended to override a method declaration in a supertype.
If a method is annotated with this annotation type compilers are required to generate an error message unless at least one of the following conditions hold:
The method does override or implement a method declared in a supertype.
The method has a signature that is override-equivalent to that of any public method declared in Object.
Since: 1.5
super
superμ μ¬μ©λ² 3κ°μ§ (μμ ν΄λμ€μμ λΆλͺ¨λ₯Ό μΉν¨)
- super.λ³μμ΄λ¦ β¨ μμclassμμ λΆλͺ¨ classμ μ μλ³μ νΈμΆ μμclassμ λ³μμ΄λ¦κ³Ό λΆλͺ¨classμ λ³μμ΄λ¦ κ°μ λ ꡬλΆ
- super.methodμ΄λ¦( [κ°, κ°, ...] ); β¨ μμclassμμ λΆλͺ¨classμ methodνΈμΆ
- super( [κ°, κ°, ... ] ); β¨ μμ classμ μμ±μꡬνλΆ μ²« λ²μ§Έ μ€μμ λΆλͺ¨ classμ μμ±μ νΈμΆ
super, this μμ±μμμλ§ μ¬μ©!
Polymorphsim(λ€νμ±)
μμκ΄κ³μ¬μΌ νλ€
- class A extends B{ } μΌ λ Aλ₯Ό AλΌ λΆλ₯Ό μ μκ³ Aλ₯Ό BλΌ λΆλ₯Ό μ μλ€. => class A extends B{ }μΌ λ
- γ A a = new A(); β¨ O γ‘ B b = new A(); β¨ O // polymorphism! γ’ B c = new B(); β¨ O γ£ A d = new B(); β¨ X
- κ°μ²΄ μμ²΄κ° λ°λλ κ²μ΄ μλλΌ λλΌκ³ λΆλ₯΄λμ λ°λΌ μ κ·Όν μ μλ λ²μκ° μ νλλ€
λ°©μ
- 맀κ°λ³μλ₯Ό μ΄μ©ν λ€νμ±
- class Sonata extends Car {/*μλνλ§μ μμ±, κΈ°λ₯μ΄ μλ€.*/} class Example { public void engineer(Car cd){ System.out.println(cd + " μ리λ₯Ό μμν©λλ€."); } public static void main(String[] args) { // main Sonata sonata = new Sonata(); engineer(sonata); // polymorphism! } }
- νλλ₯Ό μ΄μ©ν λ€νμ± λΆλͺ¨νμ λ³μ = μμκ°μ²΄;
- class Example { public static void main(String[] args) { Car car1 = new Car(); Car car2 = new Sonata(); // polymorphism! } }
μ μ½
- Carμ λΆλͺ¨λ‘ νλ μ¬λ¬κ°μ§ μ°¨κ° λ€μ΄μμΌ νλ€ → 무λΆλ³ν μΊμ€ν
κΈμ§. 쑰건 κ±ΈκΈ°.
if (car instanceof EfSonata) { // λ³μ instanceof νμ System.out.println("car instanceof Sonata is true"); } else { System.out.println("car instanceof Sonata is false"); }
- Exception in thread "main" java.lang.ClassCastException: class day04.inheritance.Car cannot be cast to class day04.inheritance.Excel (day04.inheritance.Car and day04.inheritance.Excel are in unnamed module of loader 'app') at day04.inheritance.CarCenter.engineer(PolymorphismExam.java:18) at day04.inheritance.PolymorphismExam.main(PolymorphismExam.java:34)
- μ μ°ν΄μ‘μ§λ§ μ κ·Όμ μ νμ΄ μμ§ ⇒ μμνμ
μΌλ‘ λ§λ€λ©΄ μ κ·Ό κ°λ₯
- μ€μ μ μΌλ‘ μ 보λ₯Ό μ¬μ©νκΈ° μν΄μλ Object Down Castingμ΄ νμνλ€
- μλ―Έμ μΌλ‘ λΆλͺ¨>μμ
instanceof
μ°μ°μ. κ²°κ³Όκ°μ boolean.
- λ°λμ μμκ΄κ³μΌ λλ§ μ¬μ©νλ€. (μλλ©΄ μ»΄νμΌ μ€λ₯)
- variable instanceof ObjectType
- β¨ μΌμͺ½μ λ³μκ° μ€λ₯Έμͺ½μ Typeμ΄ λ μ μλλ?
- μΌμͺ½μ λ³μνμ΄ μ€λ₯Έμͺ½μ Typeκ³Ό κ°κ±°λ μλΈ classμΌ λ trueμ΄λ€. (μΌμͺ½ <= μ€λ₯Έμͺ½)
- μΊμ€ν ν λ λ§€μ° κΆμ₯.
if (cd instanceof Excel) {
// Object Down Casting
Excel ex = (Excel) cd;
System.out.println("ex = " + ex);
System.out.println("ex.color = " + ex.color);
}