๋ฌธ์ œ ๋ฐœ์ƒ

ํ”„๋กœ์ ํŠธ ์ค‘ ์–ด๋–ค ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ‘์ž๊ธฐ ํ”„๋ฆฌ๋ทฐ๊ฐ€ ์•ˆ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค..ใ… ใ… 

UI๊ฐœ๋ฐœ ํ•  ๋•Œ ํ”„๋ฆฌ๋ทฐ๊ฐ€ ์•ˆ๋˜๋‹ˆ๊นŒ ์•ฝ๊ฐ„ ๋ˆˆ๊ฐ€๋ฆฌ๊ณ  ๋–ก ์จ๋Š” ๋Š๋‚Œ์ด๋ผ ํ•˜๋‚˜์”ฉ ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์›์ธ์ด ๋ทฐ๋ชจ๋ธ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ์˜ ์›์ธ์ด ๋˜๋Š” ์ฝ”๋“œ์™€ ํ˜„์ƒ์€ ์ด์Šˆ์—์„œ ์ž์„ธํ•˜๊ฒŒ ํ™•์ธ ํ•  ์ˆ˜์žˆ๋‹ค.

ํ•ด๊ฒฐ

์šด ์ข‹๊ฒŒ๋„ ์ „ ์ฃผ์— ์ง„ํ–‰๋œ ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ๊ฐ•์˜์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์–ธ๊ธ‰ ๋˜์—ˆ๋˜ ์ ์ด ์žˆ์—ˆ๋‹ค.

์ด๋•Œ ๊ฐ•์‚ฌ๋‹˜์ด ์ฃผ์‹  ๋งํฌ๋ฅผ ์ €์žฅํ•ด๋’€๋Š”๋ฐ ๊ทธ๊ฒŒ ์ƒ๊ฐ์ด ๋‚˜์„œ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!๐Ÿ‘

preview - AndroidDeveloper

๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด

  • ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ์ €๋ธ”์€ ํ”„๋ฆฌ๋ทฐ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†์Œ
  • ๋ทฐ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฅธ ํ•˜์œ„ ์ปดํฌ์ €๋ธ”๋กœ ์ „๋‹ฌํ•ด์„  ์•ˆ๋จ
    • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํ•˜์œ„ ์ปดํฌ์ €๋ธ”๋„ ๋ชป๋ณด๊ฒŒ๋จ
    • ์žฌ์‚ฌ์šฉ์„ฑ ๋–จ์–ด์ง

์ •๋ฆฌํ•˜๋ฉด ์ปดํฌ์ €๋ธ”์—์„œ ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ปดํฌ์ €๋ธ” ํ•จ์ˆ˜๋ฅผ ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‚˜๋Š” ์ด๊ฑธ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ–ˆ๋‹ค.

@Composable
internal fun HomeScreen( //ComposalbeA์—ญํ• 
    climbingRecViewModel: ClimbingRecordViewModel = viewModel()
){

    val onDateSelected:(Long?)->Unit={
        climbingRecViewModel.getDayRecords(it)
    }
    val onMonthChanged={}
    HomeScreen(
        dayUiState=climbingRecViewModel.dayUiState,
        monthUiState = climbingRecViewModel.monthUiState,
        onDateSelected = onDateSelected
    )
}

@Composable
private fun HomeScreen( //ComposableB์—ญํ• 
    modifier: Modifier = Modifier,
    dayUiState: StateFlow<DayUiState>?=null,
    monthUiState: StateFlow<MonthUiState>?=null,
    onDateSelected:(Long?)->Unit={},
){

๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๊ฐ€ ๋‘๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๊ฑด ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ™œ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

๊ณตํ™ˆ์ฝ”๋“œ์—์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์“ฐ์ด๋Š”๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ ‡๊ฒŒ ํ•ด๋ดค๋Š”๋ฐ ๊ฐ™์€ ํ•จ์ˆ˜์— ์žˆ์–ด์•ผํ•  ๋‚ด์šฉ์„ ์ชผ๊ฐ ๊ฑฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ์“ด ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค.


+) ๊ณตํ™ˆ ์ฝ”๋“œ

๊ณตํ™ˆ์— ์˜ฌ๋ผ์˜จ ์ฝ”๋“œ์ธ๋ฐ ์–˜๋„ ๋‚˜์ค‘์— ๋ณด๊ธฐ ์‰ฝ๋„๋ก ์ฃผ์„์„ ๋‹ฌ์•„๋‘์—ˆ๋‹ค.

@Composable
fun AuthorColumn(viewModel: AuthorViewModel = viewModel()) {// ๋ทฐ๋ชจ๋ธ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ์ปดํฌ์ €๋ธ”
  AuthorColumn(//UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ์ €๋ธ”- ๋ทฐ๋ชจ๋ธ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ค๋ฉด ํ”„๋ฆฌ๋ทฐ๊ฐ€ ์•ˆ๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋ทฐ๋ชจ๋ธ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„์„œ ๋ณด๋‚ด์คŒ
    name = viewModel.authorName,
    posts = viewModel.posts
  )
}

//Preview์—์„œ ํ™œ์šฉ
@Preview
@Composable
fun AuthorScreenPreview(// ํ”„๋ฆฌ๋ทฐ์—์„œ๋Š” ๋ทฐ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปดํฌ์ €๋ธ”๋งŒ ์‚ฌ์šฉ
  name: String = sampleAuthor.name,
  posts: List<Post> = samplePosts[sampleAuthor]
) {
  AuthorColumn(...) {
    name = NameLabel(name),
    posts = PostsList(posts)
  }
}

+) ์˜๋ฌธ

  • ๋งŒ์•ฝ ๋ถ€๋ถ„์ ์ธ ํ•˜์œ„ ์ปดํฌ์ €๋ธ”์—์„œ๋งŒ ๋ทฐ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด์„œ ์ €๋Ÿฐ ๊ตฌ์กฐ์˜ ์ปดํฌ์ €๋ธ”์„ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ ๋‹ค๋ฉด ์Šคํฌ๋ฆฐ ์ „์ฒด์˜ ์ปดํฌ์ €๋ธ”์„ ๋ณด๊ธฐ ํž˜๋“ค์ง€ ์•Š๋‚˜
  • ๊ทธ๋ ‡๋‹ค๊ณ  ์ตœ์ƒ์œ„ ์ปดํฌ์ €๋ธ”์—๋งŒ ์ €๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•œ ํ›„ ๋ทฐ๋ชจ๋ธ ์ž‘์—…์„ ๋ชฝ๋•… ๋ชฐ์•„๋‘๊ณ  ์“ฐ์ž๋‹ˆ ๋ถˆํ•„์š”ํ•œ ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„๊นŒ(์ƒํƒœ ํ˜ธ์ด์ŠคํŒ…์— ๊ด€ํ•œ ๋ฌธ์„œ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ํ˜ธ์ด์ŠคํŒ…์„ ์ง€์–‘ํ•˜๋ผ๊ณ  ๋˜์–ด์žˆ์–ด์„œ ๋“  ์˜๋ฌธ์ธ๋ฐ ๋ทฐ๋ชจ๋ธ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ ์šฉ๋ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.)

์ฐธ๊ณ 

preview - AndroidDeveloper

์•ˆ๋“œ๋กœ์ด๋“œ Compose Preview๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€? - ํ•จ์ˆ˜๋ฅผ ์ž˜ ๋ถ„๋ฆฌํ•˜์ž.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