안드로이드 네이티브 앱 개발 공부를 위해 Kotlin의 기본적이면서도 중요한 문법들을 정리해보았다. 이 글은 앞서 작성한 클래스에 이어지는 내용이다.
자바의 static 대신에 사용되는 것으로 정적인 메소드나 변수를 선언할 때 사용한다.
class Book private constructor(val id: Int, val name: String){
companion object {
val myBook = "name"
fun create() : Book = Book(id: 0, myBook)
}
}
val book : Book = Book.Companion.create() //Book.create()로 작성가능
println("${book.id} and ${book.name})
companinon object의 이름을 설정할 수도 있다.
class Book private constructor(val id: Int, val name: String){
companion object BookFactory {
val myBook = "name"
fun create() : Book = Book(id: 0, myBook)
}
}
val book : Book = Book.BookFactory.create() //Book.create()로 작성가능
println("${book.id} and ${book.name})
companion object는 상속을 받을 수도 있다.
class Book private constructor(val id: Int, val name: String){
companion object BookFactory: IdProvider {
//override 필요!!!!
override getId() : Int {
return 1
}
val myBook = "name"
fun create() : Book = Book(getId(), myBook)
}
}
interface IdProvider {
fun getId(): Int
}
object는 다른 클래스들과 다르게 PersonFactory 객체는 앱을 실행할 때 단 한번 생성되는 싱글톤 패턴을 적용한다.
object PersonFactory{
val people : MutableList<Person> = mutableListOf<Person>()
fun makePerson(name: String, age: Int) : Person {
val person = Person(name, age)
people.add(person)
return person
}
}
data class Person(val name: String, val age: Int)
val person1 = PersonFactory.makePerson("Kim", 25)
val person2 = PersonFactory.makePerson("Lee", 21)
println(PersonFactory.people.size.toString()) // 2
클래스나 메소드 앞에 abstract를 붙여 추상 클래스 또는 추상 메소드를 정의한다. 추상 클래스에 추상 메소드가 있는 경우 반드시 자식 클래스에서 override가 필요하다.
abstract Game {
var name = "Kim"
abstract fun start() // 재정의 필요!!!!
fun end() = println("End Game")
}
class NewGame: Game() {
override fun start() {
println("Start Game")
}
}
코틀린에서는 interface 클래스 내부의 함수가 바디를 가질 수 있고 멤버 변수를 추상 변수로 만들어 사용할 수도 있으며, get() 또는 set()을 통해서 값을 지정할 수도 있다.
interface Person {
fun eat()
fun sleep()
}
class Student : Person {
override fun eat() {
}
override fun sleep() {
}
}
interface Person {
fun eat() {
println("eat")
}
fun sleep() {
println("sleep")
}
abstract fun study() // override 필요!!!!
}
class Student : Person {
override fun study() {
}
}
코틀린의 전체적인 기본 문법 정리가 끝났다. 총 7개의 포스팅으로 구성되었다. 이 중에서 클래스는 내용이 많아서 두 개의 포스팅으로 나누게 되었다.ㅎㅎ 전체적인 코틀린의 기본적인 문법을 정리하면서 느낀점은 대체적으로 자바보다 훨씬 코드가 간결해 졌다는 점이었다. 코틀린이 익숙해지면 자바를 사용할 때보다 더 깔끔한 코드를 작성할 수 있을 것 같은 느낌이 든다. 추가로 더 정리할 문법이 생각나면 그때 그때 추가할 예정입니당~!!