Backend/Java

[μžλ°”] μΈν„°νŽ˜μ΄μŠ€(Interface)와 μΆ”μƒν΄λž˜μŠ€(Abstract)

carsumin 2021. 8. 18. 16:51

 

μΈν„°νŽ˜μ΄μŠ€ 

 

μΌμ’…μ˜ 좔상 클래슀둜 interface ν‚€μ›Œλ“œλ₯Ό 톡해 μ„ μ–Έν•˜κ³ ,

μƒμ†μ‹œ implements ν‚€μ›Œλ“œλ₯Ό 톡해 일반 ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” μžμ²΄λ‘œλŠ” 객체 생성이 λΆˆκ°€λŠ₯ν•˜κ³  닀쀑상속이 κ°€λŠ₯ν•˜λ‹€.

 

// μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
interface Animal {
    void makeSound();  // 좔상 λ©”μ„œλ“œ
    void move();       // 좔상 λ©”μ„œλ“œ
}

// μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 클래슀
class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍");
    }

    @Override
    public void move() {
        System.out.println("κ°•μ•„μ§€κ°€ 달린닀");
    }
}

// λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 클래슀
class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("μ•Όμ˜Ή");
    }

    @Override
    public void move() {
        System.out.println("고양이가 μ ν”„ν•œλ‹€");
    }
}

public class InterfaceExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
        dog.move();

        Animal cat = new Cat();
        cat.makeSound();
        cat.move();
    }
}

 

 

μΆ”μƒν΄λž˜μŠ€

 

μΆ”μƒλ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•œ 클래슀둜 상속을 ν†΅ν•΄μ„œ λ―Έμ™„μ„±λ©”μ„œλ“œλ₯Ό μžμ† ν΄λž˜μŠ€μ—μ„œ μ™„μ„±ν•œλ‹€.

μΆ”μƒν΄λž˜μŠ€λŠ” 상속을 μœ„ν•œ 클래슀이기 λ•Œλ¬Έμ— 객체λ₯Ό 생성할 수 μ—†λ‹€.

 

// 좔상 클래슀 μ •μ˜
abstract class Animal {
    abstract void makeSound();  // 좔상 λ©”μ„œλ“œ
    
    void sleep() {  // κ΅¬ν˜„λœ λ©”μ„œλ“œ
        System.out.println("μž μžλŠ” 동물");
    }
}

// 좔상 클래슀 상속받은 ꡬ체 클래슀
class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("멍멍");
    }
}

// 좔상 클래슀 상속받은 또 λ‹€λ₯Έ ꡬ체 클래슀
class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("μ•Όμ˜Ή");
    }
}

public class AbstractClassExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
        dog.sleep();

        Animal cat = new Cat();
        cat.makeSound();
        cat.sleep();
    }
}

 

 

곡톡점 : 객체 생성이 λΆˆκ°€λŠ₯함, μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ•Όν•¨

차이점 : μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œ, 좔상 ν΄λž˜μŠ€λŠ” 일반 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” λ©”μ„œλ“œ μ„ μ–Έλ§Œ κ°€λŠ₯