어제 면접을 갔다 왔다. 정말 많은 방면에서 질문이 들어왔다.
다만 나는 준비가 많이 덜 되있고 부족하다는 생각이 들었다. 내가 안해서 부족한걸 어떡하겠는가. 더 열심히 준비해야지
그래서 면접에서 받은 기술면접 질문 중 내가 멍.... 하게 만든 간단(?) 하면서도 나는 솔직하게 몰라서 제대로 대답하지 못한 질문에 대해서 알아볼 것이다.
inner class에 대해서 질문을 받았을 때, 나중에 면접자 분께서 Java에 대해 질문을 하려고 하셨는데, 자바를 잘 모른다고 답해서 해당 질문은 들어오지 않았다. 다만 그 질문이 뭔지 내부 클래스를 찾아보면서 추측할 수 있었다.
자바 프로젝트에서 A 클래스가 있고 B 클래스가 A 클래스 안에 선언되어 있다고 가정해보자. 이렇게 되면 B클래스는 A클래스의 내부 클래스가 되어서 A클래스 안의 객체를 참조할 수 있게 된다.
이것과 반대로 코틀린에서는 A 클래스 내부에 B 클래스가 아무 키워드 없이 class라는 키워드만으로 선언된다면 B클래스는 A클래스의 객체를 참조할 수 없다. 대신 inner 라는 키워드를 사용하여 B 클래스가 A클래스의 내부 클래스로 선언되면, B클래스에서는 A클래스의 객체를 참조할 수 있게 된다. 아래 코드 블록은 간단한 예시이다. 그리고 그 밑에 사진은 내부 클래스에서는 상위 클래스의 객체를 읽을 수 있고, 중첩 클래스에서는 상위 클래스의 객체를 읽을 수 없는 것을 볼 수 있다.
class AnotherMotherClass { private val canRead: Boolean = true class SonClass { fun temp() = "Can't Read Instance $canRead" } inner class AnotherSonClass { fun printMotherInstance() = "Can read Mother's Instance value : $canRead" } }
![](https://blog.kakaocdn.net/dn/zh27t/btrnClum8LB/70CMIXwd7BLubCXE0su7CK/img.png)
'안드로이드 > 알아두기' 카테고리의 다른 글
[안드로이드] Cold Stream, Hot Stream에 대하여 (0) | 2023.10.13 |
---|---|
[안드로이드] let, run 등에 대하여 (0) | 2022.01.31 |
[안드로이드] 코루틴에 대하여 (0) | 2021.12.09 |
[안드로이드] View와 ViewGroup에 대하여 (0) | 2021.12.09 |
[안드로이드] 제네릭 함수, 클래스 정의하고 사용해보기 (0) | 2021.12.08 |