분류 전체보기 57

iOS앱 TDD로 개발하기 #1

안녕하세요. 크몽에서 iOS앱을 개발중인 gwangyonglee(harry)입니다. 크몽 기술 블로그에서 포스팅했었는데, 개인 블로그에서도 포스팅합니다. 이 글은 TDD를 설명하는 글이 아닌 iOS 앱 TDD 적용기에 대해 작성해보려고 합니다. #1,2로 나누어서 작성할 예정이고, #1에서는 TDD를 적용하게 된 계기와 어떤 식으로 적용하였는지(간단한 예제 포함)에 대해 다뤄보려고 합니다. 그럼 시작하겠습니다. TDD를 적용하게 된 계기 회사에서 프로젝트를 진행할 때 일정 산출들을 하고 계실 텐데 자신이 산출한 일정을 정확히 맞춘 적이 많으신가요? 저는 개발을 진행하면서 생각지도 못한 이슈들이 나올 것을 예상하여 하루 이틀 정도 여유롭게 잡는 편이지만, 그럼에도 불구하고 일정이 딱 맞을 경우도 있고 데드..

iOS 2020.01.03

[Swift] 타입메소드, 인스턴스 메소드란

인스턴스 메소드란 클래스, 구조체, 열거형의 인스턴스에 속한 메소드를 의미합니다. 예제 class Temp { func instanceMethod() { print("instanceMethod") } } let temp = Temp() temp.instanceMethod() 인스턴스 메소드를 호출하기 위해서는 Temp를 인스턴스화 후 해당 메소드를 호출해야합니다. 인스턴스 없이 독립적으로 호출할 수 없습니다. 타입 메소드란 타입 자체에서 호출할 수 있는 메소드를 의미합니다. 클래스를 위한 타입메소드는 func 키워드 앞에 class 키워드를 작성합니다. 구조체와 열거형을 위한 타입메소드는 func 키워드 앞에 static 키워드를 작성합니다. 예제 // class class Temp { class fun..

Swift 2020.01.03

[Swift] 노티피케이션 센터와 노티피케이션

iOS 환경에서 사용하는 옵저버 패턴을 사용하는 노티피케이션 센터와 노티피케이션에 대해 알아보려고 합니다. Notification 등록된 노티피케이션에 노티피케이션 센터를 통해 정보를 전달하기 위한 구조체입니다. 주요 프로퍼티 name : 알림을 식별하는 태그 var name: Notification.Namecs object : 발송자가 옵저버에게 보내려고 하는 객체. 주로 발송자 객체를 전달하는데 쓰입니다. var object: Any?cs userInfo : 노티피케이션과 관련된 값 또는 객체의 저장소 예) 특정 행동으로 인해 작업이 시작되거나 완료되는 시점에 다른 인스턴스로 노티피케이션이 발생 시 필요한 데이터를 같이 넘겨줄 수 있습니다.간단한 예로 네트워킹을 이용하는 앱이라면 네트워킹이 시작 및 ..

Swift 2018.09.16

[Swift] DispatchQueue란?

작업항목의 실행을 관리하기 위한 DispatchQueue에 대해 알아보려고 합니다. DispatchQueue는 작업항목의 실행을 관리하는 클래스입니다. 대기열(큐-Queue)에 추가된 작업항목은 시스템이 관리하는 스레드풀에서 처리하고 작업을 완료하면 스레드를 알아서 해제합니다. DispatchQueue의 장점은 일반 스레드 코드보다 쉽고 효율적으로 코드를 작성할 수 있습니다. 주로 iOS에서는 서버에서 데이터를 내려받는다던지 이미지, 동영상 등 멀티미디어 처리와 같이 CPU사용량이 많은 처리를 별도의 스레드에서 처리한 뒤 메인 스레드로 결과를 전달하여 화면에 표시합니다. 그리고 DispatchQueue를 생성 시 기본은 Serial입니다. Concurrent 유형으로 바꾸려면 별도로 명시만 해주면 됩니다..

Swift 2018.09.14

[Swift] Property - didSet, willSet이란

# didSet, willSet in Swift 스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다. didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다. 참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다.또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시) # didSet, willSet의 활용 프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다. 예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가..

Swift 2018.06.11

[iOS] 내비게이션 인터페이스(Navigation Interface)란

# 내비게이션 인터페이스(Navigation Interface)란? iOS에서 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)입니다. 드릴 다운 인터페이스란 아래 그림과 같이 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스입니다. # 내비게이션 컨트롤러(Navigation Controller) 내비게이션 컨트롤러는 컨테이너 뷰 컨트롤러(container view controller) 내비게이션 스택(navigation stack)을 사용하여 다른 뷰 컨트롤러를 관리합니다. 여기서 내비게이션 스택에 담겨서 콘텐츠를 보여주게 되는 뷰 컨트롤러들을 컨텐트 뷰 컨트롤러(content view controller)라고 ..

iOS 2018.05.22

[iOS] H.I.G(Human Interface Guidelines)란?

# H.I.G(Human Interface Guidelines)란? H.I.G 문서는 애플리케이션을 개발할 때 필요한 디자인과 동작을 포함한 여러 규칙을 통하여 사용자 인터페이스를 어떻게 구성하는 방법에 대한 지침을 제시합니다. H.I.G 문서의 가이드라인을 따라 인터페이스를 작성하면 사용자들로 하여금 새로운 애플리케이션을 처음 접하더라도 대부분의 iOS 사용자에게 익숙한 환경을 제공할 수 있습니다. 좋은 인터페이스를 사용자에게 제공하는 것은 애플리케이션의 사용자를 더 많이 끌어들일 수 있는 하나의 포인트가 될 수 있습니다. # 왜 H.I.G 문서를 하는가애플리케이션을 설계할 때 사용자와 상호작용에 관해 생각하고 설계할 수 있습니다.개발자가 아닌 사용자의 입장에서 애플리케이션을 바라보고 설계할 수 있습니..

iOS 2018.05.21

[Common] 디자인 패턴(Design Pattern)이란?

# 프로그래밍 디자인 패턴이란? 프로그래밍을 하다보면 유사한 상황을 자주 만나게 됩니다. 특정 상황에 사용되는 패턴을 정형화해 두면 이후 비슷한 상황을 마주했을 때 더욱 빠르고 유연하게 대처할 수 있습니다. 디자인 패턴의 저명한 인사들이 내린 정의입니다. • GoF : 특정한 상황에서 일반적 설계문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명. • 라만(C. Larman) : 숙련된 객체지향 개발자 및 기타 소프트웨어 개발자는 소프트웨어 개발의 가이드라인이 되는 일반적인 원칙들과 관용적인 해결책들의 레퍼토리(repertorie)를 구축한다. 패턴은 이러한 원칙들과 관용적 해결책들이 문제와 해결책을 기술하는 구조적인 형태로 체계화되고 명명된 것. # 디자인 패턴의 특징 • 경험을..

Common 2018.05.05

[iOS] Foundation이란?

# Foundation 프레임워크 코코아 터치 프레임워크에 포함된 Foundation은 원시 데이터 타입 String, Int, Double, 컬렉션 타입 Array, Dictionary, Set 및 운영체제 서비스를 사용해 애플리케이션의 기본적인 기능을 관리하는 프레임워크입니다. - Foundation 프레임워크는 데이터 타입, 날짜 및 시간 계산, 필터 및 정렬, 네트워킹 등의 기본 기능을 제공 - Foundation 프레임워크에서 정의한 클래스, 프로토콜 및 데이터 타입은 iOS뿐만 아니라 macOS, watchOS, tvOS 등 모든 애플 SDK에서 사용됨. Foundation에서 제공하는 데이터 타입 및 컬렉션 타입의 대부분은 Objective-C 언어의 기능에서 지원하지 않는 것이기 때문에 언..

iOS 2018.05.04

[Swift] 프로토콜(Protocol)이란

# 프로토콜(Protocol) 정의 - 프로토콜은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 이니셜라이저 등의 요구사항을 정의합니다. 쉽게 말하면, 구조체나 클래스나 열거형에다가 "너는 이 기능이 꼭 필요해.. 그러니깐 이 기능을 꼭 구현해놨어야 해!" 라고 강요하는 것입니다. - 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 기능을 모두 구현합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하진 않습니다. # 프로토콜(Protocol) 정의 protocol 프로토콜 이름 {// 정의} # 프로토콜(Protocol) 상속 - 프로토콜은 하나 이상의 프로토콜을 상속받아 기존 프로토콜의 요구사항보다 더 많은 요구사항을 추가할 수 있습니다. - 프로토콜 상속 문법은..

Swift 2018.05.04