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/jaino/#93 #96

Merged
merged 22 commits into from
Jan 10, 2024
Merged

Feature/jaino/#93 #96

merged 22 commits into from
Jan 10, 2024

Conversation

jeongjaino
Copy link
Member

1. ๐Ÿ“„ ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฐ ์†Œ๊ฐœ

#93 ์„ค๋ฌธ ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • ๋ฐ ์„ค๋ฌธ ํ˜•์‹ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„

2. ๐Ÿ”ฅ๋ณ€๊ฒฝ๋œ ์ 

  1. Survey, SurveyForm ์—”ํ‹ฐํ‹ฐ์— SurveyFormId ์ถ”๊ฐ€
  • ๊ธฐ์กด eventId๋กœ ์„ค๋ฌธ ๋ฐ ์‘๋‹ต์— ์ ‘๊ทผํ•˜๋˜ ๋ฐฉ์‹์„ surveyFormId๋กœ ๋ณ€๊ฒฝ
  1. SurveyForm ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€

  2. ์„ค๋ฌธ ํ˜•์‹์œผ๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌํ˜„

ํŒŒ์ผ ๋ฆฌ๋„ค์ด๋ฐ

  • registerSurveyUseCase -> postSurveyFormUseCase

  • surveyRegstrationConent -> SurveyFormContent

    • Edit์—์„œ๋„ ์‚ฌ์šฉํ•ด์„œ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •
  • SurveyRegistrationScreen -> SurveyFormRegistrationScreen

3. ๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท(์„ ํƒ)

4. ๐Ÿ’ก์•Œ๊ฒŒ๋œ ํ˜น์€ ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ๋“ค

weight๋Š” ์ƒ๋Œ€์ ์ธ View ๊ฐ„์˜ ๊ฐ€์ค‘์น˜๋กœ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ,

๋ ˆ์ด์•„์›ƒ์—์„œ ๋‹จ์ผ๋กœ weight๋ฅผ ์„ค์ •ํ•˜๋ฉด, constraintLayout์˜ 0dp์™€ ๊ฐ™์ด ๋ถ€๋ชจ ๋ ˆ์ด์•„์›ƒ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์˜ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

weight์„ ์•Œ๊ธฐ ์ „๊นŒ์ง€ customLayout์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋Š” ์—†์„๊นŒ ๊ณ ๋ฏผํ•˜์—ฌ, ํƒœ๊ทœ์ƒ์˜ ์ปค์Šคํ…€ ๋ ˆ์ด์•„์›ƒ์„ ์ •๋…ํ–ˆ๋‹ค ์บฌ์บฌ

@jeongjaino jeongjaino added ๐Ÿš€์ง„ํ˜ธ๐Ÿš€ ESTP ์ •์ง„ํ˜ธ 23์„ธ ๐ŸŒฑ๊ธฐ๋Šฅ๐ŸŒฑ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋‘๋‘๋‘ฅ์žฅ! ๐Ÿงนํ—ˆ๋“œ๋ ›์ผ๐Ÿงน ์ข…์†์„ฑ ์ถ”๊ฐ€, ๊ธฐ๋Šฅ๊ณผ ๋ฌด๊ด€ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ ๐Ÿ”ฅ๋ฆฌ๋ทฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘๐Ÿ”ฅ PR์„ ์˜ฌ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. labels Jan 9, 2024
@jeongjaino jeongjaino self-assigned this Jan 9, 2024
Copy link
Member

@tgyuuAn tgyuuAn left a comment

Choose a reason for hiding this comment

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

๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!

์ด๋ฒˆ PR๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ„๋‹จํ•œ ์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒจ๋ดค์–ด์š”!

@@ -17,6 +18,7 @@ data class SurveyForm(
"",
"",
"",
"",
emptyList(),
LocalDateTime.MIN,
)
Copy link
Member

Choose a reason for hiding this comment

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

๋ณ„ ๊ฑด์•„๋‹Œ๋ฐ,

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์‚ฌ์šฉํ•  ๋•Œ default value์ฃผ๋Š” ๊ฑฐ๋ž‘ ๋ถ€ ์ƒ์„ฑ์ž๋กœ ์„ ์–ธํ•˜๋Š” ๊ฑฐ๋ž‘ ์ฐจ์ด์ ์ด ์žˆ๋‚˜์š” ?

Copy link
Member Author

