SWIFT 28

[Swift] 델리게이트(Delegate) 패턴이란

델리게이트 패턴이란? 하나의 객체가 모든 일을 처리하는 것이 아니라 어떤 객체가 해야하는 일을 부분적으로 확장해서 대신 처리하는 것을 뜻합니다. 언제 사용해야하는가? 하나의 객체가 해야하는 일이 여러가지일 때 사용하는 것이 적합합니다. 그 외 객체간 소통할 수 있는 방법 Notification은 한 객체의 변화를 여러 객체들이 관찰해야하는 경우. 즉, 수신받는 객체가 많을 때 사용합니다. Closure같은 경우에는 콜백 블럭을 받기 위한 목적이 분명할 때. 즉, 내부의 블록을 호출시키는 코드를 읽고 다시 돌아와서 추적할 일이 없는 경우일 때 주로 사용합니다. 사용할 때 주의사항 Delegate 프로퍼티 변수를 약한 참조(weak)를 사용하지 않는다면 Strong Reference Cycle, 즉 메모리 ..

Swift 2020.01.03

[iOS] Bounds와 Frame의 차이점

UIView의 Instance Property 중 Frame 과 Bounds가 있는데 이 두개의 차이점에 대해서 알아보겠습니다. Frame https://developer.apple.com/documentation/uikit/uiview/1622621-frame frame - UIView | Apple Developer Documentation The frame rectangle, which describes the view’s location and size in its superview’s coordinate system. developer.apple.com SuperView의 좌표를 기준으로 View의 위치와 크기를 나타낸다. x, y 좌표를 변경하게 되면 자기 자신의 위치가 변경된다. Bounds..

iOS 2020.01.03

[iOS] Cocoa Touch, Foundation, UIKit Framework에 대해서

안녕하세요. 이번 글에서는 iOS 애플리케이션 개발환경 토대인 코코아 터치 프레임워크와 그 하위 레벨 프레임워크인 UIKit, Foundation에 대해 알아보려고 합니다. Cocoa Touch Framework https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Cocoa.html Cocoa (Touch) Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be va..

iOS 2020.01.03

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

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

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

Swift 2018.05.04

[iOS] 셀렉터(Selector)란

# 셀렉터(Selector) - 함수를 직접 지정하는 기능을 가진 일종의 함수 선택자 Selector는 본래 Objecive-C에서 클래스 메소드의 이름을 가르키는 데 사용되는 참조 타입입니다.동적 호출 등의 목적으로 @selector() 어트리뷰트 메소드 이름을 인자값으로 넣어 전달하면 이를 내부적으로 정수값으로 매핑해서 처리하는 형태입니다. 이것이 Swift로 넘어오면서 구조체 형식으로 정의되고, #selector()구문을 사용하여 해당 타입의 값을 생성할 수 있게 되었습니다. Swift4부터는 Selector 타입으로 전달할 메소드를 작성할 때 반드시 @objc 어트리뷰트를 붙여주어야 합니다. 이는 Objective-C와의 호환성을 위한 것으로, Swift에서 정의한 메소드를 Objective-C에..

iOS 2018.05.02