1. static함수, 변수
class Person private constructor (
var name:String,
var age:Int
){
// 자바에서의 static과 동일한 역할을 하는 블록
companion object{
const var MIN_AGE = 1
fun newBaby(name:String):Person{
return Person(name, MIN_AGE)
}
}
}
1) static
클래스가 인스턴스화될 때 새로운 값이 복제되는 개념이 아닌 정적으로
인스턴스끼리의 값을 공유
2) companion object
클래스와 동일하는 유일한 오브젝트 정보, static처럼 여러개의 인스턴스가
존재하더라도 companion object안에 선언된 것들은 유일한 값들임
3) const
- 자바와 같이 상수를 의미하는 키워드이고, 다른 키워드와는 다르게
컴파일 시에 변수가 할당 됨
- 기본타입과 String타입에만 사용할 수 있음
4) companion object에 유틸성 함수를 넣어도 되지만, 최상단 파일 활용을 추천
5) 자바에서 접근 방법
* @jvmStatic을 붙이면 static 함수 호출처럼 사용 가능
void main(){
Person.Companion.newBaby("ret");
// newBaby @jvmStatic을 붙여주면 바로 호출 가능
Person.newBaby("aaaa");
}
2. 싱글톤
1) object형태로 만들면 된다
object Singleton{
var a:Int = 0
}
3. 익명클래스
1) 정의
특정 인터페이스나 클래스를 상속받은 구현체를 일회성으로 사용할 때 사용되는
클래스
2) 예시
interface Movalble{
void move()
void fly()
}
fum main(){
// 자바에서 moveSomthing(new Movalble())형태와 동일
// 코틀린에서는object를 이용하여 익명클래스 생성
moveSomthing(object : Movable{
override fun move(){
println("move")
}
override fun fly(){
println("fly")
}
})
}
private fun moveSomething(movalble:Movable){
movalble.move()
movalble.fly()
}
4. 정리
1) 자바의 static같은 형태를 코틀린에서 만들 때 companion object를 사용
2) companion object도 하나으 객체로 간주 되어 이름을 붙일수도있고, 상속을 받을 수도 있다
3) 코틀린에서 싱글톤을 만들 때 object키워드를 사용
4) 익명클래스를 만들 때 object : 타입을 사용