Choose a reason for hiding this comment

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

์ •ํ™•ํžˆ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ใ… .ใ… 

์ œ๊ฐ€ Default๊ฐ€ ์•„๋‹Œ ๋”ฐ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”

๋‹จ์ˆœํžˆ ๋””ํดํŠธ๋ณด๋‹ค ๋ถ€ ์ƒ์„ฑ์ž๊ฐ€ ์ฝ”๋“œ์ƒ ๊น”๋”ํ•ด๋ณด์—ฌ์„œ, ๋งค๋ฒˆ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค .. !

์ฝ”๋“œ ๋Ÿ‰์œผ๋กœ ๋ดค์„ ๋–„๋Š” ๋””ํดํŠธ๊ฐ€ ๋” ์ ๊ฒŒ ์ž‘์„ฑ๋˜๊ธด ํ•˜๊ฒ ๋„ค์šฉ ํ•˜ํ•˜

Copy link
Member Author

Choose a reason for hiding this comment

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

๊ทธ๋ž˜๋„ ์•„๋งˆ ์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ถ€ ์ƒ์„ฑ์ž๊ฐ€ ๋””ํดํŠธ ๊ฐ’์˜ ์—ญํ• ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์•„๋งˆ ๊ฐ™๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š์„๊นŒ์š” ?

