자바 는 클래스 안에 클래스 선언 시 기본Inner 클래스가 됨
public class Main {
private int outer = 0;
class Main2{
public void getValue(){
System.out.println(outer);
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 있음
static 예약어로 선언하면 Nested 클래스가 됨
public class Main {
private int outer = 0;
static class Main2{
public void getValue(){
// Non-static field 'outer' cannot be referenced from a static context
System.out.println(outer);
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 없음
**외부 클래스 객체**를 **생성자**로 넘겨주면 됨
public class Main {
private int outer = 0;
static class Main2{
public void getValue(Main main){
System.out.println(main.outer);
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 있음
**코틀린**은 클래스 안에 클래스 선언 시 기본 Nested 클래스가 됨
class Main{
private val outer : Int = 0
class Test2{
private fun getValue(){
//Unresolved reference: outer
println(outer)
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 없음
inner 예약어로 선언하면 Inner 클래스가 됨
class Main{
private val outer : Int = 0
inner class Test2{
private fun getValue(){
println(outer)
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 있음
**자바**처럼 **외부 클래스 객체**를 **생성자**로 넘겨주면 해결 가능함
class Main{
private val outer : Int = 0
class Test2(private val main : Main){
private fun getValue(){
println(main.outer)
}
}
}
이런식으로 외부 클래스의 **변수**를 참조할 수 있음
Inner 클래스는 Outer 클래스가 생성되어야 생성됨 → 이럴 경우 Outer 클래스가 필요하지 않아도 반드시 생성해야 함Java Inner 클래스는 **직렬화 이슈**가 있음Inner 클래스는 내부에 Outer 클래스의 정보를 보관하고 있음 → 메모리 누수Nested 클래스로 정의하는 것이 좋음
여러 어댑터**에서 참조하여 사용할 경우 Outer 클래스를 매번 새로 생성할 필요가 없음onCreateViewHolder**가 여러번 만들어질때 묵시적으로 Outer 클래스를 참조하게 됨