ios 40일차

bin·2026년 2월 26일

회고

오늘은 숙련주차 프로젝트 발제를 진행했다. 프로젝트는 2가지 주제 중 하나를 선택해서 진행하면 된다. 영화 예매 프로그램과 킥보드 대여 프로그램 중 선택할 수 있는데, 팀원과의 논의를 거쳐 영화 예매 프로그램을 구현하기로 결정했다. 난이도는 킥보드 대여 프로그램보다 쉬울 수 있다라고 했지만, 2명의 인원으로 역할을 분리하여 진행하기에 확실하게 완성할 수 있으며, 완성 후 추가적인 기능 개발을 생각하며 주제를 선정했다.

프로젝트에 관한 기록

오늘은 앱을 동작시키기 위해 기본적인 세팅을 진행했으며, 회원가입과 로그인 페이지 구현 및 메서드를 구현했다. 아직 수정해야 할 부분이 존재하지만, 동작을 우선 시 했다.

CoreDataManager.swift

회원가입 기능과 로그인 기능을 동작하기 위해, 회원 정보를 저장하는 메서드와 Email 중복 검사, 로그인 기능을 만들어야 한다. 각 기능은 CoreData를 통해 동작하므로 CoreDataManager에서 구현했다.

saveUser(name: String, email: String, password: String) -> Bool

Email 중복 검사를 통해 존재하는 데이터를 필터링 할 것이므로 간단하게 저장하는 로직만 구현했다.

    func saveUser(name: String, email: String, password: String) -> Bool {
        let user = User(context: context)
        user.name = name
        user.email = email
        user.password = password
        
        do {
            try context.save()
            print("이름: \(name), email: \(email), 비밀번호: \(password) 저장 완료")
            return true
        } catch {
            print("저장 실패")
            return false
        }
    }

isUserExist(email: String) -> Bool?

Email을 입력받고 조건에 따라 없을 경우 true, 있을 경우 false, 조회 실패일 경우 nil을 반환한다. 처음 로직을 구현할 때는 Bool을 통해 true, false로만 구현해도 되지않을까? 라고 생각했지만 true, false는 두가지 케이스만을 나타낼 수 있기에 데이터가 존재하여 false인 것인지 DB를 조회하지 못해서 나타난 오류로 false인지 검증할 수 없다.

    func isUserExist(email: String) -> Bool? {
        let fetchRequest = User.fetchRequest()
        fetchRequest.predicate = NSPredicate(format: "email == %@", email)
        
        do {
            let result = try context.fetch(fetchRequest)
            return !result.isEmpty
        } catch {
            return nil
        }
    }

login(email: String, password: String) -> Bool

단순하게 접근하여 fetchRequest와 predicate를 이용하여 조건을 통해 데이터에 접근했다. 데이터가 isUserExist와 마찬가지로 데이터가 있을 경우 true, 없을 경우 false로 구현했다.

지금보고 느낀건데 위 메서드도 Bool로 구현하는게 맞지않나 ?

        let fetchRequest = User.fetchRequest()
        fetchRequest.predicate = NSPredicate(format: "email == %@ && password == %@", email, password)
        do {
            let result = try context.fetch(fetchRequest)
            return !result.isEmpty
        } catch {
            return false
        }

0개의 댓글