1. 클래스

    1. 특징
      1. 객체를 만들기 위한 설계도
      2. 필드(속성) + 메서드 (동작)을 가질 수 있음
      3. 상속(extends) 가능, 다중 상속 불가(인터페이스는 가능)
      4. 접근제어자 사용가능
    2. 장점
      1. 구체적 구현을 포함할 수 있어 즉시 객체 생성 가능
      2. 재사용, 캡슐화, 상속 활용 가능
      3. 필드와 메서드를 같이 관리할 수 있음
    3. 단점
      1. 다중 상속 불가
      2. 강한 결합 발생 가능 → 변경시 영향 범위가 크다.
  2. 인터페이스(Interface)

    1. 특징
      1. 규약 역할 → 구현 클래스가 반드시 메서드를 구현하도록 강제
      2. 필드 선언 불가 (상수만 가능, public static final)
      3. 메서드 시그니처만 선언, default/ static 메서드 구현 가능
      4. 다중 상속 가능
    2. 장점
      1. 다형성 활용 가능 → 서로 다른 클래스도 같은 인터페이스 타입으로 다루기 가능
        1. 하나의 타입으로 여러 행태의 객체를 다룰 수 있는 성질을 말함
      2. 구현 강제 → 표준화, 유지보수 용이
      3. 다중 구현가능(implements) → 유연성 높음
    3. 단점
      1. 객접 객체 생성 불가 → 반드시 구현 클래스 필요
      2. 기본 구현이 없으면 모든 메서드를 구현해야 해서 번거로움