참조:유튜브 디모의 코틀린
코드테스트사이트:play.kotlinlang.org
맥북 바로 클립보드에 스크린샷하기 단축키:control+command+shift+4
맥북 탭끼리 이동 단축키:command+shift+{/}

//클래스 안에 클래스가 중첩되는 두가지 유형의 클래스 알아보자
//코틀린에서는 기본적으로 클래스 안에 클래스를 하나 더 넣을 수 있는
//중첩클래스(Nested Class)를 지원함
//ex. class Outer{
// class Nested{
//
// }
// }
//중첩클래스는 하나의 클래스가 다른 클래스의 기능과 '강하게 연관'되어 있다는
//의미를 전달하기 위해 만들어진 형식으로,
//사용할 때는 외부클래스이름.중첩클래스이름 형태로 사용하게 된다
//ex. Outer.Nested()
//이때, 중첩 클래스 대신 내부 클래스라는 것을 사용할수도 있다.
//중첩 클래스에 inner라는 키워드를 붙인 내부 클래스는
//ex. class Outer{
// inner class Inner{
//
// }
// }
// 혼자서 객체를 만들 수는 없고 외부 클래스의 객체가 있어야만 생성과 사용 가능
//
//중첩 클래스는 형태만 내부에 존재할 뿐, 실질적으로는 서로 내용을 공유할
//수 없는 별개의 클래스
//내부 클래스는 외부 클래스 객체 안에서 생성되는 클래스이므로
// 외부 클래스 객체의 속성이나 함수를 사용할 수 있다.

fun main(){
Outer.Nested().introduce()
//Outer.Nested클래스 객체만들고 함수 호출
//흠... 객체 이름이...?Outer인건가?
//객체만드는법 복습필요
//-->Nested Class 라고 출력됨
val outer=Outer()
//Outer 객체 만들어 outer라는 변수에 담은 후
val inner=outer.Inner()
//이 변수에서 Inner의 객체 생성하여 inner라는 변수에 담기
//이 객체에서 함수 호출해보기
inner.introduceInner()//-->Inner Class 라고 출력됨
inner.introduceOuter()//-->Outer Class 라고 출력됨
//따라서 inner클래스의 객체도 outer클래스의 속성을 사용할 수
// 있음을 확인.
outer.text="Changed Outer Class"
inner.introduceOuter()
//outer 객체의 text 속성을 "Changed Outer Class"로 변경하고
//다시 introduceOuter() 함수 호출해보기
//-->Changed Outer Class 라고 출력됨
//outer클래스의 속성이 변경되면 inner클래스가 그 속성을 쓸 때도
// 변경된 걸로 반영이 되는 것을 확인.
}
class Outer {
var text="Outer Class"
//클래스 만들고 문자열을 text라는 속성에 넣음
class Nested {//내부에 클래스 또 만들고
fun introduce(){//함수만들고
println("Nested Class")//문자열 출력
}
}
inner class Inner{//inner클래스 만들고
var text = "Inner Class"//속성 만듦
fun introduceInner(){//함수만들고
println(text)//이너클래스속성출력
}
fun introduceOuter(){//함수 또 만들고
println(this@Outer.text)//아우터클래스 속성 출력
//이때, 이너클래스와 아우터클래스에
//같은 이름의 속성이나 함수가 있다면
//this@(at)OuterClass이름 으로 참조한다.
}
}
}
//중첩 클래스와 내부 클래스는 클래스간의 연계성을 표현하여
//코드의 가독성 및 작성 편의성이 올라갈 수 있으므로
//적절한 상황에서 사용하는것이 좋다~
'코틀린 문법' 카테고리의 다른 글
18. Set과 Map (0) | 2023.05.31 |
---|---|
17. Data Class와 Enum Class (1) | 2023.05.14 |
15. 함수의 argument를 다루는 방법과 infix 함수 (0) | 2023.05.14 |
14. null값을 처리하는 방법, 동일한지 확인하는 방법 (0) | 2023.05.14 |
13. 문자열을 다루는 법 (0) | 2023.05.11 |