MainActivity.kt

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            DefaultTheme {
                CalendarApp()
            }
        }
    }
}

@Composable
fun CalendarApp(){

    // 시간에 대한 정보
    val calendarInstance = Calendar.getInstance()
    val time = remember {
        mutableStateOf(calendarInstance)
    }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(20.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        CalendarHeader(time)
        CalendarHeaderBtn(time)
        CalendarDayName()
    }

}

@Composable
fun CalendarHeader(date: MutableState<Calendar>) {

    // xxxx년 00월
    val resultTime = SimpleDateFormat("yyyy년 MM월", Locale.KOREA).format(date.value.time)

    Text(
        text = resultTime,
        fontSize = 30.sp
    )

}

@Composable
fun CalendarHeaderBtn(date: MutableState<Calendar>) {

    Row(
        modifier = Modifier
            .fillMaxWidth()
            .padding(top = 30.dp, bottom = 30.dp),
        horizontalArrangement = Arrangement.SpaceBetween
    ) {

        Button(onClick = {
            val newDate = Calendar.getInstance()
            newDate.time = date.value.time
            newDate.add(Calendar.MONTH, -1)
            date.value = newDate
        },
        colors = ButtonDefaults.buttonColors(
            containerColor = Color.Black
        )
        ) {
            Text(
                text = "<",
                color = Color.Green
            )
        }

        Button(onClick = {
            val newDate = Calendar.getInstance()
            newDate.time = date.value.time
            newDate.add(Calendar.MONTH, +1)
            date.value = newDate
        },
        colors = ButtonDefaults.buttonColors(
            containerColor = Color.Black
        )
        ) {
            Text(
                text = ">",
                color = Color.Green
            )
        }
    }

}

@Composable
fun CalendarDayName() {

    val nameList = listOf("일", "월", "화", "수", "목", "금", "토")

    Row() {
        nameList.forEach {

            Box(
                modifier = Modifier.weight(1f),
                contentAlignment = Alignment.Center
            ) {
                Text(
                    text = it,
                    fontSize = 18.sp,
                    fontWeight = FontWeight.ExtraBold
                )
            }

        }

    }

}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    DefaultTheme {
        CalendarApp()
    }
}