함수
* 함수 형태
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
'Kotlin' 카테고리의 다른 글
[Android, Kotlin] apply, also, let, with, run의 사용 - 범위 지정 함수 (0) | 2021.11.11 |
---|---|
[Kotlin] 상속 변경자 open, abstract 차이 (0) | 2021.11.11 |
[Kotlin] 접근제한자, 제네릭 (0) | 2021.11.11 |
[Kotlin] 반복문 주요 문법 (0) | 2021.11.11 |
[Kotlin] Array, List, Set, Map (0) | 2021.11.11 |