코틀린(Kotlin)

코틀린(kotlin) : Nested Class, inner class, Enum Class 중첩, 내부, Enum 클래스

알통몬_ 2018. 2. 5. 12:41
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 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;
}

위 같은 방식으로 사용가능 합니다.


이상입니다.

감사합니다.


반응형