반응형
- 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를 상속받아 사용이 가능하다
- Interface 안에서 구현부가 있는 함수는 open 함수로 간주되며 구현부가 없으면 abtract 함수로 간주된다.
요약
- 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) ~~
- As Ex)
반응형
'Backend 언어 > Kotlin' 카테고리의 다른 글
객체에 관하여 (0) | 2020.10.17 |
---|---|
변수에 관하여 (0) | 2020.10.17 |
고차 함수 (0) | 2020.10.11 |
접근 범위와 접근 제한 (0) | 2020.10.11 |
프로젝트 구조 (0) | 2020.10.11 |