Language/JAVA

[JAVA] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€

κ΅ λ―Ό 2024. 8. 19. 14:30

 

πŸ“Œ μΆ”μƒν΄λž˜μŠ€ : λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” μ œκ³΅ν•˜μ§€λ§Œ, μ‹€μ œ μƒμ„±λ˜λ©΄ μ•ˆ λ˜λŠ” 클래슀
πŸ“Œ μΈν„°νŽ˜μ΄μŠ€ : 순수 좔상 클래슀둜, μ‹€ν–‰ λ‘œμ§μ„ μ „ν˜€ 가지고 μžˆμ§€ μ•Šμ€ λͺ¨λ“  λ©”μ„œλ“œκ°€ 좔상 λ©”μ„œλ“œμΈ 좔상 클래슀

 

μΆ”μƒν΄λž˜μŠ€ 선언법
abstract class abstractClass {...} 

 : 클래슀λ₯Ό μ„ μ–Έν•  λ•Œ μ•žμ— μΆ”μƒμ΄λΌλŠ” 의미의 abstract ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

 

μΆ”μƒν΄λž˜μŠ€ νŠΉμ§•
  • 직접 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•œλ‹€.
  • 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜λΌλ„ μžˆλŠ” ν΄λž˜μŠ€λŠ” 좔상 클래슀둜 μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

 

좔상 λ©”μ„œλ“œ 선언법
public abstract void abstractMethod();

 : λ©”μ„œλ“œ μ•žμ— μΆ”μƒμ΄λΌλŠ” 의미의 abstract ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

 

좔상 λ©”μ„œλ“œ νŠΉμ§•
  • λ°”λ”” 뢀뢄이 μ—†λ‹€.
  • μƒμ†λ°›λŠ” μžμ‹ ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ μ˜€λ²„λΌμ΄λ”© ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
    • μ˜€λ²„λΌμ΄λ”© μ•ˆν•˜λ©΄ 였λ₯˜ λ°œμƒ

 

πŸ“„ 좔상 클래슀, λ©”μ„œλ“œ μ˜ˆμ‹œ μ½”λ“œ 

// 좔상 클래슀 μ •μ˜
abstract class Animal {
    // 좔상 λ©”μ„œλ“œ μ •μ˜ - λ°”λ”” 쑴재X
    public abstract void sound();
    
    //일반 λ©”μ„œλ“œ : λͺ¨λ“  μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ™μΌν•˜κ²Œ μ‚¬μš© κ°€λŠ₯
    public void sleep() {
        System.out.println("Animal Sleep");
    }
}

// ꡬ체 클래슀: Animal을 상속받아 좔상 λ©”μ„œλ“œ κ΅¬ν˜„
class Dog extends Animal {
    @Override // μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨μ˜ μΆ”μƒλ©”μ„œλ“œ μž¬μ •μ˜
    public void sound() {
        System.out.println("Bark");
    }
}

// ꡬ체 클래슀: Animal을 상속받아 좔상 λ©”μ„œλ“œ κ΅¬ν˜„
class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }
}

// 메인 클래슀
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.sound();  // 좜λ ₯: Bark

        Animal cat = new Cat();
        cat.sound();  // 좜λ ₯: Meow
        cat.sleep();  // 좜λ ₯: Animal Sleep
    }
}

 

 

πŸ“Œ  순수 좔상 클래슀 : λͺ¨λ“  λ©”μ„œλ“œκ°€ 좔상 λ©”μ„œλ“œμΈ 좔상 클래슀

  • μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ°”λ”” 뢀뢄이 μ „ν˜€ μ—†λ‹€. (μ‹€ν–‰λ‘œμ§ 쑴재 x)
  • λ‹€ν˜•μ„±μ„ μœ„ν•œ λΆ€λͺ¨νƒ€μž…μœΌλ‘œμ¨ 껍데기 μ—­ν• λ§Œ 제곡
  • μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.
  • μžμ‹μ€ λͺ¨λ“  λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•΄μ•Ό ν•œλ‹€.

