내비게이션
Sealed, Object

Sealed class는 상속이 제한된 클래스로 주로 데이터의 상태나 타입을 명확하게 표현할 때 사용된다. 관련된 상태들 및 이벤트 들을 그룹화 하는데 사용되며, 따로 인스턴스화 시키는 용도로는 사용되지 않는다
Object 는 싱글톤 객체를 만드는데 사용된다
Navigate

얼핏보면 복잡해보이지만, 생각보다 간단하다 메인에서 생성한 navController를 가지고 NavHost에서 composable을 통해 특정 url로 navigate했을때 라우팅할 함수를 적어주면된다 composable(route = Screen.RecipeScreen.route) 일땐 RecipeScreen() 을 실행하고 composable(route = Screen.DetailScreen.route) 일땐 CategoryDetailScreen()을 실행하듯이 말이다.
그리고 navController.currentBackStackEntry?.savedStateHandle?.set(“cat”, it) 이런 것은 내 생각엔 검색하면 여러 바리에이션들이 있을거같은데 간단하게 그냥 클릭한 것에 대한 정보를 BactStackEntry에 저장하는데 “cat”이라는 키로 저장한다는 의미인듯 하다 반대로 val category = navController.previousBackStackEntry?.savedStateHandle?. get<Category>(“cat”)?: Category("", "","","",) 이것은 이전에 저장한 Stack에서 불러오는데 값이 없으면 기본값을 가져오라는 의미이다.
Parcelize

한글로 소포화 하다 라는 뜻을 가지는데, 말 그대로 어떠한 객체를 문자열화(Serialize) 하는 것이다. 위 함수에서 set(“cat”,it) 에서 it이 Category 클래스 인스턴스인데 이거 그대로 넘기면 오류가 난다 안드로이드에서(뿐만아니라) 정보를 보내고 뽑아올때 객체를 직렬화시켜야 효율적이고 안전하게 정보들을 저장하고 전달할 수 있다고 한다 따라서 객체를 저장하고, 전달해야할때는 Parcelable을 잘 기억하고 있자
