Nov 12, 2021

[프로젝트 구조 설명]

이전에 개발한 Fragment는 Java로 구현 되어있고 새로 만든 Fragment는 Kotlin으로 구현 되어있습니다.

그런데 듀얼스크린 전환시 Java로 구성된 Fragment는 닫기 Aciton이 미동작하고 Kotlin으로 구성된 Fragment는 닫기 Action이 동작하는 것을 발견하였습니다.

구조상 Fragment 닫기 버튼 클릭시 동작은 부모 Activity(parent 객체)를 Fragment 생성시 가져와 parent 객체를 참조하려 닫기 함수를 호출하게 되어있는데, 이때 생성자를 만들때 Java는 static method로 Kotlin은 companion object로 구현이 되어있습니다.

[이슈의 원인]

<aside> 💡 Java의 static 키워드와 다르게, Kotlin은 클래스 바로 아래에 static 변수 또는 메소드가 존재하지 않습니다. Companion이라는 static 객체가 존재하고 이 객체 안에 정의한 변수 또는 메소드들이 존재합니다. 따라서 companion object는 static과 다르게 객체이기 때문에 parent객체가 소실되지않아 듀얼스크린 전환시 닫기 버튼 동작이 가능해진것입니다.

</aside>