Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#34 시간 선택 페이지(2) 디자인을 구현한다 #36

Merged
merged 6 commits into from
Feb 26, 2024

Conversation

johnhuh619
Copy link
Collaborator

@johnhuh619 johnhuh619 commented Feb 23, 2024

Issue

Overview (Required)

  • 페이지 구조
    • 달력 (포커싱 제외)
    • 시간 선택 ( 시간 선택 가능, 선택한 시간 반영 제외 )
    • 메뉴 선택 (dropdown 선택 반영 가능)
    • 하고 싶은 말 ( 타이핑 반영 가능)
    • 버튼 (클릭 가능 / 클릭 Action X)

Links

Screenshot

image

@@ -216,7 +216,7 @@ private fun HoursSection(
private fun StoreBusinessDaysSection(
onClick: (DayOfWeek) -> Unit = {},
week: Map<DayOfWeek, Boolean> =
DayOfWeek.entries.associateWith { false },
DayOfWeek.values().associateWith { false },
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DayOfWeek는 entries 가 아니라 values 로 접근해야 한다고 하네? 내 개발 환경에서 entries는 에러라고 나타나서 수정함.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
띠용, 내 IDE에선 이렇게 떠.
우리 코틀린 버전이 현재 1.9.0인데 코틀린 1.9부턴 values() 대신에 entries를 권장하더라고.

내친 김에 왜 권장할까 이유도 좀 찾아봄.
이유는 둘의 동작 방식에 차이가 있는데

Enum.values() 동작 방식 - 새로운 가변 배열 반환

  1. 호출될 때마다 새로운 배열 생성 -> 제대로 사용하지 않을 시 성능 문제 발생 가능성
  2. Array 로 반환함 -> List로 변환해야 더 많은 컬렉션 Api 사용 가능
  3. 가변이기 때문에 예상하지 못한 변경 가능 -> 버그 가능성

Enum.entries 동작 방식 - 상수 불변 리스트 반환

  1. 복사할 필요가 없어 더 빠르게 작동
  2. List라서 변환 없이 컬렉션 Api 사용 가능
  3. 불변

출처: https://medium.com/@michalankiersztajn/enum-values-is-recommended-to-be-replaced-by-enum-entries-7b73e1ed7265

따라서 entries 그대로 사용해도 될 듯 한데
image
1.9로 kotlin 버전 세팅되어있는지 확인해줄수 있어?

확인해봐도 안되고 warning이 아니라 error면 일단 그대로 푸쉬해야할듯..?


@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun HoursSection(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

종윤이 너가 사용한 HourSection 코드 가져와서 사용했어. 나중에 core 로 빼도 될거 같네.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각해보니 그렇네.
빼도 괜찮을듯 👍

Column(
modifier = modifier.fillMaxWidth(),
) {
TextTitle(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 screen에서는 isRequired 와 description이 필요해서 값을 넣었어. 만약 core로 뺀다면 파라미터를 만들어야 할 수도?

import java.time.YearMonth

@Composable
fun ScheduleView(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CalendarView와 동일해 보이지만 ScheduleView의 목적은 기능 구현 시에 날짜를 포커스해서 핸들링 하려고 파일을 만들었어. 페이지 2 기능 구현 시에 코드 추가 및 수정이 들어갈 거 같아.

  1. 페이지 1에서 선택한 날짜를 페이지 2에서 받아서 내부 CalendarView에 표시
  2. 선택 한 날짜를 순서대로 포커스(선택시 색과 다른 background 색으로 변경)
  3. 선택한 날짜 + 선택한 시간 + 선택한 메뉴 + 작성한 문장 => 묶어서 저장 하여 한번에 서버에 발신 or 누를 때마다 발신으로 하려고 해.

@johnhuh619 johnhuh619 changed the title Feature/#34 Feature/#34 시간 선택 페이지(2) 디자인을 구현한다 Feb 23, 2024
@johnhuh619 johnhuh619 assigned JJongmen and johnhuh619 and unassigned JJongmen Feb 23, 2024
@johnhuh619 johnhuh619 added the enhancement New feature or request label Feb 23, 2024
Copy link
Collaborator

@JJongmen JJongmen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리팩터링 가능해 보이는 부분들은 코멘트 남겼고
values() 이건 왜 에러 뜨는건지 모르겠넹;

HourSection은 언제가 될지는 모르겠지만 나중에 core로 빼보죠.

수고많았고 코멘트 보고 리팩터링해볼 수 있는 부분들은 해보고 머지해주쇼 👍

@@ -216,7 +216,7 @@ private fun HoursSection(
private fun StoreBusinessDaysSection(
onClick: (DayOfWeek) -> Unit = {},
week: Map<DayOfWeek, Boolean> =
DayOfWeek.entries.associateWith { false },
DayOfWeek.values().associateWith { false },
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
띠용, 내 IDE에선 이렇게 떠.
우리 코틀린 버전이 현재 1.9.0인데 코틀린 1.9부턴 values() 대신에 entries를 권장하더라고.

내친 김에 왜 권장할까 이유도 좀 찾아봄.
이유는 둘의 동작 방식에 차이가 있는데

Enum.values() 동작 방식 - 새로운 가변 배열 반환

  1. 호출될 때마다 새로운 배열 생성 -> 제대로 사용하지 않을 시 성능 문제 발생 가능성
  2. Array 로 반환함 -> List로 변환해야 더 많은 컬렉션 Api 사용 가능
  3. 가변이기 때문에 예상하지 못한 변경 가능 -> 버그 가능성

Enum.entries 동작 방식 - 상수 불변 리스트 반환

  1. 복사할 필요가 없어 더 빠르게 작동
  2. List라서 변환 없이 컬렉션 Api 사용 가능
  3. 불변

출처: https://medium.com/@michalankiersztajn/enum-values-is-recommended-to-be-replaced-by-enum-entries-7b73e1ed7265

따라서 entries 그대로 사용해도 될 듯 한데
image
1.9로 kotlin 버전 세팅되어있는지 확인해줄수 있어?

확인해봐도 안되고 warning이 아니라 error면 일단 그대로 푸쉬해야할듯..?

var expanded by remember {
mutableStateOf(false)
}
var icon = if (expanded) Icons.Filled.ArrowDropUp else Icons.Filled.ArrowDropDown
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

icon 변수는 expanded 상태에 따라 값이 결정되는데, expanded의 값이 변경될 때마다 remember를 통해 리컴포저블되고 다시 icon이 결정돼.

이 외에는 icon에 대한 직접적인 수정이 없어서,
iconval로 선언하여 불변으로 만드는 건 어떻게 생각해?

불변으로 선언할 수 있다면 불변으로 선언해서 실수로 변경하는 일이랑 안정성을 높이는 게 좋다고 생각해.


@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun HoursSection(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각해보니 그렇네.
빼도 괜찮을듯 👍

Comment on lines 45 to 47
var check by remember {
mutableStateOf(false)
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 check 변수의 용도가 무엇을 확인하는건지 이름만 보고 알기 어려운 것 같은데
어떤 역할을 하는 변수야?

Comment on lines 42 to 44
var lastMove by remember {
mutableStateOf("START")
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lastMove의 자료형이 문자열이라서
START 이외에 어떤 값들로 변하게 될지 알기에 어려운 것 같아.

아래 코드를 보니 START, RIGHT, LEFT가 올 수 있는 것 같은데
enum 으로 관리해서 허용 가능한 값들을 제한하는 건 어떻게 생각해?

@johnhuh619 johnhuh619 merged commit a9a7951 into main Feb 26, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

시간 선택 페이지(2) 디자인을 구현한다
2 participants