JAVA & APP :국비지원 학원 복습/Kotlin
Kotlin 클래스 : Object , 상속, data class, 스마트 캐스팅
나는선우
2021. 2. 21. 19:46
반응형
Object
싱글톤 패턴 코드처럼 단일 객체로 선언하고 싶다면
클래스 정의 시 Object를 사용하면 됨
싱글톤 패턴?
싱글톤 패턴은 인스턴스가 오직 1개만 생성되어야 하는 경우에 사용되는 패턴이다.
인스턴스가 1개만 생성되는 특징을 가진 싱글톤 패턴을 이용하면,
하나의 인스턴스를 메모리에 등록해서
여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있으므로
요청이 많은 곳에서 사용하면 효율을 높일 수 있다.
object Person {
var name : String =''
var age : Int = 0
fun print() {
print("${name}는 ${age}살이다.)
}
}
fun main() {
Person.name = "가나다"
Person.age = 52
Person.print()
}
Companion object
자바의 static 변수를 만들고 싶다면
companion object블록에 변수를 정의하고
객체명. 변수명으로 호출하면 됨
class Counter{
companion object{
var cnt = 0
fun add(){
cnt += 1
}
}
}
fun main() {
var a = Counter.add()
var b = Counter.add()
println(a)
println(b)
println("생성된 Counter 객체 수 :" + Counter.cnt)
}
data class
자바의 VO클래스를 만들고 싶다면
클래스 정의 시 data를 사용하면 됨
클래스 내부에 함수는 포함하면 안 됨
data class Employee(val empno : String, val fnmae: String, val lname : String)
fun main(){
var emp1 = Employee("1","Lee","Sunwoo")
var emp2 = Employee("2","Yoon","HyeLynn")
println(emp1.toString())
println(emp2.toString())
}
코틀린의 클래스 상속
모든 클래스의 조상 클래스는 Any
Any 클래스는 기본적으로 equals, toString, hashCode 등이 멤버 메서드로 구성
부모 클래스를 상속 시 ' : 부모 클래스()' 형태로 작성함
자식 클래스가 상속받으려면 부모 클래스에 open이라고 선언해야 함
부모 클래스의 메서드를 재정의하려면 함수에 open이라고 선언 해야 함
open class Parent() {
val name : String = "Parent"
fun sayHello() { println("Hello, World!!") }
open fun sayBye() {println("GoodBye, World!!") }
}
class child() : Parent() {
fun sayAgain() { println("Hello, Kotlin!!") }
override fun sayBye() { println("GoodBye, Kotlin") }
}
fun main() {
var child = child()
println(child.name) // 부모클래스의 name변수 가져오기
child.sayHello() // 부모클래스의 sayHello() 메서드 가져오기
child.sayAgain() // 자식클래스의 sayAgain() 메서드 가져오기
child.sayBye() // 부모클래스의 sayBye() 메서드를 자식클래스에서 재정의한 sayBye() 메서드
// 가져오기
}
스마트 캐스팅
자손 객체를 부모 타입에 대입하는 경우 암시적 형 변환이 발생 - 이것을 스마트 캐스팅이라 함
반면, 부모 객체를 자손 타입에 대입하는 경우 명시적 형 변환이 필요 -as 키워드 사용용
var p1 : Parent = Child() // 스마트 캐스팅
var p2 : Child = Parent() // 오류 !! 명시적 형변환이 필요하다.
var p3 : Child = Parent() as Child
반응형