Backend 언어/Kotlin

Class에 관하여

민초부 2020. 10. 11. 18:29
반응형

- Class란 : 값(property)와 그 값을 사용하는 기능(function)들을 묶어 놓은 것이다. 그리고 이러한 클래스를 통해 생성된 것이 객체, instance임 

- 함수 생성자 함수 호출 시 function을 실행해주고 싶으면 fun 없이 ' init { ~~ } ' 와 같이 처리해주면 된다.

 

- 기본적으로 생성자란 class를 선언해줄 때 필요한 변수들을 넣어주는 것을 말함 

   - 이와 같이 보조 생성자를 선언해주면 Person('황선재')로 하면 constructor를 타서 instance가 생성이 된다.

 

 

- class 상속

  • 특정 클래스를 다른 클래스가 상속 받을 수 있게 해주려면 class앞에 open을 써주면 된다.
  • 유의할 점
    • sub class는 super class의 property와 같은 이름의 property를 가질 수 없다. 
    • sub class가 생성될 때 super class의 생성자까지 호출해줘야 한다. 

<Override, Abstract, Interface>

- Override : 상속받은 class의 function을 받아 개발자가 원하는 대로 customize하는 것

      - 이것 역시 super class에서 override를 허용할 function 앞에 open을 써주면 되고 sub class에서는 fun 앞에 override를 작성해주면 된다. 

- Abstract : super class앞에 abstract를 붙여주면 sub class는 super class의 abstract가 붙어있는 function은 반드시 override해줘야 쓸 수 있다. 

 

- Interface : 기본적으로는 추상함수로만 이루어져 있는 class를 Interface라고 하지만 하지만 kotlin에서는 추상 함수, 일반 함수 모두 가질 수 있다. 

  • 특징
    • Interface 안에서 구현부가 있는 함수는 open 함수로 간주되며 구현부가 없으면 abtract 함수로 간주된다. 
      즉 별도의 키워드가 없어도 Interface가 가지고 있는 모든 function을 override하여 사용가능하다
    • 여러 Interface를 상속받아 사용이 가능하다

요약 

  • Override : 이미 구현이 끝난 함수의 기능을 Subclass에서 변경하는 것
  • Abstract (추상화) : 형식만 선언하고 실제의 구현은 sub class에 일임하는 것
  • Interface : 서로 다른 기능들을 여러 곳에 상속시켜줘야할 때 주로 사용함 

 

<Class의 다형성>

  • 콜라, 사이타, 환타 등이 있는데 하나의 음료라는 범주로 묶는 개념 
    • super class인 Drink가 있고 sub class인 Coke, Juice가 있을 때 
    • var a: Drink = Coke() / var b: Coke = Coke() 이렇게 2가지 방법으로 선언해줄 수 있음 
      Drink로 선언하면 대신 Coke에서 Drink를 상속받아 추가로 선언해준 fun은 사용하지 못 하고 후자는 전부 사용이 가능하다. 
    • 이렇게 상위 super class type으로 선언해주는 것을 up-casting이라고 한다. 
    • 반대의 경우는 down-casting이라 한다. 
      Ex) As, Is
      • As Ex)
        var a : Drink = Coke()
        var b = a as Coke 
      • Is Ex)
        var a: Drink = Coke()
        if (a is Coke) ~~ 
반응형

'Backend 언어 > Kotlin' 카테고리의 다른 글

객체에 관하여  (0) 2020.10.17
변수에 관하여  (0) 2020.10.17
고차 함수  (0) 2020.10.11
접근 범위와 접근 제한  (0) 2020.10.11
프로젝트 구조  (0) 2020.10.11