공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 Nested Class, Inner Class, EnumClass 에 대해 공부합니다.
Nested Class and Inner Class
중첩 클래스
클래스 내부에 또 다른 클래스를 중첩시킬 수 있습니다.
fun main(args: Array<String>) {
val ccc = AAA.BBB().bbb()
print(ccc)
}
class AAA {
private val aaa: Int = 10
class BBB {
fun bbb() = 100
}
}
내부 클래스
클래스에 inner 마크를 선언하면 바깥 클래스의 멤버에 접근할 수 있게 됩니다.
내부 클래스는 외부 클래스의 객체에 대한 참조를 전달합니다.
내부 클래스는 중첩클래스처럼 접근을 하면 에러가 발생합니다.
때문에 아래 코드처럼 접근해야 합니다.
fun main(args: Array<String>) {
val ccc = AAA().BBB().bbb()
}
class AAA {
private val aaa: Int = 10
inner class BBB {
fun bbb() = 100
}
}
익명 내부 클래스
익명 냐ㅐ부 클래스 인스턴스는 객체 표현식을 만들어서 사용하는데요.
자바의 익명 구현 객체를 생각하시면 됩니다.
선언은 아래처럼 합니다.
window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
Enum Class
Enum 클래스의 가장 기본적인 사용방법은 type-safe enums 을 구현하는 것입니다.
enum class Seasons {
SPRING, SUMMER, FALL, WINTER
}
각 enum 상수는 객체이고, enum 상수는 콤마로 구분됩니다.
초기화
각 열거형은 Enum 클래스의 인스턴스 이기 때문에 아래처럼 초기화될 수 있습니다.
fun main(args: Array<String>) {
val seasons = Seasons.SPRING
when(seasons.num) {
0 -> println("봄")
1 -> println("여름")
2 -> println("가을")
3 -> println("겨울")
}
}
enum class Seasons(val num : Int) {
SPRING(0),
SUMMER(1),
FALL(2),
WINTER(3)
}
열거형 상수들은 자신의 익명 클래스를 선언할 수도 있습니다.
enum class Seasons {
SPRING {
fun show() {
print("봄이네요.")
}
},
SUMMER {
fun show() {
print("여름이네요.")
}
},
FALL {
fun show() {
print("가을이네요.")
}
},
WINTER {
fun show() {
print("겨울이네요.")
}
}
}
오버라이딩 메서드도 선언할 수 있습니다.
그리고 enum class 는 어떠한 멤버도 가질 수 있고, 멤버와 enum 상수를 구분하려면
자바처럼 세미콜론으로 나눠줘야 합니다.
enum class Seasons {
SPRING,
SUMMER,
FALL,
WINTER;
fun name() {};
}
멤버를 먼저 선언하면 에러가 나네요 ㅎㅎ
그리고 Enum 항목에는 내부 클래스는 가능하지만, 중첩 클래스는 불가능 합니다.
사용 방법
fun main(args: Array<String>) {
print(Seasons.SPRING)
print(Seasons.valueOf("SPRING"))
}
enum class Seasons {
SPRING,
SUMMER,
FALL,
WINTER;
}
위 같은 방식으로 사용가능 합니다.
이상입니다.
감사합니다.
'코틀린(Kotlin)' 카테고리의 다른 글
코틀린(kotlin) : 메서드 Function (0) | 2018.02.05 |
---|---|
코틀린(kotlin) : 객체 표현식과 객체 선언 Object Expression and Declaration (2) | 2018.02.05 |
코틀린(kotlin) : Data Class 와 Sealed Class (0) | 2018.01.31 |
코틀린(kotlin) : 확장 Extension (0) | 2018.01.31 |
코틀린(kotlin) : 접근 제한자 - private, protected, internal, public (0) | 2018.01.31 |