FiveMovies Project (4)

ulls12·2024년 1월 22일
0

Swift TIL

목록 보기
35/60

1. 코드 재사용성 높히기

원래 cell에 영화 포스터를 불러오는 메서드가 작성되어 있었다. 영화 포스터를 불러올 일이 여러 군데에서 쓰이자, 각각의 VC에 서로 포스터를 불러오는 메서드들을 구현했다. 그러다보니, 중복된 코드들이 너무 많게 되었고 가독성이 떨어진다고 생각이 들었다. 그래서 Data에서 public func으로 만들어 전역에서 쓸 수 있게 만들어주었다.

//Data.swift
extension MovieData //class {
    public func movieToImage(movie: Movie, completion: @escaping (_ image: UIImage) -> Void) {
        let moviePosterPathURLSource = "https://image.tmdb.org/t/p/w500\(movie.posterPath)"
        
        //URL 주소를 대입하여 URL 객체 생성
        if let moviePosterPathURL = URL(string: moviePosterPathURLSource){
            
            // URLSession을 사용하여 이미지 다운로드
            URLSession.shared.dataTask(with: moviePosterPathURL) { data, response, error in
                if let data = data {
                    //다운로드된 데이터로 UIImage 객체 생성
                    if let image = UIImage(data: data) {
                        let aspectRatio = image.size.width / image.size.height
                        print("이미지 가로세로 비율: \(aspectRatio)")
                        print("포스터 통신 완료")
                        completion(image)
                    }
                }
            }.resume()
        }
    }
}

// 이미지 구현이 필요한 위치에서
    if (searchMovie?.posterPath) != nil {
        MovieData.shared.movieToImage(movie: _movie, completion: { [weak self] image in
            DispatchQueue.main.async {
                self?.searchImage.image = image

moveToImage()만 구현되면 이렇게 간단하게 구현이 가능하다. 코드 축약이 이루어지고 가독성이 높아진다. 우선 기능 구현에 성공하고, 되돌아보며 코드를 효율적으로 구성하는 방법에 대해서도 꾸준히 생각해봐야겠다.

2. 사용자 관점에서 UI 되돌아보기

빌드를 통해 만들어진 앱을 살피다 보면 코드와 스토리보드에서는 볼수 없었던 불편함이 있을 때가 있다.
1. 예를 들면, 새로운 View로 이동을 했는데 뒤로가기 버튼이 실종되었다거나, 모달 방식으로 구현되어 아래로 쓸어내리면 당연히 뒤로간다고 생각이 들어 버튼 구성을 하지 않았는데 사용자 관점에서는 뒤로 가기 버튼이 없으니 당혹스러울 수 있겠다는 생각이 들었다. 또한 뷰 간의 버튼 위치나 모양 등이 개발을 하다보니 각자 알아서 집어넣었고, 너무 조잡해보이는 경우가 다반사로 발생한다. 그래서, 뒤로가기 버튼 모양을 통일하고 위치를 상단 왼쪽으로 고정시켰다.
2. 빌드를 하고나서도 간과한 사실이 있는데 팀원들끼리는 빌드를 통해 테스트를 진행하는 동안 아이폰에 내장된 키보드를 사용하는 게 아니라, 외장하드 키보드를 사용하여 입력한다. 그러다보니, 키보드가 위로 올라오면서 입력하는 창이 가려진다거나, 리턴 값을 눌러도 키보드가 내려가지 않는 경우를 신경쓰지 못했다. 결과적으로, 완성도가 떨어졌던 것이다. 이런 세세한 부분은 직접 아이폰에서 사용하는 것처럼 직접 사용기를 걸쳐야 부족한 부분이 보인다는 것도 깨달았다.
팀 프로젝트를 하면서 느끼는 점은 기능 구현에 쏟는 시간이 지금은 매우 중요하지만, 현업에서는 회사 또는 클라이언트가 원하는 니즈를 충족시키는 UI부분도 매우 신경써야한다는 것을 느꼈다.

3. 뷰 계층 관리

빌드를 통해 UI에 관해 자세히 관찰하면서 메모리적으로 매우 중요한 부분이 빼먹었다는 것을 깨달았다. 마이페이지 창에서 로그아웃 버튼을 누르면 로그인 창 ( 메인이자 첫 View ) 로 넘어가진다. 근데 넘어가는 방식이 view를 닫고 처음으로 돌아가는 방식이 아니라 지금까지 쌓인 뷰 계층 구조 위에 로그인 뷰를 또 하나 씌우는 것이다. 이렇게 될 경우, 로그아웃과 로그인을 반복하여 앱을 실행시킬 경우 엄청난 메모리 할당이 생겨난다. 그래서 dismiss 키워드를 이용해 뷰를 닫고 초기 화면으로 돌아가는 방법을 채택했다.

총평

기술적인 부분에서는 큰 어려움이 없었으나, 시간적 여유가 생기다보니 사용자 관점에서 바라봤을 때 생기는 문제들이 보이기 시작했다. 전체적인 프로젝트를 진행할 때, 사용자 관점에서 볼 수 있는 QA의 역할도 직접 도맡아야하다보니 디테일이 상대적으로 떨어지는 것 같다. 우선은 기능 구현에 집중하되, 사용자관점에서의 디버깅을 할 시간도 할애해야겠다.

profile
I am 개발해요

0개의 댓글