abstract class & interface (추상 클래스와 인터페이스)

ssh·2023년 12월 5일
0

dart

목록 보기
7/22

abstract class

개요

  • 추상 클래스는 상속의 재료로 사용되는 클래스이자 상세 부분이 미정의 된 클래스를 말한다.
    • 일부는 정의가 되어 있을 수 있고 일부는 안되어 있을 수 있다.
  • 즉, 추상 클래스는 다른 클래스들이 직접 구현해야 하는 필드와 메소드들을 모아놓은 클래스이다.
  • 추상 클래스는 아직 메소드와 내용이 추상적이므로 객체를 생성할 수 없다.
  • 추상 클래스를 상속받는 클래스들은 추상 클래스의 메소드들을 구현해야 한다.
  • 추상 메소드가 필요한 이유
    • 공통된 필드와 메소드를 통일하기 때문이다.
  • 클래스가 여러 개일 경우에는 전에 사용했던 필드 및 메소드와 이름과 규격이 달라질 수 있다.
  • 추상클래스는 필드와 메소드를 같은 이름과 규격으로 만들게 함으로써 통일성을 유지해준다.
  • 내용이 정의되지 않고 상세정의가 미정인 메소드가 있는 클래스는 abstract 를 붙여서 추상메소드로 한다.
  • 추상 클래스는 인스턴스화가 금지되고 오버라이드가 강제된다.
  • 추상 클래스와 추상 메소드를 활용한 상속의 재료로서의 부모클래스를 개발하면, 예기치 않은 인스턴스화나 오버라이드의 미 구현의 걱정이 없다.
  • abstract 키워드를 이용해 인스턴스화 할 수 없는 클래스인 추상 클래스(Abstract Class)를 정의할 수 있다.
  • 추상 클래스는 일부 구현과 함께 인터페이스를 정의하는데 유용하다.
  • 추상 클래스는 추상 메서드를 포함할 수 있다.
    • 코드1
      // 추상 클래스는 인스턴스화 할 수 없습니다.
      abstract class AbstractContainer {
        // 생성자, 필드, 메서드를 정의할 수 있습니다.
      
        // 추상 메서드를 포함할 수 있습니다.
        void updateChildren();
      }
    • 코드2
      abstract class Human {
        void walk();
      }
      
      enum Team { red, blue }
      
      enum XPLevel { beginner, medium, pro }
      
      class Player extends Human {
        String name;
        XPLevel xp;
        Team team;
      
        Player({
          required this.name,
          required this.xp,
          required this.team,
        });
      
        void walk() {
          print('im walking');
        }
      
        void sayHello() {
          print("hi my name is $name");
        }
      }
      
      class Coach extends Human {
        void walk() {
          print('the coach is walking');
        }
      }
      
      void main() {
        var shin = Player(
          name: 'shin',
          xp: XPLevel.medium,
          team: Team.red,
        )
          ..name = 'las'
          ..xp = XPLevel.pro
          ..team = Team.blue
          ..sayHello();
      }

Interface

개요

  • 추상 클래스 중에, 기본적으로 추상메소드만 가지고 있는 것을 "인터페이스"로서 특별 취급 한다.
  • 즉, 인터페이스의 모든 메소드는 추상 메소드여야 한다.
  • 필드를 가지지 않는다.
  • 복수의 인터페이스를 부모로 두는 다중상속 효과가 가능하다.
  • interface 키워드는 Dart 3에 추가되었다.
  • abstract interface 키워드로 사용한다.
  • 인터페이스를 부모로 두는 자식 클래스 정의에 implements 를 사용한다.

주의점

  • 추상클래스를 extends하거나 인터페이스를 implements를 해서 사용하지만 인터페이스를 extends하거나 추상클래스를 implements해 사용하는 것도 가능하다.
  • 자바처럼 제약을 가지고 사용하는 편이 좋다.

0개의 댓글

관련 채용 정보