최종 팀프로젝트 TIL(20)

jxxn_a·2023년 11월 6일
1

팀프로젝트

목록 보기
24/33
post-custom-banner

🐱 With All My Animal 🐶

💡 [ 20일차 11/6일 ] 💡

📌 오늘의 기술면접 질문 Q&A

1) 코틀린의 장점

  • 자바와 상호 운용이 가능하며, 자바보다 구문이 간결하여 코드를 더 쉽게 읽고 쓸 수 있다. 또한, 기능적 프로그래밍을 지원하므로 더 읽기 쉽고 유지관리가 쉬운 코드를 더 쉽게 작성 할 수 있다.

2) Intent가 무엇인가요?

  • 개발자가 어떤 의도를 가지고 메서드를 실행할 것인지를 인텐트 담아서 안드로이드에 전달하면 해당 인텐트를 해석하고 실행한다.

  • 안드로이드 4대 컴포넌트 중 사용자와 상호작용을 담당하는 인터페이스인 액티비티는 이 Intent를 통해 다른 Application의 액티비티를 호출 할 수 있습니다.

📌 에러 수정

  • 작성된 일지를 수정할 때 일지의 내용과 사진만 수정하고 저장을 누를 시 태그가 중복되었다는 토스트 메세지가 지속적으로 뜨는 에러가 발생했다.
binding.btnBehaviorAdd.setOnClickListener {
    val chipName = binding.etvMypageBehaviorTag.text.toString()
    if (chipName.isNotBlank()) {
        // 태그 제한 개수 설정
        val maxChips = 3

        class MypageBehavior : AppCompatActivity() {
            return@setOnClickListener
        }

        var isDuplicate = false
        for (i in 0 until binding.chipGroup.childCount) {
            val chip = binding.chipGroup.getChildAt(i) as Chip
            if (chip.text.toString() == chipName) {
                isDuplicate = true
                break
            }
        }

        if (isDuplicate) {
            Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
        } else {
            binding.chipGroup.addView(Chip(this).apply {
                text = chipName
                isCloseIconVisible = true
                setOnCloseIconClickListener {
                    binding.chipGroup.removeView(this)
                    tagListBehavior.remove(chipName)
                }
                chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
                val typeface: Typeface? =

                class MypageBehavior : AppCompatActivity() {
                }
            }
        }
      
											...
                        
                    private fun addChip(chipName: String) {
                        var isDuplicate = false
                        for (i in 0 until binding.chipGroup.childCount) {
                            val chip = binding.chipGroup.getChildAt(i) as Chip
                            if (chip.text.toString() == chipName) {
                                isDuplicate = true
                                break
                            }
                        }

                        if (!isDuplicate) {
                            binding.chipGroup.addView(Chip(this).apply {
                                text = chipName
                                isCloseIconVisible = true
                                setOnCloseIconClickListener {
                                    binding.chipGroup.removeView(this)
                                    tagListBehavior.remove(chipName)
                                }
                                chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
                                val typeface: Typeface? =
                                    ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
                                this.typeface = typeface
                            })
                            tagListBehavior.add(chipName)
                        } else {
                            Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
                        }
                    }
                }
  • 오류가 생긴 이유
    -> 중복된 태그가 계속 추가되었던 것
    (원인: addChip 함수를 여러 번 호출하고 중복 태그를 여러 번 추가했던 것, 추가버튼 클릭 시 중복 확인이 두 번 진행되었던 것)

  • 해결 방안
    -> 중복이 아닌 경우에만 addChip 함수 내에서만 호출하여 태그 추가 (중복 확인 X)
    -> 추가 버튼 클릭 시 태그를 추가 전 중복 확인

  • 해결 된 코드

binding.btnBehaviorAdd.setOnClickListener {
            val chipName = binding.etvMypageBehaviorTag.text.toString().trim()

            if (chipName.isNotBlank()) {
                val maxChips = 3
                if (binding.chipGroup.childCount >= maxChips) {
                    Toast.makeText(this, "최대 $maxChips 개의 태그만 추가할 수 있습니다.", Toast.LENGTH_SHORT)
                        .show()
                    return@setOnClickListener
                }

                val isDuplicate = tagListBehavior.any { it.equals(chipName, ignoreCase = true) }
                if (isDuplicate) {
                    Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
                } else {
                    binding.chipGroup.addView(Chip(this).apply {
                        text = chipName
                        isCloseIconVisible = true
                        setOnCloseIconClickListener {
                            binding.chipGroup.removeView(this)
                        }
                        chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
                        val typeface: Typeface? =
                            ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
                        this.typeface = typeface
                        tagListBehavior.add(chipName)
                    })
                    Toast.makeText(this, "태그가 추가되었습니다.", Toast.LENGTH_SHORT).show()
                    binding.etvMypageBehaviorTag.setText("")
                }
            } else {
                Toast.makeText(this, "태그를 입력해주세요", Toast.LENGTH_SHORT).show()
            }
        }
    }
    
    												...
                                                    
       private fun addChip(chipName: String) {
        binding.chipGroup.addView(Chip(this).apply {
            text = chipName
            isCloseIconVisible = true
            setOnCloseIconClickListener {
                binding.chipGroup.removeView(this)
                tagListBehavior.remove(chipName)
            }
            chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
            val typeface: Typeface? =
                ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
            this.typeface = typeface
        })
        tagListBehavior.add(chipName)
    }
}
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 11월 6일

퍼가요 🐶

1개의 답글