[Kotlin 공부 9일차] 인터페이스

2024. 12. 17. 21:41·Kotlin 정리
목차
  1. 1. 인터페이스란?
  2. 1-1 인터페이스에서 프로퍼티 선언
  3. 1-2 Enum에서의 인터페이스 구현
  4. 1-3 여러 개의 인터페이스 구현
  5. 1-4 단일 추상 메서드 변환
  6. 2. 총정리
반응형

1. 인터페이스란?

인터페이스는 클래스가 무엇을 하는지 기술하지만 그 일을 어떻게 하는지는 기술하지 않는 일종의 프로토타입의 역할을 합니다.

  • 클래스의 형태를 제시하지만 일반적으로 구현은 포함하지 않는다.
  • 객체의 동작을 지정하지만 어떻게 수행하는지에 대한 세부 사항은 제시하지 않는다.
  • 인터페이스를 구현하는 클래스는 해당 인터페이스가 정의한 모든 메서드를 구현해야 합니다.

코틀린에서 인터페이스를 선언하고 사용하는 기본 문법은 다음과 같습니다.

interface Animal {
    fun sound(): String
    fun move(): String
}

class Dog : Animal {
    override fun sound() = "왈왈!"
    override fun move() = "사족보행";
}

인터페이스를 구현하는 클래스를 정의하려면 클래스 이름 뒤에 콜론(:) 과 인터페이스 이름을 넣으면 됩니다.

이 때 Animal은 sound(), move()라는 함수를 선언하지만 아무 구현도 제공하지 않고

이 인터페이스를 구현하는 클래스는 인터페이스가 선언한 모든 멤버를 구현하는 본문을 제공해야 합니다.

  • interface 키워드를 사용해 인터페이스를 선언한다.
  • sound(), move()는 구현이 없는 추상메서드입니다.
  • Dog는 Animal 인터페이스를 구현하고 , 추상메서드를 override해 구현합니다.

 

1-1 인터페이스에서 프로퍼티 선언

인터페이스에서 프로퍼티 또한 선언할 수 있습니다. 

interface Vehicle {
    val speed: Int // 추상 프로퍼티
    val type: String
        get() = "Vehicle" // 기본 구현 제공
}

class Car : Vehicle { 
    override val speed: Int = 120 // 추상 프로퍼티를 오버라이드
}

이 때 인터페이스를 구현하는 클래스는 프로퍼티 또한 오버라이드해야합니다.

  • Vehicle 인터페이스는 spped라는 추상 프로퍼티를 정의한다.
  • Car 클래스는 spped를 오버라이드해 구체적인 값을 제공한다.

 

1-2 Enum에서의 인터페이스 구현

Enum 또한 인터페이스 구현이 가능합니다.

interface State {
    fun action(): String
}

enum class OrderState : State {
    PROCESSING {
        override fun action(): String = "주문 진행중입니다."
    },
    COMPLETED {
        override fun action(): String = "주문이 완료되었습니다."
    },
    CANCELLED {
        override fun action(): String = "주문이 취소되었습니다."
    }
}
  • OrderState는 Enum 클래스로 State 인터페이스를 구현한다.
  • 각 enum의 상수는 action() 메서드를 오버라이드해 고유한 동작을 제공한다.

 

1-3 여러 개의 인터페이스 구현

코틀린은 여러 개의 인터페이스 구현이 가능합니다.

interface A {
    fun methodA() 
}

interface B {
    fun methodB() 
}

class C : A, B {
    override fun methodA() {
        println("메서드 A")
    } 
    override fun methodB(){
        println("메서드 B")
    }
}

이 때도 마찬가지로 두 인터페이스에 정의된 메서드를 모두 오버라이드 해야합니다.

 

주의할 점은 두 개의 인터페이스에 동일한 시그니처가 존재할 경우 super<인터페이스명> 형식으로 어느 인터페이스의 메서드를 호출할지 지정해주어야 합니다.

interface A {
    fun show() {
        println("나는 인터페이스 A")
    }
}

interface B {
    fun show() {
        println("나는 인터페이스 B")
    }
}

class C : A, B {
    override fun show() {
        // 명시적으로 어느 인터페이스의 구현을 호출할지 정해야 함
        super<A>.show()
        super<B>.show()
    }
}

 

 

 

1-4 단일 추상 메서드 변환

단일 추상 메서드는 인터페이스가 단 하나의 추상메서드를 가지고 있는 경우를 의미하는데

