[Kotlin] 함수, 클래스, 추상화, 인터페이스
Kotlin

[Kotlin] 함수, 클래스, 추상화, 인터페이스

함수

* 함수 형태

fun 함수명(파라미터: 타입): 반환 타입 {

}

파라미터 , 반환값 없는 경우 안 써도 됨

* 코틀린에서 함수의 파라미터는 기본적으로 immutable 형태 (val)로 , 값의 변경 불가

 

 

클래스

* 생성자(constructor)

primary / secondary 생성자로 구분

1. primary

class Name (value: String) {

init {

~~

  }

}

init : 최초 수행되는 초기화 블록

value 부분이 val 형태면 클래스 스코프 전체에서 해당 파라미터 사용 가능

2. secondary

class Name {

constructor (value: String) {

}

constructor (value: Int) {

}

...

}

파라미터의 타입, 개수에 따라 다르게 지정 가능.

둘 다 사용하지 않는다면 파라미터가 없는 Default 생성자가 됨.

디폴트 생성자에서도 init 블록으로 클래스 초기화 가능. 클래스 생성자 호출 시 init은 자동 수행

* 클래스의 프로퍼티와 메소드는 인스턴스 생성 후 도트 연산자(.)를 사용해 호출 및 사용 가능

var name = Name()

Name.age

Name.funEx()

* 오브젝트 (Object)

object를 사용하면 클래스를 생성자를 통해 인스턴스화 하지 않아도 프로퍼티 및 메소드 호출 및 사용 가능.

object Name {

var name: String = "Hi"

}

Name.name

object는 여러개의 인스턴스를 둘 수 있는 클래스와 달리 앱 전체를 통틀어 1개만 생성됨.

companion object를 사용하면 companion object 블록에 있는 프로퍼티와 메소드만 object 형태로 사용 가능.

class Name {

var name: String = "Hi"

companion object {

var obname: String = "obj"

}

}

Name.obname

var ex = Name()

ex.name

*데이터 클래스

간단한 값의 저장 용도로 사용

data class UserData (val name: String , var age: Int)

var userData = UserData("Hun", 24)

데이터 클래스에서 .toString() 메소드 사용 시 실제 값을 반환. 실제 값 모니터링 시 유용

userdata.toString()

// name=Hun , age=24

copy() 메소드 사용 시 쉽게 값을 복사

var newData = userData.copy()

데이터 클래스도 일반 클래스처럼 init, 코드블록에서의 메소드 생성 등 사용 가능

*상속

부모 클래스로서 상속이 가능하게 하려면 open 키워드를 붙여야함.

open class 부모 {

}

class 자식 : 부모() {

}

부모 클래스의 생성자에 파라미터가 있다면 자식 클래스의 생성자를 통해 값의 전달 가능

open class 부모(value: String) {

}

class 자식(value: String) : 부모(value) {

}

부모 클래스에 세컨더리 생성자가 있다면 자식 클래스의 세컨더리 생성자엥서 super 키워드를 통해 전달 가능

이 때, 괄호 생략 가능

class 자식 : 부모 {

constructor(value: String): super(value)

}

**오버라이드 : 부모 클래스의 프로퍼티, 메소드를 자식 메소드가 같은 이름으로 사용하여 재정의

이 경우에는 부모 클래스에서 오버라이드 될 메소드, 프로퍼티 앞에도 open 키워드를 붙여야함

class 부모 {

open fun over() {

}

}

class 자식 : 부모() {

override fun over() {

//over() 재정의

}

}

*익스텐션 : 이미 만들어져 있는 기존 클래스에 메서드, 프로퍼티를 확장

class User {

var name: String

var age: Int

}

fun intro() {

}

//Extension

User.intro()

 

추상화

추상화 (abstract) : 프로그래밍 구현 전, 클래스 및 클래스 내 프로퍼티, 메소드를 유추해 설계

abstract class Design {

abstract fun drawText()

abstract fun draw()

fun showWindow()

}

class Implements: Design() {

fun drawText() {

//구현

}

fun draw() {

//구현

}

}

 

 

인터페이스

인터페이스 : 추상화와 달리 실행 코드가 한 줄도 존재하지 않고 메소드의 이름만 가진 추상 클래스.

상속과 달리 생성자를 호출하지 않고 인터페이스의 이름만 지정해줌.

interface InterfaceKotlin {

var variable: String

fun get()

fun set()

}

class KotlinImple: InterfaceKotlin {

override var variable: String = "init value"

override fun get() {

//구현

}

override fun set() {

//구현

}

}

클래스 상속 형태가 아닌 소스 코드에서 직접 구현해야 할 일이 있을 때 object 키워드 사용. 실제로 자주 사용하는 형태

var kotlinImpl = object: InterfaceKotlin {

override var variable: String = "init value"

override fun get() {

//구현

}

override fun set() {

//구현

}

}

 

 

 

Reference : https://book.naver.com/bookdb/book_detail.nhn?bid=18006551

 

이것이 안드로이드다 with 코틀린

최신 버전에 맞춰 완벽하게 실습할 수 있는 코틀린 안드로이드 앱 개발 도서!코틀린, 안드로이드, 안드로이드 스튜디오! 코틀린으로 안드로이드 앱을 개발하려면 살펴봐야 할 사항이 많습니다.

book.naver.com