자바

인터페이스

박진웅 2023. 9. 11. 17:28
  1. extends:
    • 클래스를 다른 클래스로 확장할 때 사용됩니다. 이를 통해 부모 클래스의 속성과 메서드를 자식 클래스에서 상속받을 수 있습니다.
    • 자바는 단일 상속만을 허용하므로, 하나의 클래스는 오직 한 부모 클래스만을 extends로 확장할 수 있습니다.
    • 예: public class Child extends Parent { ... }
  2. implements:
    • 인터페이스를 클래스에서 구현할 때 사용됩니다. 클래스는 인터페이스에 정의된 모든 추상 메서드를 구현해야 합니다.
    • 한 클래스는 여러 인터페이스를 implements 키워드를 사용하여 동시에 구현할 수 있습니다.
    • 예: public class MyClass implements Interface1, Interface2 { ... }

간단한 요약:

  • extends는 클래스 간의 상속을 위해 사용됩니다.
  • implements는 클래스가 인터페이스를 구현하기 위해 사용됩니다.

추상메서드 (abstract) 

abstract 키워드와 함께 원형만 선언되고 코드는 작성되지않은 코드이다 

abstract public String getName();// 추상메서드
abstract public String fail(){ return "good bye"; } // 추상 메서드 아님 컴파일 에러

추상클래스

 추상 클래스는 abstract로 선언한 클래스로서 다음 두가지 경우가 있음

    추상메서드가 없어도 abstract로 선언된 클래스

1. 추상메서드를 최소 한 개 이상 가지고 abstract로 선언된 클래스 

abstract class Shape{
	public Shape(){ ... }
    public void edit() {...}
    abstract public void draw(); // 추상 메서드 선언
}

2. 추상메서드가 없어도 abstract로 선언된 클래스

abstract class JComponent{
	String name;
    public void load(String name){
    this.name=name;
    }
}

추상 메서드가 없어도 클래스 선언할때 abstract를 써도 되지만 

추상 메서드를 가지고 있다면 무조건 클래스에 abstract를 써야한다

 

추상메서드는 상속 받은 클래스에서 @override를 써서 커스텀 할 수 있다

 

인터페이스(interface)

인터페이스는 서로 다른 하드웨어 장치들이 상호 데이터를 주고받을 수 있는 규격을 의미한다

그러니까 인터페이스는 형식같은것이다 객체를 상속받는것이랑 다른점이라 한다면

인터페이스는 메서드의 내용을 구현하지않아도 된다

클래스가 인터페이스를 implements로 상속받으면 인터페이스에서 정의한 메서드를 반드시 구현해야한다

인터페이스를 여러개 implements가 가능하기 때문에 하나의 클래스에서 여러 인터페이스를 동시에 구현 할 수 있다

    interface PhoneInterface{
        final int TIMEOUT=10000;
        abstract public void sendCall();
        abstract public void recieveCall();
        default void printLogo(){
            System.out.println("** phone **");
        }
    }
        class SamsungPhone implements PhoneInterface{
        @Override
         public void sendCall(){
         System.out.println("띠리리링");
         }
         
        @Override
        public void recieveCall(){
             System.out.println("따르릉");
         }
    }
 public class InterfaceEx{
     public static void main(String[] args){
         SamsungPhone phone =new SamsungPhone();
         phone.sendCall();
         phone.recieveCall();
     }
 }

 

그렇기에 상속은 클래스 간의 계층 구조를 만들고 코드 재사용성 및 확장을 위해 사용됨

인터페이스는 클래스가 특정 동작을 지원하도록 정의하기 위해 사용됨