의문점 공부하기/📌 Java

📌 인터페이스는 객체 사용 규칙을 정의한다

아리빠 2023. 6. 15. 16:55

그럼 인터페이스와 상속은 다른것인가?

▶자바에서 인터페이스와 상속은 다른 개념이다 ! 

  • 인터페이스:
    • 공통 기능을 추상화하여 표준으로 만들어놓은 것이다 
    • 인터페이스는 다중 상속이 가능하며, 구현체가 아니라 구현체를 위한 규약을 제공한다.
    • 인터페이스는 추후에 변경될 수 있는 기능을 정의하고, 해당 인터페이스를 구현하는 클래스에서 실제 동작을 구현한다 
    • 인터페이스를 사용하면 추후에 변경이 필요한 경우, 해당 인터페이스를 구현하는 클래스만 수정하면 되므로 소스 코드 수정이 간편해진다(유지 보수에 용이!) ex) DB 연결, SQL 쿼리 생성, 쿼리에 인자 전달과 같은 공통 기능을 인터페이스로 정의하면, 추후에 DB가 변경되더라도 인터페이스를 지켜주는 클래스만 수정하면 된다
    •  - implements 
public interface Database {
    void connect();
    void executeQuery(String query);
    void close();
}

public class MySQLDatabase implements Database {
    // MySQL 데이터베이스에 대한 구체적인 구현
    // connect, executeQuery, close 메서드를 구현해야 함
}

public class OracleDatabase implements Database {
    // Oracle 데이터베이스에 대한 구체적인 구현
    // connect, executeQuery, close 메서드를 구현해야 함
}

  • 상속:
    • 객체지향 프로그래밍의 중요한 특징으로, 부모 클래스의 멤버 변수와 메서드를 자식 클래스가 상속받아 사용할 수 있게 한다.
    • 상속을 통해 코드의 재사용성과 확장성을 높인다
    • 자식 클래스는 부모 클래스의 멤버 변수와 메서드를 직접 사용할 수 있으며, 필요에 따라 재정의(오버라이딩)하여 자신에게 맞게 동작하도록 할 수 있다
    • 상속은 단일 상속만 가능하며, 부모 클래스로부터 상속받은 멤버 변수와 메서드를 자식 클래스에서 활용할 수 있다. ex) 부모 클래스인 Animal이라는 클래스를 정의하고, 이를 상속받은 Dog와 Cat 클래스를 정의할 수 있다. 각각의 자식 클래스에서는 부모 클래스의 멤버 변수와 메서드를 사용하며, 필요에 따라 재정의하여 다른 동작을 수행할 수 있다.
    • - extends
public class Animal {
    protected String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void speak() {
        System.out.println("Animal speaks");
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
    
    @Override
    public void speak() {
        System.out.println("Dog barks");
    }
}

public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }
    
    @Override
    public void speak() {
        System.out.println("Cat meows");
    }
}