티스토리 뷰
- 저자
- 강성윤
- 출판
- 이지스퍼블리싱
- 출판일
- 2022.12.16
p106~126
04 코틀린 객체지향 프로그래밍
04-1 클래스와 생성자
클래스 선언
클래스의 멤버는 생성자, 변수, 함수, 클래스로 구성된다. 코틀린의 생성자는 constructor 라는 키워드로 선언하는 함수다. 클래스 안에 다른 클래스를 선언할 수도 있다.
class Human {
var nickname = "Casey"
constructor(nickname: String) {
this.nickname = nickname
}
fun myFun() {
println("nickname: $nickname")
}
class myClass {}
}
fun main(args: Array<String>) {
println("Hello World!")
val human = Human("casey")
human.myFun()
}
클래스의 생성자는 주 생성자와 보조 생성자로 구분된다.
주 생성자
주 생성자는 constructor 키워드로 클래스 선언부에 선언한다. 필수는 아니며 한 클래스에 하나만 가능하다. consturctor 키워드는 생략가능하다. 개발자가 선언하지 않으면 컴파일러가 매개변수가 없는 주 생성자를 자동으로 추가한다.
주 생성자의 본문 - init 영역
init 키워드를 이용해 주 생성자의 본문을 구현할 수 있다.
생성자의 매개변수를 클래스의 멤버 변수로 선언하는 방법
주 생성자의 매개변수는 생성자 안에서만 사용할 수 있는 지역 변수지만 매개변수를 var나 val 키워드로 선언하면 클래스의 멤버 변수가 된e다.
package com.example.test
class Human (val nickname: String, val cnt: Int) {
fun myFun() {
println("nickname: $nickname, cnt: $cnt")
}
}
fun main() {
val human = Human("Casey", 23)
human.myFun()
}
원래 함수는 매개변수 선언 시, var나 val 키워드를 추가할 수 없는데, 주 생성자에서만 유일하게 var나 val 키워드로 매개변수를 선언할 수 있으며 이렇게 하면 클래스의 멤버 변수가 된다.
보조 생성자
클래스를 선언할 때 둘 중 하나만 선언하면 문제가 없지만, 만약 주 생성자와 보조 생성자를 모두 선언한다면 반드시 생성자끼리 연결해주어야 한다.
보조 생성자는 객체를 생성할 때 호출되며, 이때 클래스 내에 주 생성자가 있다면 this() 구문을 이용해 주 생성자를 호출해야 한다.
package com.example.test
class Human (nickname: String) {
constructor(nickname: String, cnt: Int): this(nickname) {
}
}
fun main() {
val human = Human("Casey", 43)
}
constructor
가 붙은 보조 생성자에서 this(nickname)
을 통해 주 생성자를 호출한다.
package com.example.test
class Human (nickname: String) {
constructor(nickname: String, cnt: Int): this(nickname) {
}
constructor(nickname: String, cnt: Int, emailAddr: String): this(nickname, cnt) {
}
}
fun main() {
val human = Human("Casey", 43, "casey@mail.com")
}
04-2 클래스를 재사용하는 상속
상속과 생성자
클래스 상속 형식
open class Upper { // 상속할 수 있도록 open 키워드 사용
}
class Lower: Upper() { // Upper 클래스를 상속받아 Lower 클래스 선언
}
클래스를 선언할 때 다른 클래스를 참조해서 선언하는 것을 상속(inheritance)라고 한다. 상속받기 위해 클래스 선언부에 콜론(:)과 함께 상속받을 클래스 이름을 입력한다. 기존 클래스를 이렇게 재사용 할 수 있다.
상속 대상이 되는 클래스를 상위 클래스라고 하고, 상속받는 클래스를 하위 클래스라고 한다. 코틀린의 클래스는 기본적으로 다른 클래스가 상속할 수 없는데, open 키워드를 사용하여 상속을 허용하도록 선언한다.
상위 클래스를 상속받은 하위 클래스의 생성자에서는 상위 클래스의 생성자를 호출해야 한다.
매개변수가 있는 상위 클래스의 생성자 호출
open class Upper (nickname: String){ // 상속할 수 있도록 open 키워드 사용
}
class Lower(nickname: String): Upper(nickname) { // Upper 클래스를 상속받아 Lower 클래스 선언
}
하위 클래스에 보조 생성자만 있는 경우 상위 클래스의 생성자 호출
open class Upper (nickname: String){ // 상속할 수 있도록 open 키워드 사용
}
class Lower: Upper {
constructor(nickname: String): super(nickname){
}
}
//NOTE super 키워드:
오버라이딩 - 재정의
상속이 주는 최고의 이점은 상위 클래스에 정의된 멤버(변수, 함수)를 하위 클래스에서 자신의 멤버처럼 사용할 수 있다는 것이다.
상위 클래스에 선언된 변수나 함수를 같은 이름으로 하위 클래스에서 다시 선언하는 것을 오버라이딩(overriding)이라고 한다. 변수도 오버라이딩 기법으로 재정의 할 수 있지만, 주로 함수를 재정의하는 데 사용한다.
//TODO: 오버라이딩 예 소스코드 추가
이렇게 상위에 선언된 변수나 함수의 이름과 똑같은 이름으로 하위 클래스에서 다시 선언하는 것이 오버라이딩이다. 코틀린에서 오버라이딩 규칙은 상위 클래스에서 오버라이딩을 허용할 변수나 함수 선언 앞에 open 키워드를 추가하는 것이다. 그렇지 않으면 하위 클래스에서 재정의할 수 없다. 그리고 open 키워드로 선언한 변수나 함수를 하위 클래스에서 재정의할 때는 반드시 선언문 앞에 override라는 키워드를 추가해야 한다.
접근 제한자 (visibility modifier)
접근 제한자란 클래스의 멤버를 외부의 어느 범위까지 이용하게 할 것인지를 결정하는 키워드다.
코틀린에서 제공하는 접근 제한자: public, internal, protected, private
04-3 코틀린의 클래스 종류
데이터 클래스
data 키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어 준다. VO(value-object)클래스를 편리하게 이용할 수 있게 해준다.
VO(value-object):
오브젝트 클래스
컴패니언 클래스
'IT > Android' 카테고리의 다른 글
//TODO [안드로이드] Lifecycle | 액티비티 스택 (0) | 2023.02.06 |
---|---|
[안드로이드] 샘플 어플리케이션 만들기 (0) | 2023.02.06 |
[Kotlin] 코틀린 시작하기 | 언어 소개 | 변수 함수 | 조건문 반복 (0) | 2023.02.04 |
[Kotlin] Android Studio에서 main 함수 실행 (0) | 2023.02.01 |
[안드로이드] 안드로이드 앱의 기본 구조 | 책 요약 (0) | 2023.01.31 |
- Total
- Today
- Yesterday
- 수학 #다이나믹프로그래밍 #게임이론
- 클라우드 네이티브 애플리케이션 디자인 패턴
- 알고리즘
- InShot
- 레포지토리패턴
- 안드로이드
- 코딩테스트
- Repository pattern
- 코틀린
- VLLO
- Vlogr
- 내채공
- gitlab_ssh_permission_denied
- 청년내일채움공제
- 동기메시징기술
- 프로그래머스
- 맥북개발환경
- TKD
- 디자인패턴
- 내채공만기
- 통신패턴
- https://kotlinlang.org/docs/object-declarations.html
- Kotlin
- 쇼코의미소
- EH
- android
- AdobeClip
- 아이폰영상편집어플후기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |