iOS/Swift

    [iOS - Swift] Networking 테스트 코드 작성하기 (feat. URLSession)

    배경 및 원리 오늘은 Network 환경에서 테스트 코드를 작성하는 방법을 알아보려고 함. iOS 환경에서 가장 기본적인 Networking 기술은 URLSession이고, 나 또한 지금 URLSession을 사용하기 때문에 URLSession 환경에서의 테스트 코드를 작성해보려고 함. 여기에 필요한 건 Test Double 개념이고, 그중에서도 Stub 또는 Mock 개념이 필요함. (*현업에서는 상태와 행위를 동시에 검증하는 경우가 많아서 ‘Mock’으로 퉁쳐서 사용한다고 함) 이게 뭐임? Unit Test로 URLSession의 통신 자체를 테스트할 수도 있지만(status code가 200인지), 통신으로 받은 데이터를 잘 가공하는지 테스트해야 함. (통신이 잘 된 후 그 다음 과정을 검증하는 것..

    [iOS - Swift] 의존 관계 역전 원칙 (DIP, Dependency Inversion Principle)

    안녕하세요 K입니다. 오늘은 의존 관계 역전 원칙(DIP,Dependency Inversion Principle)에 대해 알아보겠습니다. DIP에 대해 많이 들어보셨나요? 저는 이번에 Unit Test 코드를 작성 중 MockURLSession 테스트 코드를 작성하면서 이 개념을 만났는데요, 쉽게 이해가 안되기도 하고, 굉장히 중요한 개념이기도 해서 이번 기회에 제대로 공부해보았습니다. 의존 관계 역전 원칙(DIP,Dependency Inversion Principle)이 필요한 이유 우선, 의존 관계 역전 원칙(이하 DIP)을 공부하기 전에 제 성향상 이 개념이 필요한 이유와 상황부터 알아야 하는 지라 이것부터 알아보겠습니다. (특정 개념을 공부하면서 그 이유와 목적을 모른다는 것은 말이 안되겠죠?) ..

    [iOS - Swift] TDD를 위한 Unit Test 코드 작성하기 (Feat. XCTest)

    안녕하세요, 이번에는 Unit Test 코드를 작성하는 방법에 대해 알아보겠습니다. 이전부터 워낙 테스트 코드에 대해 많이 들었어서 중요성은 알고 있었지만, 얼핏 들은 세션에서 너무 어렵게 느껴지는 바람에 지레 겁을 먹은 적도 있습니다. (첫인상이 안좋았습니다.) 하지만 테스트 코드를 넘어 TDD와 CI/CD를 위해서라면 꼭 짚고 넘어가야 하는 개념이기 때문에 꼼꼼히 살펴보도록 하겠습니다. 틀린 부분은 댓글로 언제든지 알려주시면 감사하겠습니다! 왜 테스트 코드를 짜야 하는가? 저는 무언갈 공부하기 전에 그것의 쓰임이나 용도, 필요성을 확실히 느껴야 하는 스타일입니다. 도대체 우리는 왜 테스트 코드를 짜야 하고 저는 이걸 왜 배워야 할까요? '테스트' 코드는 말 그대로 무언갈 시험해보기 위한 코드입니다. ..

    [iOS - Swift] XCTest FAQ (XCTest를 공부하다 생긴 궁금증들)

    이번 게시물에서는 XCTest를 공부하며 생긴 궁금증들을 정리해보겠습니다. XCTest를 작성하는 방법에 대한 글은 이 다음에 바로 올리도록 하겠습니다. 테스트 코드를 작성하기 전에, 무엇을 테스트할지 파악하는 게 우선이다. 밑의 항목은 일반적으로 고려하는 테스트 대상이다. Core functionality: Model classes and methods and their interactions with the controller The most common UI workflows Boundary conditions Bug fixes Test Code의 종류 Unit Test UI Test Performance Test XCTest란? Unit Test, UI Test, Performance Test를 ..

    [iOS - Swift] static func vs func

    코드를 보다 보면, class에서 static func을 자주 볼 수 있습니다. 저도 이번에 XCTest Code를 공부하다가 static func 키워드를 자주 봤는데요, 헷갈리는 부분과 static func과 func과의 차이점, static func을 사용했을 때의 이점을 위주로 정리해봤습니다! 개념 Swift에서 static은 타입의 인스턴스가 아닌 타입 자체에서 호출되는 타입 수준 메서드를 정의하는 데 사용됩니다. 즉, static 메서드는 타입의 인스턴스가 아닌 타입과 연관됩니다. 그렇기 때문에 static 메서드는 타입의 인스턴스를 먼저 생성하지 않고도 타입 자체에서 호출할 수 있습니다. 반면, static을 쓰지 않은 일반 메서드는 해당 유형의 인스턴스와 연관됩니다. 해당 유형의 인스턴스에..

    [Swift] Struct, Initializer (구조체와 이니셜라이저)

    ※ Struct & Class 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용 프로퍼티, 메서드를 사용하여 구조화된 데이터, 기능을 가질 수 있음 하나의 새로운 사용자 정의 데이터 타입을 만들어 주는 것임 ( ex. var animal : Animal 이 뜻은 Animal이라는 데이터 타입을 따르는 animal이라는 변수라는 뜻 ) 구조체와 클래스의 차이는 구조체 인스턴스는 값(value) 타입 : 전달될 값이 복사되어 전달 클래스 인스턴스는 참조(reference) 타입 : 값을 복사하지 않고 참조(주소)가 전달 Struct 구조체 정의가 의미하는 것 구조체를 정의한다는 것은 새로운 타입을 생성해주는 것 기본 타입 이름처럼 Upper Camel Case 적용한다 구조체에..

    [iOS 앱 프로그래밍] 회원가입 화면 구현 - 2. 화면의 전환 (1) 내비게이션 인터페이스

    내비게이션 인터페이스 iOS 애플리케이션에서 화면전환을 위해 사용되는 여러 기법 중 하나. iOS에서 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)이다. 드릴 다운 인터페이스란 아래 그림과 같이 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스이다. 어떻게 구현하나? by 내비게이션 컨트롤러 내비게이션 컨트롤러의 mechanism : stack 개념 내비게이션의 컨트롤러는 2가지 뷰 요소를 화면에 띄운다 -> 컨텐트 뷰 & 내비게이션 바 - 내비게이션 컨트롤러 생성 // 내비게이션 컨트롤러의 인스턴스를 생성하는 메서드입니다. // 매개변수로 내비게이션 스택의 가장 아래에 있는 루트 뷰 컨트롤러가 될 뷰 컨트롤러..

    [iOS 앱 프로그래밍] 회원가입 화면 구현 - 1. H.I.G

    H.I.G H.I.G : Human Interface Guideline 말 그래도 human interface를 구성할 때 참고하는 가이드라인이다. 앱을 만들 때 여러 상황과 항목에 대해서 애플이 어느 정도 지침을 만들어 놓았기 때문에 개발자나 디자이너, 기획자 등등이 참고하여 개발하면 좋다. 애플의 이런 점 덕분에 개발하는 과정에 있어 보다 효율적이다. https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/ Themes - iOS - Human Interface Guidelines - Apple Developer iOS Design Themes As an app designer, you have the oppo..