Kotiln 문법: "추상화"

SHY(code poet)·2024년 2월 23일

✨Kotlin에 관하여✨ 

목록 보기
23/36

추상화(abstract): 클래스 개념 설계도구

  • 프로그래밍을 하기 전 개념 설계를 하는 단계에서는 클래스의 이름과 클래스 안에 있음 직한 기능을 유추해서 메서드 이름으로 먼저 나열한다.
  • 이 때 명확한 코드는 설계 단계에서 메서드 블록 안에 직접 코드를 작성하는데, 그렇지 않은 경우에는 구현 단계에서 코드를 작성하도록 메서드의 이름만 작성한다.
  • 이것을 추상화(Abstract)라고 하며 abstract 키워드를 사용해서 명시한다.
    구현 단계에서는 추상화된 클래스를 상속받아서 아직 구현되지 않은 부분을 마저 구현한다.
    Q. 상속안받고 그냥 asbstract 지운 후, 바로 구현 하면 안되나?
    A. 앞으로 상속받을 자식 클래스의 특징에 따라 코드가 결정될 가능성이 있다면 해당 기능도 모두 abstract 키워드로 추상화한다. 즉, 변화가능한 대상이 있을 경우, 잠시 추상화 보류 시켜둔다는 의미. 그래서 “객체지향”인 것이다.

abstract class Design {
abstract fun drawText()
abstract fun draw()
fun showWindow() {
// code
}
}

class Implements: Design(){
fun drawText() {
// 구현 코드
}
fun draw() {
// 구현 코드
}
}

  • 다음과 같이 추상화된 Animal 클래스를 만들고 동물이 사용할 것 같은 기능 중에 walk와 move를 설계한다고 가정해보라.

abstract class Animal {
fun walk(){
Log.d("abstract", "걷습니다.")
}
abstract fun move()
}

  • walk는 명확하게 걸어가는 행위이지만 move는 어떤 동물이냐에 따라서 달라질 수 있다.
    예를 들어 새는 날아가겠지만 고래는 수영을 한다.
    이렇게 ☆앞으로 상속받을 자식 클래스의 특징에 따라 코드가 결정될 가능성이 있다면 해당 기능도 모두 abstract 키워드로 추상화한다.☆
    그리고 실제 구현 클래스는 이 추상 클래스를 상속받아서 아직 구현되지 않은 추상화되어 있는 기능을 모두 구현해준다.
    추상 클래스는 독립적으로 인스턴스화할 수 없기 때문에 구현 단계가 고려되지 않는다면 잘못된 설계가 될 수 있다.

  • 위에서 잠깐 안드로이드의 Activity 클래스를 언급했는데, Activity도 수많은 클래스를 상속받아 만들어진다.
    이 Activity가 상솓받는 클래스 중에 최상위에 Context라는 클래스가 있는데, 최상위 클래스인 Context가 바로 abstract로 설계되어 있다.

    class Bird: Animal(){
    override fun move(){
    Log.d("abstract", "날아서 이동합니다.")
    }
    }

profile
진정한 개발자는 코드를 두려워하지 않는다. 오히려 코드가 그를 두려워한다.

0개의 댓글