코틀린에서는 SAM(Single Abstract Method) 인터페이스를 정의하는 fun interface라는 문법이 존재합니다.

fun interface Delivery {
    fun deliver()
}

SAM 인터페이스는 일반적으로 클래스 방식을 통해 구현하는 방식과

람다를 사용하는(SAM 변환) 방식으로 구현이 가능합니다.

 

클래스 방식

class FoodDelivery() : Delivery {
    override fun deliver() {
        println("음식이 고객님께 배달되고 있습니다!")
    }
}

fun startDelivery(delivery: Delivery) {
    delivery.deliver()
}

fun main() {
    val foodDelivery = FoodDelivery()
    startDelivery(foodDelivery)
}

 

람다 방식

fun startDelivery(delivery: Delivery) {
    delivery.deliver()
}

fun main() {
    val quickDelivery = Delivery {
        println("빠른 배달을 시작합니다..")
    }
     startDelivery(quickDelivery)
}
  • 클래스 방식 : 클래스를 통해 Delivery 인터페이스를 구현
  • 람다 방식 : 단일 추상 메서드만을 가질 때 람다 표현식으로 구현 가능

 

 

2. 총정리

  • 인터페이스는 추상메서드, 프로퍼티를 선언할 수 있으며, 이를 구현하는 클래스에서 구현해야함
  • Enum 클래스도 인터페이스 구현이 가능
  • 여러 인터페이스를 동시에 구현할 수 있으며 충돌 시 명시적 해결이 필요
  • 단일 추상 메서드 변환을 통해 람다 표현식으로 간단히 인터페이스 구현이 가능

 

 

 

 

반응형

'Kotlin 정리' 카테고리의 다른 글

[Kotlin 공부 11일차] 추상 클래스, 업캐스트  (1) 2025.01.06
[Kotlin 공부 10일차] 상속, 기반 클래스 초기화  (0) 2024.12.20
[Kotlin 공부 8일차] 널이 될 수 있는 타입  (0) 2024.12.12
[Kotlin 공부 7일차] 데이터 클래스, 구조 분해 선언  (1) 2024.12.10
[Kotlin 공부 6일차] 오버로딩, when  (0) 2024.12.06
  1. 1. 인터페이스란?
  2. 1-1 인터페이스에서 프로퍼티 선언
  3. 1-2 Enum에서의 인터페이스 구현
  4. 1-3 여러 개의 인터페이스 구현
  5. 1-4 단일 추상 메서드 변환
  6. 2. 총정리
'Kotlin 정리' 카테고리의 다른 글
  • [Kotlin 공부 11일차] 추상 클래스, 업캐스트
  • [Kotlin 공부 10일차] 상속, 기반 클래스 초기화
  • [Kotlin 공부 8일차] 널이 될 수 있는 타입
  • [Kotlin 공부 7일차] 데이터 클래스, 구조 분해 선언
여포개발자
여포개발자
여포개발자
어제보다 오늘 더
여포개발자
전체
오늘
어제
  • 분류 전체보기 (141)
    • Backend (41)
      • 프로젝트 (18)
      • MSA 전환 (10)
      • spring (6)
      • JPA (7)
    • JAVA (11)
    • Kotlin 정리 (11)
    • 알고리즘 (59)
      • 프로그래머스 LV0 (5)
      • 프로그래머스 LV1 (12)
      • 프로그래머스 LV2 (17)
      • 프로그래머스 LV3 (8)
      • 백준 (14)
      • 소프티어 (3)
    • 네트워크 (3)
    • Docker (3)
    • SQL (5)
    • Kafka (6)
    • 일상 (1)
    • .NET (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 모니터링
  • #프로그래머스
  • 오블완
  • #JAVA #프로그래머스
  • Kotiln
  • #JAVA #프로그래머스 #LV1 #모두화이팅
  • 자바 #백준
  • docker
  • 네트워크
  • 프로그래머스LV1
  • MSA
  • JAVA #프로그래머스 #LV0
  • #JAVA #프로그래머스 #LV1
  • HTTP
  • 프로젝트
  • java
  • Spring
  • docker #MySQL
  • 티스토리챌린지
  • TroubleShooting #JPA
  • JPA
  • #프로그래머스 #자바
  • 프로그래머스
  • Kotlin
  • #JPA #JAVA
  • 백준

최근 댓글

최근 글

반응형
hELLO· Designed By정상우.v4.5.2
여포개발자
[Kotlin 공부 9일차] 인터페이스
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.