[Kotlin 객체지향 (2)] 추상클래스(Abstract Class)와 인터페이스(Interface)
Language/Kotlin

[Kotlin 객체지향 (2)] 추상클래스(Abstract Class)와 인터페이스(Interface)

728x90
반응형

추상클래스  vs 인터페이스

 

 공통점

  • 설계 명세공통의 기능을 구현

 

차이점

  • 추상클래스
    • → (상속) → 하위클래스
    • 일반적인 객체를 생성하는 방법으로 인스터스화 하는 대신 상속받아 사용 (상속을 위해 open키워드를 사용할 필요 없음)
    • 하위클래스는 상속을 하나만 허용
    • 일반 프로퍼티/메서드에는 초기값 저장할 수 있고, abstract 키워드 붙은 추상 프로퍼티/메서드는 하위 클래스에서 재정의해서 사용해야함)
    • 상위클래스가 정의한 내용이 불완전하면 상속받은 하위클래스도 그대로 영향을 받음
  • 인터페이스
    • → (구현) → 구현클래스
    • 인터페이스는 클래스가 아니라 상속받아 사용하는것 아니고 구현함
    • 상속은 하나면 허용했으나, 인터페이스는 원하는 만큼 구현클래스에 붙여서 필요한 메서드를 구현해내면 됨
    • 프로퍼티에 상태정보를 저장할 수 없음
    • 상속에 비해 구현클래스와 강한 연관을 갖지 않음(하위클래스에 프로퍼티와 메서드를 전하지 않음)
자바 vs 코틀린
java에서 상속은 extends 구현은 implement로 키워드를 구현하고 있지만, 코틀린에서는 둘다 콜론(:)을 통해 구현함
▷ 코틀린의 경우 기본적으로 인터페이스의 메스드에 구현 내용을 넣을수 없지만, 자바는 불가 (자바8 이후 버전에서는 default 키워드를 통해 구현 내용을 넣을 수 있게 됨)


 

추상클래스

 

기본예제

 

 

인터페이스

 

기본예제

 

여러 인터페이스 구현 

 

인터페이스 위임

 

 

 

 

 

 

 

 

추상클래스

추상메서드와 추상클래스

  • 추상 메서드는 구현되지 않은 메서드를 의미한다.
  • 추상 클래스는 추상 메서드를 가지고 있는 클래스를 의미한다.
  • 추상 클래스는 구현 되지 않은 추상 메서드를 가지고 있기 때문에 완벽한 설계도라고 할 수 없다.
  • 이 때문에 추상클래스를 통해서는 객체를 생성할 수 없다.

추상클래스의 상속

  • 추상 클래스는 완벽한 클래스가 아니기 때문에 객체를 생성할 수 없다.
  • 객체를 생성하려면 추상 클래스를 상속받은 클래스를 만들고 추상 메서드를 구현하여 자식 클래스를 통해 객체를 생성해야 한다.
  • 추상 클래스의 목적은 자식 클래스에서 메서드를 Overriding을 하게 하기 위한 강제성을 부여하기 위함이다.

 

인터페이스

  • Kotlin은 다중 상속을 지원하지 않는다.
  • 이 때문에 자기 타입의 변수나 부모형 타입 변수에만 담을 수 있다.
  • 만약 생성된 객체의 주소 값을 다양한 타입에 변수에 담을 수 있도록 한다면 인터페이스를 활용하면 된다.
  • 인터페이스는 클래스가 아니므로 객체를 생성할 때 사용할 수 없다.
  • 단, 클래스는 한 개 이상의 인터페이스를 구현할 수 있으며 생성된 객체는 구현한 인터페이스형 참조 변수에 담을 수 있다.
  • 인터페이스에는 추상 메서드와 일반 메서드 모두를 구현해서 사용할 수 있다.
  • 인터페이스는 추상 클래스와 목적이 비슷하지만 하나의 클래스에 여러 인터페이스를 구현할 수 있는 장점을 가지고 있다.

 

 

 

 

 

728x90
반응형