@@ -35,33 +35,42 @@ internal fun SurveyRegistrationContent(
onQuestionChanged: (String) -> Unit,
onQuestionTypeChanged: (QuestionType) -> Unit,
onTimeChanged: (LocalTime) -> Unit,
onNextButtonClicked: (SurveyRegistrationState) -> Unit,
onNextButtonClicked: (SurveyFormState, SurveyFormState) -> Unit, // (currentState, nextState)
Copy link
Member

Choose a reason for hiding this comment

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

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 2๊ฐœ๋กœ ๋ฐ›๋Š” ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”? ํ™•์žฅ์„ฑ์˜ ์ด์œ  ๋•Œ๋ฌธ์ธ๊ฐ€์š” ?.?

Copy link
Member Author

@jeongjaino jeongjaino Jan 10, 2024

Choose a reason for hiding this comment

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

ViewModel์—์„œ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•ด์„œ, ๊ทธ์— ๋”ฐ๋ผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 2๊ฐœ๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค !

๊ธฐ์กด์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ViewModel์—์„œ
setSurveyRegistrationState (๋‹ค์Œ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜) ๋‚ด์—์„œ Validation์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 fun setSurveyRegistrationState(surveyRegistrationState: SurveyRegistrationState) {
        when (surveyRegistrationState) {
            SurveyRegistrationState.EVENT_SELECTION -> { /* initial value */
            }

            SurveyRegistrationState.INFORMATION -> {
                if (isNotValidEventSelection()) {
                    emitValidationErrorMessage("ํ–‰์‚ฌ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.")
                    return
                }
            }

            SurveyRegistrationState.QUESTION -> {
                if (isNotValidInformation()) {
                    emitValidationErrorMessage("์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.")
                    return
                }
            }

            SurveyRegistrationState.DEADLINE -> {
                if (isValidSurveyQuestion()) {
                    addSurveyQuestion() // ํ˜„์žฌ ์ž‘์„ฑํ•œ ์งˆ๋ฌธ, ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…
                } else {
                    emitValidationErrorMessage("์งˆ๋ฌธ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.")
                    return
                }
            }
        }
        _currentRegistrationState.value = surveyRegistrationState
    }

ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ๋ณ€ํ™˜ํ–ˆ์–ด์š” !

  1. ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š์Œ
  • ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ด, ์˜ˆ์ธก์ด ํž˜๋“ฆ
  1. ํ•จ์ˆ˜ ๋„ค์ด๋ฐ์ด setSurveyRegistrationState์ธ๋ฐ validํ•œ ์ƒํƒœ์—์„œ๋งŒ ๋‹ค์Œ ์ƒํƒœ๊ฐ€ ์„ค์ •๋จ
  2. ๋‹ค๋ฅธ ํ•จ์ˆ˜์—์„œ Validation์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋˜ ๋‹ค์‹œ Validation ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•จ.

๊ทธ๋ž˜์„œ ๋ชจ๋“  Validation ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ ๋ฐ–์œผ๋กœ ๋นผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋”ฐ๋กœ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์–ด์š” !

fun validateSurveyForm(currentState: SurveyFormState): Boolean {
        when (currentState) {
            SurveyFormState.EVENT_SELECTION -> {
                if (isNotValidEventSelection()) {
                    emitValidationErrorMessage("ํ–‰์‚ฌ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”.")
                    return false
                }
            }

            SurveyFormState.INFORMATION -> {
                if (isNotValidInformation()) {
                    emitValidationErrorMessage("์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.")
                    return false
                }
            }

            SurveyFormState.QUESTION -> {
                if (isNotValidSurveyQuestion()) {
                    emitValidationErrorMessage("์งˆ๋ฌธ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.")
                    return false
                }
            }

            SurveyFormState.DEADLINE -> {
                if (isNotValidDeadline()) {
                    emitValidationErrorMessage("์ตœ์†Œ ํ•˜๋ฃจ ์ด์ƒ ์„ค๋ฌธ ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”.")
                    return false
                }
            }
        }

        return true
    }

    fun setSurveyFormState(nextState: SurveyFormState) {
        _currentSurveyFormState.value = nextState
    }

์ด๋ ‡๊ฒŒ ViewModel ๋‚ด์—์„œ ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด์„œ,
View ๋‹จ์œ„์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ด์š”. (ํ˜„์žฌ ์ƒํƒœ, ๋‹ค์Œ ์ƒํƒœ)
ํ˜„์žฌ ์ƒํƒœ -> validation() ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ
๋‹ค์Œ ์ƒํƒœ -> setNextState() ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ

ํƒœ๊ทœ๋‹˜๊ป˜์„œ ๋ง์”€ํ•˜์‹  ํ™•์žฅ์„ฑ์˜ ์ด์œ ๋„ ์žˆ์–ด์š” !
์‚ฌ์‹ค ํ˜„์žฌ ์ƒํƒœ๋งŒ ๋ณด๊ณ  ๋‹ค์Œ ์ƒํƒœ๊ฐ€ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ๊นŒ์š”. (ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ์งˆ๋ฌธ์ด๋ฉด, ๋‹ค์Œ ์ƒํƒœ๋Š” ๋‹น์—ฐํžˆ ๋งˆ๊ฐ๊ธฐํ•œ์ด๊ฒ ์ฃ  !? ํ•˜ํ•˜)

ํ•˜์ง€๋งŒ, ์ œ๊ฐ€ ์ž‘์„ฑํ•œ #95 ์ด์Šˆ๋ฅผ ์‚ดํŽด๋ณด์‹œ๋ฉด,
์ด์ „ ํŽ˜์ด์ง€ ์„ค๋ฌธ ๋‚ด์šฉ๋„ ์ž‘์—…์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค์Œ ์ƒํƒœ๊ฐ€ ์˜ˆ์ธก์ด ์•ˆ๋ผ์š”
(๋‹ค์Œ ํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š” !)

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐœ์˜ ์ƒํƒœ๋ฅผ ๋ฐ›๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค !

Copy link
Member

Choose a reason for hiding this comment

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

 fun setEventStartDate(eventDate: LocalDate) {
        if (!isValidStartDate(eventDate)) {
            emitValidationErrorMessage("์ตœ์†Œ ํ•˜๋ฃจ ์ด์ƒ ์ผ์ • ๋‚ ์งœ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”.")
            return
        }
        _eventStartDate.value = eventDate
    }

    fun setEventStartTime(eventTime: LocalTime) {
        _eventStartTime.value = eventTime
    }

    fun setEventEndDate(eventDate: LocalDate) {
        if (!isValidEndDate(eventDate)) {
            emitValidationErrorMessage("์ข…๋ฃŒ ๋‚ ์งœ๋Š” ์‹œ์ž‘ ๋‚ ์งœ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ๋Šฆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
            return
        }
        _eventEndDate.value = eventDate
    }

    fun setEventEndTime(eventTime: LocalTime) {
        if (!isValidEndTime(eventTime)) {
            emitValidationErrorMessage("์ข…๋ฃŒ ๋‚ ์งœ๋Š” ์‹œ์ž‘ ๋‚ ์งœ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ๋Šฆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.")
            return
        }
        _eventEndTime.value = eventTime
    }

    fun setEventRegistrationState() {
        if (_currentRegistrationState.value == EVENT_DETAILS) {
            if (!isValidTitle()) {
                emitValidationErrorMessage("ํ–‰์‚ฌ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
                return
            }
            if (!isValidContent()) {
                emitValidationErrorMessage("ํ–‰์‚ฌ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
                return
            }
            _currentRegistrationState.value = EVENT_SCHEDULE
        }
    }

์ œ๊ฐ€ ์ง  ์ผ์ • ๋“ฑ๋ก ๋กœ์ง์—์„œ๋Š” ์•„์˜ˆ stateFlow์— setํ•  ๋•Œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ•˜๋Š”๋ฐ์š”,

ํ•˜๋‚˜๋กœ ํ†ต์ผ ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ณด๊ธฐ๊ฐ€ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์–ด๋–ค ๊ฒƒ์œผ๋กœ ํ†ต์ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š” ?.?

Copy link
Member Author

@jeongjaino jeongjaino Jan 10, 2024

Choose a reason for hiding this comment

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

ํƒœ๊ทœ๋‹˜์ด ์ œ์•ˆํ•ด์ฃผ์‹  ๋ฐฉ๋ฒ•๋„ ์ •๋ง ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์•„์š” !

์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š๊ณ ๋„, ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š” !

ํ•˜์ง€๋งŒ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ Text Field์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค,
setText๋ฅผ ํ˜ธ์ถœํ•ด ๊ณ„์† ๊ฒ€์ฆ์„ ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ snackBar๋กœ ์—๋Ÿฌ๋ฅผ ๊ณ„์† ๋ฑ‰๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์•„์š”.

๊ทธ์ ์„ ํƒœ๊ทœ๋‹˜๋„ ์ˆ™์ง€ํ•˜์…”์„œ, ๋”ฐ๋กœ ํ…์ŠคํŠธ ํ•„๋“œ์ธ ๊ฒฝ์šฐ๋Š” State ๋ณ€๊ฒฝ์— ๊ฒ€์ฆ์„ ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์‹  ๊ฒƒ ๊ฐ™๊ณ ์š” !

๋˜ํ•œ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๊ฒ€์ฆ ๋กœ์ง์ด ์žˆ๋Š” ๊ฑธ ์™ธ๋ถ€์—์„œ๋Š” ์•Œ๊ธฐ ์–ด๋ ค์šด ์ ๋„ ์žˆ๊ณ ์š” ..

์ €๋Š” ์˜คํžˆ๋ ค ์„ค๋ฌธ๊ณผ ์ผ์ • ๋กœ์ง์„ ํ†ต์ผ ์•ˆํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ ๊ฐ™์•„์š”.
๊ฐœ๋ฐœ์ž๋„ ๋‹ค๋ฅด๊ณ , ์„œ๋กœ์˜ ์ƒํ™ฉ๊ณผ ๋„๋ฉ”์ธ์ด ๋‹ค ๋‹ค๋ฅด๋‹ˆ๊นŒ์š” ,,, !

์„ค๋ฌธ ๋„๋ฉ”์ธ์€ ์ƒ๋Œ€์ ์œผ๋กœ TextField ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์„œ,
set ๊ณผ์ •์— validation์„ ํฌํ•จ์‹œํ‚จ๋‹ค๋ฉด, event ์„ ํƒ๊ณผ ๋ฐ๋“œ๋ผ์ธ ์„ค์ •์—๋งŒ ํฌํ•จ๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ด์ „ ๋กœ์ง๊ณผ ๋™์ผํ• ๊บผ ๊ฐ™์•„์š”.

๋งŒ์•ฝ TextField์˜ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ฆ ๋กœ์ง์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜๋ฉด,
๊ธฐ์กด snackbar๊ฐ€ ์•„๋‹ˆ๋ผ TextField์˜ error๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š” !

Copy link
Member

@tgyuuAn tgyuuAn Jan 10, 2024

Choose a reason for hiding this comment

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

์ €๋Š” ์˜คํžˆ๋ ค ์„ค๋ฌธ๊ณผ ์ผ์ • ๋กœ์ง์„ ํ†ต์ผ ์•ˆํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ ๊ฐ™์•„์š”.

๊ฐœ๋ฐœ์ž๋„ ๋‹ค๋ฅด๊ณ , ์„œ๋กœ์˜ ์ƒํ™ฉ๊ณผ ๋„๋ฉ”์ธ์ด ๋‹ค ๋‹ค๋ฅด๋‹ˆ๊นŒ์š” ,,, !


๋„๋ฉ”์ธ์ด ๋‹ค๋ฅด๋‹ค์—๋Š” ๋™์˜๋ฅผ ํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๋„ ๋‹ค๋ฅด๊ณ  ,์„œ๋กœ์˜ ์ƒํ™ฉ์ด ๋‹ค๋ฅด๋‹ค๋ผ๋Š” ์ ์—์„œ๋Š” ์•ฝ๊ฐ„์€ ์˜๊ฒฌ์ด ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์•„์š”...!

์กฐ๊ธˆ ํ‚ค์›Œ๋“œ๊ฐ€ ์Ž˜๋‚˜์š”...? ๊ทธ๋ ‡๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค..




์ด ๋ถ€๋ถ„๋„, ๋ณ€์ˆ˜ ๋ช… ํ˜น์€ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ทœ์น™๊ณผ ๊ฐ™์ด ์ปจ๋ฒค์…˜์˜ ์ผ์ข…์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.

์—ฌ๋Ÿฌ ๊ฐœ์˜ Majorํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ดค์„ ๋•Œ ํด๋ฆฐ ์ฝ”๋“œ์—์„œ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ

์—ฌ๋Ÿฌ ๋ช…์—์„œ ์ž‘์—…ํ–ˆ์„ ๋•Œ์—๋„ ํ•œ์‚ฌ๋žŒ์ด ์ง  ๊ฒƒ ์ฒ˜๋Ÿผ ํŒ€์—์„œ๋Š” ๊ทœ์น™์„ ๋งž์ถฐ ์ž‘์—… ํ•ด์•ผ ํ•œ๋‹ค. ๋ผ๋Š” ๊ฒƒ์„ ์ž˜ ์ง€ํ‚ค๊ณ  ์žˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

https://monsterb.tistory.com/entry/Clean-Code-ํด๋ฆฐ-์ฝ”๋“œ




์ €ํฌ๋Š” ๋ถ„๋ช… ๋Œ€๊ธฐ์—… ํ”„๋กœ์ ํŠธ๋„ ์•„๋‹ˆ๊ณ  Majorํ•œ ํ”„๋กœ์ ํŠธ๋„ ์•„๋‹ˆ๋ผ์„œ ์ด๋Ÿฐ ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„์— ์‹ ๊ฒฝ์“ฐ๋Š” ๊ฒƒ์€ MVP ๋ฐฐํฌ๋ฅผ ์ง€์—ฐ์‹œํ‚ค๊ฒŒ๋งŒ ํ•  ๋ฟ์ด์ง€๋งŒ,

์ถ”ํ›„์—, ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ์—๋Š” ๋ฆฌํŒฉํ† ๋ง ํ•  ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์–ด์š”.

(์ง€๊ธˆ ๋‹น์žฅ ํ•  ํ•„์š”์—†๋‹ค๋Š” ์†Œ๋ฆฌ์™€ ๋™์น˜์ž…๋‹ˆ๋‹ค.)




์„ค๋ฌธ ์—”ํ‹ฐํ‹ฐ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ TextField ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์„œ,

set ๊ณผ์ •์— validation์„ ํฌํ•จ์‹œํ‚จ๋‹ค๋ฉด,

event ์„ ํƒ๊ณผ ๋ฐ๋“œ๋ผ์ธ ์„ค์ •์—๋งŒ ํฌํ•จ๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ด์ „ ๋กœ์ง๊ณผ ๋™์ผํ• ๊บผ ๊ฐ™์•„์š”.

ํ™•์‹คํžˆ ์„ค๋ฌธ ๋“ฑ๋ก์€ TextField ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ set๊ณผ์ •์— ํฌํ•จ ์‹œํ‚ฌ ์ˆ˜ ์—†๋Š” ์ ์ด ์กด์žฌํ•˜๋„ค์š”.

์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ๋Š” ์œ„์— ์ œ๊ฐ€ ๋งํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜๋Š” ์—†์ง€๋งŒ,

์œ„์™€ ๊ฐ™์€ ์ธ์‚ฌ์ดํŠธ๋„ ์กด์žฌํ•จ์„ ์•Œ์•„์ฃผ์…จ์œผ๋ฉด ํ•ด์š”...!




์ง„ํ˜ธ๋‹˜ ๋ง๋„ ์œ„์— ๊ตฌ๋ฌธ์œผ๋กœ ์ธํ•ด ์ €๋ฅผ ์„ค๋“์‹œํ‚ค๋Š”๋ฐ ์ถฉ๋ถ„ํ–ˆ์–ด์š”.

Copy link
Member Author

Choose a reason for hiding this comment

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

ํƒœ๊ทœ๋‹˜ ๋„ˆ๋ฌด ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค ์บฌ์บฌ

ํƒœ๊ทœ๋‹˜ ๋•๋ถ„์— ์ฝ”๋“œ๋ฆฌ๋ทฐ ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ๋ง›(?)์„ ์•Œ์•„๊ฐ€๋Š” ๋Š๋‚Œ์ด์—์š”

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ์„ ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ์ž์—ฐ์–ด๋กœ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋„
์—„์ฒญ ์ €๋ฅผ ์„ฑ์žฅ์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š”

์˜ค์ด์‹œ ๋ฐ์Šค !!

}

companion object {
const val EMPTY = ""
Copy link
Member

Choose a reason for hiding this comment

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

๋งค์ง ๋„˜๋ฒ„๋‚˜ ์ŠคํŠธ๋ง ์ œ๊ฑฐํ•  ๋•Œ ํ•ญ์ƒ ๊ณ ๋ฏผ์ธ๋ฐ์š”,

""๋ฅผ EMPTY๋ผ๋Š” ๋‹จ์–ด๋กœ ์น˜ํ™˜ํ–ˆ์„ ๋•Œ ์–ป๋Š” ์ด์ ์ด ์žˆ์„๊นŒ์š”?

ํ•ญ์ƒ ๊ณ ๋ฏผ์ž…๋‹ˆ๋‹ค.

์‹ฌํ•œ ์‚ฌ๋žŒ๋“ค์€ ๊ฐœํ–‰ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ๋„ ํ•จ์ˆ˜ํ™”ํ•ด์„œ ํ•˜๋”๋ผ๊ณ ์š”.

Copy link
Member Author

Choose a reason for hiding this comment

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

๊ฐ€๋…์„ฑ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ–ˆ์–ด์š” !

ํ•ด๋‹น EMPTY๋Š” ๋‹จ์ˆœํžˆ StateFlow์˜ ์ƒํƒœ๋ฅผ ์ฒซ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ชฉ์ ๋„ ์žˆ์ง€๋งŒ,

์•„๋ž˜์˜ ํ•จ์ˆ˜์—์„œ๋„ ์‚ฌ์šฉ๋ผ์š” !

    private fun clearSurveyQuestionState() { _surveyQuestion.value = EMPTY }

ํ˜„์žฌ๋Š” "" = EMPTY๋กœ ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ,

์ถ”ํ›„ ๋”ฐ๋กœ ์˜๋ฏธ์žˆ๋Š” ์ˆ˜๋ฅผ ์ƒ์ˆ˜ํ™”์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด,
๋‹ค๋ฅธ ํŒ€์›์ด๋‚˜ ์ถ”ํ›„ ๋ณธ์ธ์ด ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค์ง€ ์•Š์„๊นŒ์š” ํžˆํžˆ

์ œ๊ฐ€ ์ƒ์ˆ˜ํ™” ์‹œํ‚ค๋Š” ๊ธฐ์ค€์€
๋ณดํ†ต ๋‹ค ์ƒ์ˆ˜ํ™” ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, StateFlow๋‚˜ ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์˜ ์ฒซ ์‹œ์ž‘์€ ๋”ฐ๋กœ ์ƒ์ˆ˜๋ฅผ ์•ˆ ๋งŒ๋“  ๊ฒƒ ๊ฐ™์•„์š” .

์ƒ์ˆ˜ํ™” ํ•˜๋ฉด, ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ์˜ ์–‘์€ ๋Š˜์–ด๋‚˜๊ธด ํ•˜์ง€๋งŒ, ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์ด๋‚˜ ๊ฐ€๋…์„ฑ์˜ ์ด์œ ๋กœ ์ข‹์ง€ ์•Š์„๊นŒ์š” ?

Copy link
Member

Choose a reason for hiding this comment

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

@jeongjaino

๋งค์ง๋„˜๋ฒ„๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์—๋Š” ์ €๋„ ๋™์˜๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ "๊ณผ์—ฐ String๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ๋นผ๋Š” ๊ฒƒ์ด ์˜ณ์„๊นŒ?" ๋ผ๋Š” ๊ณ ๋ฏผ์„ ๊ณ„์†ํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค.

""๋ฅผ EMPTY๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์น˜ํ™˜ํ–ˆ์„ ๋•Œ, ์ดˆ๊ธฐ ๊ฐ’์ด ""์ธ์ง€ ํ˜น์€ ๋˜ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์•ฝ์†๋œ ๊ฐ’์ธ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋‹ˆ๊น์š”.




Intํ˜•์ด๋‚˜ Floatํ˜•๊ณผ ๊ฐ™์€ Numberํƒ€์ž…์˜ 3.141592๋ผ๋Š” ๊ฐ’์„ PI๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์ƒ์ˆ˜ํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์ด์ ๋งŒ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ˆซ์ž๋“ค์€ ์‚ฌ๋žŒ์˜ ๋ˆˆ์œผ๋กœ ์ฝ์–ด์ง€์ง€๊ฐ€ ์•Š์œผ๋‹ˆ๊น์š”.




ํ•˜์ง€๋งŒ Stringํƒ€์ž…์„ ๊ตณ์ด ์น˜ํ™˜ํ•ด์„œ ๋นผ์•ผํ• ๊นŒ?, ์–ด์ฐจํ”ผ ์ž˜ ์ฝํžˆ๋Š”๋ฐ?

๋ผ๋Š” ์ƒ๊ฐ์ด ํ•œ๋ฒˆ ์”ฉ ๋“ค๊ณคํ•ด์š”.




์˜ˆ์‹œ๋ฅผ ๋“ค์ž๋ฉด,

fun startNewLine(){
    println()
}




ํ˜น์€ joinToString()์„ ์‚ฌ์šฉํ•  ๋•Œ, ์‚ฌ์ด์‚ฌ์ด ๋“ค์–ด๊ฐˆ ๋ฌธ์ž๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋นผ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ.

const val SEPERATOR= "-"






์ด์™€ ๊ด€๋ จํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธ€์„ ํผ์™”์”๋‹ˆ๋‹ค!

image

image

Copy link
Member Author

Choose a reason for hiding this comment

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

ํƒœ๊ทœ๋‹˜ ์ข‹์€ ์ธ์‚ฌ์ดํŠธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค !

์ œ์‹œํ•œ ์˜๊ฒฌ์„ ๋“ค์–ด๋ณด๋‹ˆ, ๋‹จ์ˆœํžˆ EMPTY๋ณด๋‹ค๋Š” ""์ด ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š” ..

์ด๋Ÿฐ RawValue๋ฅผ ์„œ๋กœ ์ปจ๋ฒค์…˜์„ ๋งŒ๋“ค์–ด์„œ ์ง€์ผœ์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค๋ผ๊ณ  ์ƒ๊ฐ์ด๋“ค์–ด์š”!

๋”ฐ๋กœ 0, ""๊ณผ ๊ฐ™์ด ๋‹น์—ฐ์‹œ ๋˜๋Š” ๊ฐ’์€ ๋”ฐ๋กœ ์ƒ์ˆ˜ํ™” ํ•˜์ง€๋ง๊ณ ,

(์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์€ 0์ด ์•„๋‹Œ 1์—์„œ ๋ถ€ํ„ฐ ์™€ ๊ฐ™์ด)
๋‹น์—ฐ์‹œ ์—ฌ๊ธฐ๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ, ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ’์œผ๋กœ ํ•˜๋Š”๊ฑด ์–ด๋•Œ์š” ?

Copy link
Member

Choose a reason for hiding this comment

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

@jeongjaino

์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋˜ ๋ถ€๋ถ„์ด๋ž‘ ์™„์ „ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ถ€๋ถ„ ๋˜ํ•œ ์ปจ๋ฒค์…˜์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

๋„ˆ๋ฌด ๋‹น์—ฐ์‹œ ์ƒ๊ฐ๋˜๋Š” ๋ถ€๋ถ„๋ณด๋‹ค๋Š”, ๊ทธ๋ ‡๊ฒŒ ๋…ํŠนํ•œ ์•„์ด๋“ค(?) ์— ๋Œ€ํ•ด์„œ๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

Comment on lines +225 to +227
val EVENT_SELECTION_INIT: Event =
Event("", "", "", "", DateUtil.generateNowDateTime(), DateUtil.generateNowDateTime())
}
Copy link
Member

Choose a reason for hiding this comment

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

์œ„ ์ฝ”๋ฉ˜ํŠธ์™€ ๋น„์Šทํ•œ๋ฐ,

์ด ๋ถ€๋ถ„์€ ์ƒ์ˆ˜ํ™” ์•ˆ์‹œํ‚จ ์ด์œ ๊ฐ€ ์žˆ์œผ์‹  ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

Copy link
Member Author

Choose a reason for hiding this comment

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

์ฐธ์กฐํ˜• ํƒ€์ž…์€ ์ƒ์ˆ˜๊ฐ€ ์•ˆ๋˜๋Š” ๊ฑธ๋กœ ์•Œ๊ณ ์žˆ์–ด์š” !

ํ•ด๋‹น EVENT_SELECTION_INIT์€ ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, StateFlow์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์ด๊ธฐ๋„ ํ•˜์ง€๋งŒ,
์•„๋ž˜์˜ ์ด๋ฒคํŠธ ๊ฒ€์ฆ ๋กœ์ง์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์–ด์š” !

private fun isNotValidEventSelection() =
        _surveyEventSelection.value.eventId == EVENT_SELECTION_INIT.eventId

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ, ๊ตณ์ด ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์— ํ˜„์žฌ ์‹œ๊ฐ„์„ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์š” !
LocalDateTime์˜ ์ƒ์ˆ˜ MIN, MAX๋กœ ๋ณ€๊ฒฝํ•ด๋†“๊ฒ ์Šต๋‹ˆ๋‹ค์ž‡ ~ !!

Copy link
Member

Choose a reason for hiding this comment

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

์•„์•„ ์ œ ์ฝ”๋ฉ˜ํŠธ๋Š”, "" ๋ถ€๋ถ„์ด EMPTY ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ์ด์œ ์— ๋Œ€ํ•œ ์˜๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค!

Copy link
Member Author

Choose a reason for hiding this comment

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

์•„์˜ˆ ์ƒ๊ฐ์„ ๋ชปํ•œ ๋ถ€๋ถ„์ด๋„ค์š” ,, !

ํ•ด๋‹น ๊ฐ’์— ""๋Œ€์‹  EMPTY๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์˜คํžˆ๋ ค EMPTY๊ฐ€ ์ •๋ง ""์ด ๋งž๋Š”์ง€ ํ™•์ธํ•ด๋ณผ๊บผ ๊ฐ™์•„์š”.

์ถ”ํ›„ ์ˆ˜์ •ํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š” !

@tgyuuAn tgyuuAn added ๐ŸŒŸ๋จธ์ง€ ํ•ด์ฃผ์„ธ์š”๐ŸŒŸ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์™„๋ฃŒ๋œ ๋’ค PR์„ ์˜ฌ๋ฆฐ์‚ฌ๋žŒ์ด Merge๋ฅผ ํ•˜๋ฉด ๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. and removed ๐Ÿ”ฅ๋ฆฌ๋ทฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘๐Ÿ”ฅ PR์„ ์˜ฌ๋ฆฌ๊ณ  ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. labels Jan 10, 2024
@jeongjaino jeongjaino merged commit ecfd5fa into develop Jan 10, 2024
@tgyuuAn tgyuuAn deleted the feature/jaino/#93 branch February 6, 2024 08:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
๐ŸŒŸ๋จธ์ง€ ํ•ด์ฃผ์„ธ์š”๐ŸŒŸ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์™„๋ฃŒ๋œ ๋’ค PR์„ ์˜ฌ๋ฆฐ์‚ฌ๋žŒ์ด Merge๋ฅผ ํ•˜๋ฉด ๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ๐ŸŒฑ๊ธฐ๋Šฅ๐ŸŒฑ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋‘๋‘๋‘ฅ์žฅ! ๐Ÿš€์ง„ํ˜ธ๐Ÿš€ ESTP ์ •์ง„ํ˜ธ 23์„ธ ๐Ÿงนํ—ˆ๋“œ๋ ›์ผ๐Ÿงน ์ข…์†์„ฑ ์ถ”๊ฐ€, ๊ธฐ๋Šฅ๊ณผ ๋ฌด๊ด€ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ
Projects
None yet
2 participants