오늘은 튜터님께 코드 리뷰를 받고 삽질만 했다...흑
singleton 구현방식 비교해보기
DetailActivity, MainActivity
onCreate 구현부 관련 로직 메서드로 묶기
ex) initView(), initBinding(), initClickListener()
decimalformat extention or util 패키지로 빼서 관리
- ViewHolder 클래스 inner class -> nested class로 선언부 변경
오늘은 fragment에서 암시적 인텐트 구현한다고 하루종일 찾다가 삽질만하여 공부는 많이 못하였다 ㅠㅠ (가능하다는건 확인했으니 내일도 삽질해야제!)

inner class를 사용하면 직렬화 문제 발생 가능성이 있어서 inner class 내부에 outer class 정보를 보관, 참조를 해제하지 못하면 메모리 누수 발생가능성이 있다고 하셨다.

수정하기 전

수정한 후
class 안에 class가 존재하면 inner class로 작성해주어야 하는줄 알고 있었다.
자바에서는 내부에 클래스를 정의하면 자동으로 내부 클래스가 되었지만 코틀린에서는 자동으로 중첩 클래스가 된다.
여기서 내부(inner) 클래스는 기본적으로 외부 클래스를 참조하게 되고 중첩(nested) 클래스는 외부 클래스를 참조할 수 없습니다.
//중첩 클래스
class Basic {
private val a: Int = 1
class Nested {
fun b() = 2
}
}
val c = Basic.Nested().b() // == 2
중첩 클래스는 외부 클래스를 참조하지 않기 때문에 값이 2가 됩니다.
//내부 클래스
class Basic {
private val a: Int = 1
inner class Inner {
fun b() = a //외부 클래스 참조 가능
}
}
val c = Basic.Inner.b() // == 1
내부 클래스는 외부 클래스가 참조 가능하기 때문에 c의 값은 1이 됩니다.
이때 메모리 누수는 왜 발생하는가?? 객체가 항상 참조하고 있다는 것은 내부 클래스에서 항상 외부 클래스의 객체를 참조하기 때문에 객체가 적절한 시점에 삭제되지 못하기 때문에 메모리 누수가 발생한다고 합니다.
메모리 누수가 위험한 이유는 컴파일 시 오류가 발생하는 명식적으로 알 수 있는 것이 아니라 암묵적으로 프로그래머가 발견하기 전까지는 알 수 없는 것이기 때문에 특별한 경우가 아니라면 내부 클래스 사용을 지양하고 중첩 클래스를 사용하는 것이 권장된다고 합니다.
다시 과제 구현하러 가봐야겠다 ㅠㅠ 오늘은 여기까지! 이번주안에는 다 해야겠다.