본문 바로가기

android

Kotlin 추상화 & 상속

클래스와 객체

kotiln은 객체 지향 언어로 여러 class(클래스)와 object(객체)를 갖는다. 클래스는 객체를 만드는 틀 같은 개념이고 틀을 이용해서 무수히 많은 객체를 만들 수 있다. 예를 들어 집의 설계도와 재료를 목록을 준비해 두면 이를 이용해 집을 지을 수 있는 것 처럼 말이다.

여기서 클래스는 class , 클래스를 이용해 구현할 대상은 객체 object, 실제 소프트웨어 코드상에서 작성(실체화) 한 객체는 인스턴스 instance라고 한다. 따라서 사실 우리가 코드를 작성 할 때는 class와 instance라고 불러야한다.

 

클래스 상속

 

오늘은 kotlin의 클래스의 상속에 대해서 알아 볼 것이다.

클래스 계층구조를 가지는 데 상위 클래스와 하위 클래스의 계층 구조로 구성되어 있다. kotlin에서는 상위 클래스를 superclass. 하위 클래스를 subclass라고 부른다.

상속은 하위클래스가 상위 클래스의 모든 속성과 메서드를 포함하는 것을 상속이라고 한다.

클래스 상속의 장점과 특징

  1. 클래스 상속을 사용하면 코드를 재사용할 수 있고 프로그램을 더 쉽게 유지 관리할 수 있다.
  2. 부모 클래스의 속성과 기능은 자식 클래스에서 사용 할 수 있다.
  3. subclass에 특정한 추가 속성 및 기능을 정의할 수 있다.
  4. 하위 클래스에서 상위 클래스 멤버를 재정의할 수 있다.

Android 클래스의 상속

android 클래스의 계층구조

kotiln은 모든 클래스 위에 Any라는 클래스가 있고 안드로이드의 경우 그 아래에 View 클래스 이후 TextView ... 순으로 나열 되어있다!

기본 클래스 & 서브클래스

다음으로 추상클래스에 대해서 알아 볼 것이다.

추상 클래스란?
추상클래스는 완전히 구현되지 않아서 인스턴스를 만들 수 없는 클래스이다. 여러 함수와 변수를 정의 하지만 이를 값을 저장하지 않을 수 있게 하고 자료형만 선언해 놓을 수 있게한다. 구체적인 사항은 서브클래스에서 구현하게 함으로써 추상클래스를 상속받는 서브클래스들은 공통적인 변수와 함수를 포함한다는 것에서 장점이 있다.

kotlin에서 추상클래스는 클래스 앞에 abstract 키워드를 적어 사용한다.

 

abstract class human(private var age: Int){
    abstract val gender: String
    abstract val phoneNumber: Int
}

위의 코드로 추상클래스를 만들었으므로 이를 상속받을 서브클래스를 만들어 보겠다.

 

class Me(age: Int) : human(age)  {
    override val gender = man
    override val phonNumber = 01012345678

 

서브클래스는 매개변수를 상속받으려면 :기호와 매개변수이름을 참조하고 이후 추상클래스를 상속받는 변수는 override하여 재정의 할 수 있다. 여기서 override는 부모클래스에서 선언한 것을 자식클래스에서 동일한 형태로 구현한 것을 말한다.

이제 구현한 클래스를 인스턴스화 해보겠다.

 

fun main(){
    val me = Me(22)

    with (me) {
        println("Me=======")
        println("성별: ${gender}")
        println("나이: ${age}")
        println("전화번호: ${phoneNumber}")
    }

 

with구문을 사용하면 ()안의 인스턴스 객체로 {}안의 작업을 모두 실행 할 수 있다. 따라서 원래 인스턴스.변수명 이런식으로 사용해야 할 것을 그냥 인스턴스명만 적어 주면 된다.

 

아까 봤던 Me class를 상속 해줄 수 있게 하려면 Me 클래스 앞에 open구문을 사용하면 된다.
그리고 이후에 상속받는 클래스는 같은 방식으로 상속받으려면 같은 방식으로 override를 사용해 상속 받을 수 있다.

 

결론 : 상속을 해주기 위해서는 abstructopen을 해주어야 함. 상속받으려면 override를 이용해 상속받고 상속받는 클래스 옆에 : 클래스()를 해주어야 한다.

 

 

정리가 조금 미흡하지만 나중에 더 알게 되는 내용이나 정리할 것이 있다면 추가로 정리 하겠다.