[Kotlin/코틀린] 7. 상속, 오버라이딩(Overriding), 오버로딩(Overloading), 인터페이스(Interface)

2023. 12. 11. 21:55스파르타/Kotlin

3주차 '객체 지향 프로그래밍의 기초' 강의 내용 정리

 

7-1. 상속

 

 

클래스를 상속한다는 것은 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나이다.

코틀린에서는 다른 언어들과 달리 기본적으로 모든 클래스는 상속이 막혀있다.

클래스를 상속할 때 open 키워드를 사용해야 한다.

이는 무분별한 상속으로 인해 예상치 못한 흐름을 방지하기 위한 조치이다.

공통적인 요소들이 있다면 부모/자식 클래스를 구분해서 상속관계를 만들 수 있다.

코틀린에서는 다른 언어들과 달리 생략된 final 키워드로 기본적으로 상속을 막아두었다.

 

 

상속이 필요한 이유

다형성을 구현할 수 있다.

클래스의 내용을 변경해야 하는 경우 부모 클래스만 변경하는 것으로 유지보수의 공수를 줄일 수 있다.

 

 

 

 


 

 

 

7-2. 오버라이딩 (Overriding)

 

상속받은 부모 클래스의 정보(프로퍼티)나 행위(메소드)를 자식 클래스에서 재설계할 수 있다.

주로 부모 클래스의 행위(메소드)를 재설계한다.

이러한 행위를 오버라이딩(Overriding) 이라고 한다.

오버라이딩 (Overriding) 은 객체 지향 프로그램에서 다형성을 지원하며,

코드의 유연성을 높여주는 중요한 기능 중 하나이다.

 

 

오버라이딩이 필요한 이유

공통적인 내용을 부모클래스에서 관리하는 것은 좋지만, 자식 클래스의 개성을 살릴 수 있다.

OOP 관점에서는 클래스들간의 관계를 만들고, 일관성을 유지하는 목표를 가진다.

만약 필요한 기능이 있을 때마다 별도의 이름으로 만들게 된다면 일관성을 유지하기 어렵다.

프로그램에 문제가 생기지는 않으나 재사용성이 떨어지기 때문에 유지보수가 어렵다.

 

 

오버라이딩 단축키

상속받은 메소드를 오버라이딩 하고 싶을 때 자식 클래스 내부에서 단축키를 입력한다.

 

[오버라이딩 단축키]
Control + O (Windows)
Command + O (Mac)

 

 

 

 

 

 

 


 

 

7-3. 오버로딩 (Overloading)

 

동일한 이름의 메소드나 함수를 여러 개 정의하는 것을 말한다.

메소드나 함수의 이름은 동일하나, 매개변수의 개수나 자료형이 달라야 한다.

반환자료형(반환형)은 오버로딩에 영향을 주지 않는다.

 

 

 

오버로딩이 필요한 이유

오버로딩을 통해 메소드의 이름을 일관되게 유지할 수 있다.

사용자는 동일한 기능을 하는 메소드를 호출하더라도 자신이 원하는 데이터 타입에 맞춰서 호출할 수 있다.

.

 

 

 


 

 

7-4. 인터페이스 (Interface)

 

인터페이스는 추상메소드만 작성하는게 원칙이지만 최근에는 추상메소드가 아니여도 괜찮다.

하지만 인터페이스는 추상메소드를 작성하는 습관을 가지는 것이 좋다.

코틀린에서는 반드시 부모클래스는 한개라서 모두 상속으로 처리할 수 없다.

따라서 근본적인 공통점을 상속 받고, 추가적인 기능들은 인터페이스로 추가할 수 있다.

 

 

아래의 예시처럼 메소드의 로직이 존재하지 않고 이름만 존재할 때 *추상 메소드라고 한다.

interface 인터페이스이름 {
    fun 메소드이름()
}

 

 

 

 

인터페이스가 필요한 이유

클래스 간의 관계를 정의하고, 상속의 한계를 극복하여 유연하게 확장 가능한 코드를 작성하는데 도움이 된다.

인터페이스를 통해 공통된 메소드를 정의하면, 이를 구현하는 여러 클래스들이 해당 메소드를 재사용할 수 있다.

이는 코드의 재사용성을 높이고 유지보수를 용이하게 만들어준다.

인터페이스는 객체 지향 프로그래밍에서 클래스 간의 관계를 성공적으로 정의하고,

코드의 유연성과 확장성을 높이는데 중요한 도구라고 할 수 있다.