[내배캠/사전캠프] TIL - 1일차

euphony·2024년 11월 19일
0

내일배움캠프

목록 보기
1/66

아직 강의를 받기 전이라 자바 강의를 복습하면서 정리한 내용을 업로드한다!

인터페이스

클래스의 모든 메서드가 추상 메서드인 클래스를 순수 추상 클래스라고 한다. 순수 추상 메서드는 실행 로직이 없고 오직 다형성을 위한 부모 타입으로써 역할만 제공한다.

✔️ 순수 추상클래스란?

  • 인스턴스를 생성할 수 없다.
  • 상속 시 자식은 모든 메서드를 오버라이딩 해야 한다.
  • 주로 다형성을 위해 사용된다.
  • 인터페이스라는 개념을 통해 순수 추상 클래스를 더 편리하게 사용할 수 있다.

✔️ 인터페이스란?

  • class 대신 interface 키워드를 사용, 구현 시 implements 키워드 사용
  • 메서드는 모두 public abstract & 메서드에 public abstract 생략 권장
  • 다중 구현(다중 상속) 지원 - 자바는 다중 상속 지원X(다이아몬드 문제) 인터페이스로 구현가능!

인터페이스 자신은 구현을 가지고 있지 않기 때문에 다이아몬드 문제가 발생하지 않는다. 따라서 인터페이스의 경우 다중 구현을 허용하는 것이다. 아래는 InterfaceA와 InterfaceB를 구현한 Child 클래스이다. InterfaceA와 InterfaceB 둘 다 methodCommon()이라는 메서드가 있는 상황이지만, 구현은 Child에서 하면 되므로 문제 되지 않는다.

public class Child implements InterfaceA, InterfaceB {
    @Override
    public void methodA() {
        System.out.println("Child.methodA");
    }

    @Override
    public void methodB() {
        System.out.println("Child.methodB");
    }

    // 양쪽 인터페이스에 다 있지만 같은 메서드이므로 구현은 하나만 하면 된다.
    @Override
    public void methodCommon() {
        System.out.println("Child.methodCommon");
    }
}

클래스와 인터페이스 활용

클래스 상속과 인터페이스 구현을 함께 사용할 수 있다.

다음과 같은 추상 클래스와 인터페이스가 있다고 했을 때, extends 키워드와 implements 키워드를 함께 쓸 수 있다.

public abstract class AbstractAnimal {
    public abstract void sound();
    public void move() {
        System.out.println("동물이 이동합니다.");
    }
}
public interface Fly {
    void fly();
}

클래스 상속과 인터페이스를 모두 사용한 Chicken 클래스이다. "extends AbstractAnimal implements Fly"로 작성해서 상속도 받고, 인터페이스 구현도 했다. 이렇게 모두 사용할 때는 extends가 먼저 나와야 하는데, extends를 통한 상속은 하나만 가능하고 implements를 통한 인터페이스는 다중 구현이 가능하기 때문이다.

public class Chicken extends AbstractAnimal implements Fly {
    @Override
    public void sound() {
        System.out.println("꼬끼오");
    }

    @Override
    public void fly() {
        System.out.println("닭 날기");
    }
}

0개의 댓글

관련 채용 정보