πŸ“„ 순수 좔상 클래슀 μ˜ˆμ‹œ μ½”λ“œ

public abstract class AbstractAnimal {
 public abstract void sound();
 public abstract void move();
}

 

 

 

πŸ“Œ μΈν„°νŽ˜μ΄μŠ€ : μžλ°”μ—μ„œ 순수 좔상 클래슀λ₯Ό 더 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ œκ³΅ν•œ κ°œλ…

  • μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλŠ” λͺ¨λ‘ public, abstract이닀.
  • λ©”μ„œλ“œμ— oublic abstractλ₯Ό μƒλž΅ν•  수 있고, μƒλž΅μ΄ ꢌμž₯λœλ‹€.
  • 닀쀑 κ΅¬ν˜„(닀쀑 상속)을 μ§€μ›ν•œλ‹€.
    • μΈν„°νŽ˜μ΄μŠ€κ°€ λͺ¨λ‘ 좔상 λ©”μ„œλ“œλ‘œ 이루어져 있기 λ•Œλ¬Έμ— κ΅¬ν˜„μ„ μžμ‹ ν΄λž˜μŠ€μ—μ„œ ν•΄μ•Ό ν•˜λ―€λ‘œ 닀이아λͺ¬λ“œ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.
    • κ΅¬ν˜„μ€ ν•˜λ‚˜λ§Œ ν•˜λ©΄ λœλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ 선언법

 : classκ°€ μ•„λ‹ˆλΌ interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

//classκ°€ μ•„λ‹Œ interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έ
public interface InterfaceAnimal { 
       void sound();   // puiblic abstract μƒλž΅λœ ν˜•νƒœ
       void move();
}

 

μΈν„°νŽ˜μ΄μŠ€μ™€ 멀버 λ³€μˆ˜

 : μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 멀버 λ³€μˆ˜λŠ” public, static, final이 λͺ¨λ‘ ν¬ν•¨λ˜μ—ˆλ‹€κ³  κ°„μ£Όλœλ‹€.

public interface InterfaceMath {
 double PI = 3.14;  //public static final double PI = 3.14
}
  • final μ‚¬μš©μœΌλ‘œ, κ³ μΉ  수 μ—†λŠ” μƒμˆ˜

 

 

✏️ 상속과 κ΅¬ν˜„

  • 상속 : κΈ°μ‘΄ 클래슀λ₯Ό 기반으둜 μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 것.
  • κ΅¬ν˜„ : μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기반으둜 ν΄λž˜μŠ€κ°€ νŠΉμ • λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” κ²ƒμœΌλ‘œ, ν΄λž˜μŠ€μ™€ 달리 μ‹€μ œ κ΅¬ν˜„μ€ κ΅¬ν˜„ν΄λž˜μŠ€μ—μ„œ 이루어지기에 λΆ€λͺ¨μ˜ μΈν„°νŽ˜μ΄μŠ€ κΈ°λŠ₯을 μžμ‹μ΄ 상속받을 λ•ŒλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€κ³  ν‘œν˜„ν•œλ‹€.

 

✏️ 상속과 κ΅¬ν˜„μ„ λ™μ‹œμ— ν•˜λŠ” 경우

 : extendsλ₯Ό ν†΅ν•œ 상속은 ν•˜λ‚˜λ§Œ ν•  수 있고, implementλ₯Ό ν†΅ν•œ μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 κ΅¬ν˜„ κ°€λŠ₯.

  • extendsκ°€ λ¨Όμ € λ‚˜μ™€μ•Ό ν•œλ‹€.
  • 닀쀑 κ΅¬ν˜„μ˜ 경우 " , " λ₯Ό μ΄μš©ν•΄μ„œ ꡬ뢄
public class Bird extends Animal implements Dog, Cat { ... }