-Today's Learning Content-

  • Project KPT

1. Project KPT

개념 정리

KPT란?
Keep: 이번 챕터에서 진행한 과정 중 다음에도 유지했으면 하는 부분.
이번주 진행하면서 이건 진짜 잘했다! 자랑할 만한 요소.
다음주에도 유지한다면? (기술, 의사소통 어떤 것이든 좋아요!)
Problem: 이번주 진행하면서 겪은 문제점, 어려웠던 점
해결 방안 : 해당 문제점을 해결할 수 있는 현실적인 방안 제시
Try: 이런 시도도 해보면 좋지 않을까?
다음 주를 위한 노력은?
Feel: 이번 챕터에서 느낀 점

1) 제작한 Project

Introduction to the Project

진짜최종 001

Project Topic: 한 페이지 안에 모바일 키오스크 구현하기

Project Name: iMacDonald

Project Period: 11/25 ~ 11/29 12:00

Wire Frame: 🔗Figma

iMacDonald?

  • 간단하고 발음하기 쉬운 구조
  • 익숙한 두 요소 (i + MacDonald)의 조합으로 높은 회상성
  • i 접두사는 apple의 네이밍 컨벤션을 연상시킴 (iPhone, iPad, iMac 등)
  • IT기술과 전종적인 패스트푸드의 결합을 상징

2) 개인 KPT

Keep

유지했으면 하는 점: 협업을 위한 적극적인 소통, 매일 스크럼을 통해 각자 하루 일과에 대한 보고 및 상호성장을 도모.
잘한 점: GitFlow와 브랜치전략, 커밋 전략 등 프로젝트 시작 전 Git에 대해 상세한 내용을 정하고 실행한 점

Problem

문제점: 일주일이라는 짧은 시간에 적응하지 못하고 프로젝트 스케줄을 제대로 지키지 못함 점
해결방안: 프로젝트 제작에 들어가기에 앞서 서로간의 실력, 구현 난이도 등을 고려하여 현실적인 스케줄을 작성하고, 매일 프로젝트 진행정도를 확인하며 세부조정을 이어나간다.

Try

아쉬운 점: 다른 조의 발표를 보고 UI/UX 디자인에서 좀 더 다양한 아이디어를 받고 다양한 시도를 해볼 수 있었을텐데 과제에서 주어진 구현목표만을 목표로 잡은 탓에 틀에 갇힌 앱 제작을 진행한 것 같다.

Feel

느낀점: 협업과 팀워크의 중요성, 계획, 구성, 기획 등의 중요성 즉, 협업을 할 때 필요한 것과 불필요한 점에 대해 알 수 있었고, 내게 부족한 점은 무엇인지 깨닫게 되었다.

3) Troubleshooting

🚨 1. 메인뷰 오토레이아웃 문제

  • 문제: 메뉴를 담은 카드뷰가 메인뷰에 배치될 때 구성요소들의 오토레이아웃이 틀어지는 문제 발생
  • 해결: 카드뷰 구성 요소들을 카드뷰의 비율로 설정하여 해결
make.height.equalToSuperview().multipliedBy(0.6)

🚨 2. 카드뷰의 BoderColor가 동적으로 업데이트되지 않는 문제

  • 문제: layer.borderColor가 동적으로 업데이트 되지 않는 문제가 발생
  • 해결: iOS 버전에 맞는 보더 컬러 업데이트 로직을 구현하여 해결
// MARK: - Dark Mode Handling
    /// 다크모드 변경 감지 시 호출되는 메서드
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            updateBorderColor()
        }
    }
    
    /// 테마에 따른 테두리 색상 업데이트 메서드
    private func updateBorderColor() {
        self.layer.borderColor = UIColor(named: "CardViewShadowColor")?.cgColor
    }
    
    /// iOS 17 이상에서 테마 변경 감지 설정 메서드
    private func registerTraitChangeHandler() {
        if #available(iOS 17.0, *) {
            registerForTraitChanges([UITraitUserInterfaceStyle.self]) { (self: Self, previousTraitCollection: UITraitCollection) in
                self.updateBorderColor()
            }
        }
    }

🚨 3. 테이블뷰 Index out of range

  • 문제: 테이블뷰에서 셀을 제거하는 액션에서 삭제 순서(row.index)에 따라 앱이 크래시되는 현상 발생
  • 해결: 셀 제거 액션을 수정하고 테이블뷰에서 제거된 행을 삭제하는 코드를 사용하여 오류 해결
cart.remove(at: row) // 삭제 액션 실행시 배열에서 인덱스 제거

// 테이블뷰에서 제거한 행을 삭제
tableView.deleteRows(at: [IndexPath(row: row, section: 0)], with: .none)

🚨 4. 다크모드/라이트모드 전환시에도 뷰 배경색상이 변하지 않음

  • 문제: 다크모드나 라이트모드로 설정을 변경해도 뷰의 배경색이 고정되어 변하지 않음
  • 해결: 배경색상의 컬러를 UIColor.systemBackground로 사용하거나 Asset에서 색상을 정의하여 사용

🚨 5. 메인뷰 스크롤 영역 침범

  • 문제: 메인뷰에서 테이블뷰가 보이지 않을 때도 테이블뷰가 차지하는 영역만큼 스크롤이 되지 않는 문제 발생
  • 해결 1: 테이블뷰의 height를 0으로 설정하고 셀이 업데이트 될 때만 height 값이 늘어나도록 설정 -> height 값이 계속 0으로 고정되어 테이블뷰가 터치되지 않는 문제 발생
  • 해결 2: 테이블뷰를 Hidden으로 설정하고 셀이 추가될 때만 보이도록 설정 -> 테이블뷰 셀이 1개일 때도 테이블뷰 영역 전체가 메인뷰에 영향을 미쳐 스크롤되지 않는 현상 발생
  • 해결 3: 튜터님께 피드백을 받아 hitTest메소드를 활용하여 테이블뷰의 셀이 비어있지 않을 때만 터치가 가능하도록 설정.
 /// 터치 이벤트 처리를 위한 메서드
    /// 테이블뷰 영역 외의 터치는 무시하도록 구현
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        guard !tableView.frame.contains(point) else {
            return super.hitTest(point, with: event)
        }
        return nil
    }

4) 프로젝트 시연

업로드중..

-Today's Lesson Review-

일주일 간의 프로젝트... 크고작은 일들이 있었지만, 무척 충실한 일주일이었다고 생각한다.
개인적인 실력 향상과 협업에서 성장하는 나 자신을 볼 수 있었던 것 같다.
실제 회사에서도 협업을 중시하니, 이런 과정들을 통해 더더욱 회사가 바라는 개발자로 성장할 수 있으리라고 믿는다.
내일도 힘내자
profile
이유있는 코드를 쓰자!!

0개의 댓글