클래스와 객체
kotiln은 객체 지향 언어로 여러 class(클래스)와 object(객체)를 갖는다. 클래스는 객체를 만드는 틀 같은 개념이고 틀을 이용해서 무수히 많은 객체를 만들 수 있다. 예를 들어 집의 설계도와 재료를 목록을 준비해 두면 이를 이용해 집을 지을 수 있는 것 처럼 말이다.
여기서 클래스는 class , 클래스를 이용해 구현할 대상은 객체 object, 실제 소프트웨어 코드상에서 작성(실체화) 한 객체는 인스턴스 instance라고 한다. 따라서 사실 우리가 코드를 작성 할 때는 class와 instance라고 불러야한다.
클래스 상속
오늘은 kotlin의 클래스의 상속에 대해서 알아 볼 것이다.
클래스 계층구조를 가지는 데 상위 클래스와 하위 클래스의 계층 구조로 구성되어 있다. kotlin에서는 상위 클래스를 superclass. 하위 클래스를 subclass라고 부른다.
상속은 하위클래스가 상위 클래스의 모든 속성과 메서드를 포함하는 것을 상속이라고 한다.
클래스 상속의 장점과 특징
- 클래스 상속을 사용하면 코드를 재사용할 수 있고 프로그램을 더 쉽게 유지 관리할 수 있다.
- 부모 클래스의 속성과 기능은 자식 클래스에서 사용 할 수 있다.
- subclass에 특정한 추가 속성 및 기능을 정의할 수 있다.
- 하위 클래스에서 상위 클래스 멤버를 재정의할 수 있다.
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를 사용해 상속 받을 수 있다.
결론 : 상속을 해주기 위해서는 abstruct
나 open
을 해주어야 함. 상속받으려면 override를 이용해 상속받고 상속받는 클래스 옆에 : 클래스()를 해주어야 한다.
정리가 조금 미흡하지만 나중에 더 알게 되는 내용이나 정리할 것이 있다면 추가로 정리 하겠다.
'android' 카테고리의 다른 글
Android - 리사이클러뷰 뽀개기(2) - 리사이클러뷰 아이템 클릭이벤트, CRUD (0) | 2022.10.27 |
---|---|
Android - 리사이클러뷰 뽀개기(1) - 리사이클러뷰 사용법 (0) | 2022.10.24 |
Android - Coroutine(코루틴) (0) | 2022.10.15 |
Android Manifest 와 4대 컴포넌트 (0) | 2022.10.02 |