All
44 posts
Swift SwiftUI란?

SwiftUI UIKit과 SwiftUI의 차이점 UIKit - 명령형 SwiftUI - 선언형 SwiftUI의 View State가 Input으로 들어가고 함수 과정을 거쳐 View가 출력되는 형식 @State, @ObservableObject @State @ObsevableObject View-local External Value Type Reference Type Framework Managed Developer Managed SwiftUI의 Data Flow User Interaction을 통해 어떠한 Action이 발생하면 이러한 Action의 변화는 @State (상태)를 변화시키고 그에 대한 Update가 이루어지고 View에 반영되고 나면 Render 과정을 통해 User에게 보여진다. Container View Stack : View를 배치할 때 사용한다. VStack : 수직 HStack : 수평 ZStack : 3차원 LazyStack LazyVStack Laz…

September 25, 2022
iOS
Swift UITableView

UITableView? 데이터들 목록 형태로 보여줄 수 있는 가장 기본적인 UI 컴포넌트 여러 개의 Cell을 가지고 있고 하나의 열과 여러 줄의 행을 지니고 있으며, 수직으로만 스크롤이 가능하다. 섹션을 이용해 행을 그룹화하여 콘텐츠를 좀 더 쉽게 탐색할 수 있습니다. 섹션의 헤더와 푸터에 View를 구성하여 추가적인 정보를 표시할 수 있습니다. Delegate - TableView의 시각적인 부분을 설정하고, 행의 액션 관리, AccessoriesView 지원과 TableView의 개별 행 편집을 도와준다. View가 변경되는 사항을 Delegate가 담당하고 View는 Delegate에 의존하여 View를 업데이트 함. DataSource - TableView를 생성하고 수정하는데 필요한 정보를 TableView 객체에 제공 그렇기 때문에 TableView는 Delegate와 DataSource의 정의에 따라 TableView를 사용자에게 어떻게 표시할 것인지 결정하는데 D…

September 23, 2022
iOS
Swift UIStackView

UIStackView란? 열 또는 행에 View 들의 묶음을 배치할 수 있는 간소화된 인터페이스 AutoLayout을 사용하면 복잡한 제약조건들을 지정해야하는 반면 UIStackView를 활용하면 간단하게 인터페이스를 배치할 수 있다. UIStackView Attribute Axis : 인터페이스 정렬 방향(Vertical - 세로, Horizontal - 가로) Alignment : StackView의 subView들을 어떤식으로 정렬할지 결정하는 속성(Fill, Leading, Top, First Baseline, Center, Triling, Bottom, Last BaseLine) Distribution : StackView 안에 들어가는 뷰들의 사이즈를 어떻게 분배할지 설정하는 속성(Fill, Fill Equally, Fill Proportionally, Equal Spacing, Equal Centering) Spacing : StackView 안에 들어가는 View들의…

September 19, 2022
iOS
Swift ViewController Life Cycle

Life Cycle Appearing 뷰가 화면에 나타나는 중 Appeard 뷰가 화면에 나타나는게 완료된 상태 Disappearing 뷰가 화면에서 사라지는 중 Disappeared 뷰가 화면에서 사라진 상태 viewDidLoad() 뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출 메모리에 처음 로드될 때 한 번만 호출 보통 딱 한번 호출될 행위들을 이 메소드 안에 정의 함 뷰와 관련된 추가적인 초기화 작업, 네트워크 호출 viewWillAppear() 뷰가 뷰 계층에 추가되고, 화면에 보이기 직전에 매 번 호출 다른 뷰로 이동했다가 돌아오면 재호출 뷰와 관련된 추가적인 초기화 작업 viewDidAppear() 뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후 호출됩니다. 뷰를 나타낼 때 필요한 추가 작업 애니메이션을 시작하는 작업 viewWillDisappear() 뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출됩니다. 뷰가 생성된 뒤 작업한 내용을 되돌리는 작업 최종적으로 데…

September 17, 2022
iOS
Swift NavigationViewController로 화면 전환하기

NavigationViewController를 사용하여 화면 전환하기 방법 Segue로 Push Segue로 Present 코드로 Push 코드로 Present Segue로 Push NavigationViewController를 생성하고 RootViewController와 연결한다. Navigation Controller의 Inspector에서 Is Initial View Controller를 선택해 Navigation Controller를 시작하는 Controller로 지정한다. 화면 전환할 새로운 ViewController를 만들고 코드를 작성할 새로운 ViewController파일을 생성하고 연결한다. 화면 전환을 실행할 임의의 버튼을 만들고 해당 버튼에서 새로운 ViewController로 우클릭 드래그한 후에 Segue Action에서 Show를 선택한다. 이 과정을 거치면 버튼을 눌렀을 때 새로운 화면으로 전환되는 것을 확인할 수 있다. 만약 새로운 화면에서 기본적으로 …

August 15, 2022
iOS
Swift Apple MusicKit 활용하기

이번에는 Apple MusicKit을 사용할 일이 있어서 사용방법을 공유해보려고 한다. 먼저 developer.apple.com에서 developer program을 가입해야 한다. 준비 과정 Xcode프로젝트 생성 MusicKit을 사용하기 위해 developer.apple.com에서 Key에 들어가 MusicKit Key와 Identiffiers를 생성한다. (Key는 한 번만 다운로드 받을 수 있으니 꼭 잘 관리해야 한다.) 다운로드 받은 Key 파일을 열어 private Key 값과 developer에 있는 KeyId, developer teamId를 활용해 JWT를 발급 받아야 한다. (JWT란 웹사이트에서 인증 권한을 처리하기 위한 Json형태의 Token이라고 생각하면 될 것 같다.) JWT을 발급 받는 방법은 다양한데 jwt.io 사이트를 활용하는 것도 있지만 저는 https://github.com/pelauimagineering/apple-music-token-ge…

August 12, 2022
iOS
Swift(UIKit)의 화면 전환 개념

Swift(UIKit)의 화면 전환 개념 Content View Controller 화면을 구성하는 뷰를 직접 구현하고 관련된 이벤트를 처리하는 뷰 컨트롤러 Container view Controller 하나 이상의 Child View Controller를 가지고 있다. 하나 이상의 Child View Controller를 관리하고 레이아웃과 화면 전환을 담당한다. 화면 구성과 이벤트 관리는 Child View Controller에서 한다. Container View Controller는 대표적으로 Navigation Controller와 TabBar Controller가 있다. UINavigationController란? 계층구조로 구성된 Content를 순차적으로 보여주는 Container View Controller Navigation Stack 기본적으로 LIFO(Last Input First Output)구조를 가지고 있다. 화면 전환 방법 화면 전환 방법 소스코드를 통해…

July 25, 2022
iOS
Set vertical hugging priority to 252 에러

Set vertical hugging priority to 252 에러 Set vertical hugging priority to 252 에러 - Auto Layout을 활용하여 Constraints를 설정할 때 생기는 에러 예를 들어 UILabel, UIButton 등 텍스트나 이미지에 따라 크기가 결정되는 View들은 다른 View들과 걸린 제약에 의해서 본래 컨텐츠 고유 사이즈보다 더 늘어나거나 줄어들게 되는데 이 때 더 늘어나게 되는 것에 대해 저항하는 제약을 Content Hugging이라고 하고 더 줄어들게 되는 것에 저항하는 제약을 Content Compression Resistance라고 한다. 컨텐츠 고유 사이즈 변경에 대한 제약에도 우선순위가 있는데 이 우선순위에 따라 컨텐츠 고유 사이즈보다 더 늘어나게 되었을 때 사이즈를 늘어나게 할 건지 줄어들게 할 건지 정할 수 있다. 위 에러가 발생했을 때는 hugging priority를 설정하는 것으로 에러를 해결할 수…

July 15, 2022
iOS
Swift AutoLayout과 StoryBoard

Auto Layout & StoryBoard Auto Layout이란? 제약 조건(Constraints)을 이용해서 뷰의 위치를 지정하는 것 여러 해상도에서 같은 화면을 제공하기 위해 사용한다. Outlet Outlet 변수는 Storyboard에 등록한 UIObject에 접근하여 컨트롤하기 위해 변수에 바인딩한 UIObject 변수이다. Outlet 변수를 생성할 때 Storage를 설정하는데 Strong은 다른 곳에서 참조하고 있으면 삭제가 불가능하고 Week는 다른 곳에서 참조하고 있어도 임의적으로 삭제가 가능하다. Strong은 메모리 누수가 발생할 수 있다. Action Action 함수는 동작을 정의하는 함수로 어떤 동작을 할 수 있도록 정의하고 연결시켜주는 역할을 한다. 예를 들어 버튼.

January 23, 2022
iOS
Swift ViewController

ViewController UIView? 애플 문서에는 화면의 직사각형 영역에 대한 내용을 관리하는 개체라고 명시되어 있다. 화면을 구성하는 요소의 기본 클래스라고 생각하면 된다. UIView는 위치와 크기를 갖는 사각형으로 배경색을 가지고있고, 문자나 이미지 등의 컨텐츠를 갖는 것이 가능하다. ViewController 앱의 근간을 이루는 객체로 모든 앱은 최소한 하나 이상의 뷰 컨트롤러를 가지고 있다. 사용자가 화면을 보는 것에 대한 관리 기능을 제공한다. ViewController의 주요 역할 데이터 변화에 따라서 view 컨텐츠를 업데이트 view들과 함께 사용자 상용작용에 응답 view를 리사이징하고 전체적인 인터페이스의 레이아웃 관리 다른 뷰 컨트롤러들과 함께 앱을 구성한다.

January 16, 2022
iOS
Swift UIKit

UIKit 코코아 터치 프레임워크(Cocoa touch Framework)란? iOS 개발환경을 구축하기 위한 최상위 프레임워크이다. 일반적으로 objectC, Swift에서 상속하여 사용하는 UIKit, Foundation 등을 포함한 대부분의 클래스 객체들이 코코아 터치 프레임워크에 속한다. Foundation 가장 기본적인 데이터 타입부터 자료구조, 각종 구조체, 타이머, 네트워크통신, 파일관리 등 기본적인 프로그램의 중심을 담당한다. UIKit UIKit Framework는 사용자의 인터페이스를 관리하고 이벤트를 처리하는게 주 목적인 프레임워크이다. UIKit에서 주로 처리하는 사용자 이벤트로는 제스처 처리, 애니메이션, 그림그리기, 이미지 처리, 텍스트 처리 등이 있다. 또 테이블 뷰, 슬라이더, 버튼, 텍스트필드 등 어플리케이션의 화면을 구성하는 요소도 포함하고 있다. UIKit App의 구조는 기본적으로 MVC 디자인 패턴을 사용한다. Model - 앱의 데이터와 비지…

January 15, 2022
iOS
Swift 고차함수(map, filter, reduce)

고차함수란? 다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수 스위프트에서 제공하는 고차함수 map filter reduce map 예시 기존 배열을 이용해 새로운 배열을 만든다. filter 예시 기존 배열에 조건에 맞지 않는 값을 삭제해 새로운 배열을 만든다. reduce 예시 배열의 모든 값을 더하는 코드이다. result는 누적 값을 뜻하고 element는 배열 요소를 뜻한다. reduceResult에는 배열 요소를 모두 더한 값인 15가 저장된다.

January 07, 2022
iOS
Swift closure(클로저)

closure(클로저)란? 코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 열할을 할 수 있음 일급객체란? 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수 있다. 클로저 표현식 클로저 헤드와 클로저 바디를 구분하기 위해 in 키워드를 사용한다 매개 변수와 리턴이 없는 클로저 예시 매개 변수와 리턴이 없다면 공백으로 두고 print를 호출하는 클로저이다. 호출하는 방법은 함수와 동일하게 변수뒤에 소괄호를 붙여 호출할 수 있다. 매개 변수와 리턴이 있는 클로저 예시 클로저를 호출할 때는 파라미터 이름을 적지 않아야한다. 클로저를 함수의 매개 변수로 전달하는 예시 함수의 매개 변수를 클로저로 받도록 하고 함수를 호출할 때 매개 변수에 클로저를 작성하면 된다. 클로저를 반환하는 함수 예시 후행 클로저 클로저를 여러개 사용하거나 보기 불편할 정도로 길어질 때 후행 클로저를 사용하여 코드를 더 짧게 작성할 수 있다. 예…

January 02, 2022
iOS
Swift try-catch 에러처리

에러 처리란? 프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정 Swift 에러 처리 발생(throwing) 감지(catching) 전파(propagating) 조작(manipulating) 에러 발생시키는 방법 throw throw 키워드를 사용하면 에러를 발생시켜 에러를 확인할 수 있다. 예시 핸드폰의 배터리 상태를 리턴하는 함수이다. 위 함수와 do-catch, try?, try!를 사용하여 에러를 처리할 수 있다. do-catch 사용법 예시 try? 예시 위 코드와 같이 try?를 사용하여 에러 처리를 할 수 있는데 에러가 발생했다면 nil을 할당하고 에러가 발생하지 않았다면 옵셔널에 감싸져 출력되게 된다. try! try!를 사용할 땐 에러가 절대 발생하지 않을 때만 사용해야 한다. 만약 try!를 썼을 때 에러가 발생한다면 런타임에러가 발생하며 프로그램이 종료된다.

January 01, 2022
iOS
Swift 옵셔널 체이닝

옵셔널 체이닝이란? 옵셔널에 속해 있는 nil 일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정 예시 Company 구조체 안에 nil이 할당될 수 있는 Developer타입 옵셔널 변수 developer를 선언하고 해당 값을 꺼내올 때는 항상 옵셔널 바인딩을 해야한다. 옵셔널 체이닝을 할 때 ?를 쓰면 값이 nil일 수도 있기 때문에 옵셔널에 감싼채로 출력이 되고, !를 쓰면 옵셔널을 강제로 해제하여 출력된다. (강제 해제 방법은 되도록 쓰지 않는 것이 좋다. nil일 때 에러 발생.)

December 30, 2021
iOS
Swift 열거형

열거형이란? 연관성이 있는 값을 모아 놓은 것을 말한다. 예시 위와 같이 연관된 항목들을 선언할 수 있다. 두번째 열거형과 같이 한 줄로 작성해도 된다. 각 항목은 그 자체가 고유값이 된다. 열거형의 항목을 가진 변수를 선언할 수 있고 값 변경도 가능하다. switch 활용 예시 열거형의 각 항목들은 그 자체로 고유한 값으로 쓸 수 있지만 원시값을 가지게 할 수 있다. 이 말은 특정 타입으로 지정된 값을 가질 수 있다는 말이다. 예시 위와 같이 열거형에 타입을 지정해주고 각 항목에 원시값을 할당하면 switch 구문과 같이 rawValue를 통해 원시값을 가져올 수 있다. 반대로 원시값을 이용해 변수를 선언할 수도 있다. 예시 CompassPoint의 매개변수로 rawValue를 넘겨주게되면 해당 원시값을 가진 항목으로 변수를 선언할 수 있다. 열거형은 연관값도 가질 수 있다. 예시 연관값을 주려면 항목 옆에 소괄호()를 붙여주면 된다. 열거형의 항목이 연관값을 가진다고 모든 항목…

December 29, 2021
iOS
Swift Extension

Extension(익스텐션)이란? 기존의 클래스, 구조체, 열거형, 프로토콜애 새로운 기능을 추가하는 기능 (기존의 있는 기능을 오버라이딩할 순 없다.) 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 사용법 예시 짝수, 홀수를 판별하는 기능을 추가한 extension이다. 참고로 extension은 연산프로퍼티는 추가할 수 있지만, 저장프로퍼티는 추가할 수 없다. 또 타입에 정의되어 있는 기존의 프로퍼티에 프로퍼티 감시자를 추가할 수 없다.

December 28, 2021
iOS
Swift 타입캐스팅

타입 캐스팅이란? 인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 취급하는 방법 타입 캐스팅 연산자 is - 값의 타입을 확인할 때 사용한다. as - 값의 타입을 다른 타입으로 지정할 때 사용한다. 자세한 건 예시를 보며 알아보자 is, as를 사용하기에 앞서 먼저 클래스들을 생성한다. 위 코드는 MediaItem Class를 상속받는 Movie Class와 Song Class를 만들어주었다. 다음은 MediaItem을 담는 배열을 만들었다. 원래라면 같은 타입만 하나의 배열에 저장할 수 있지만 현재는 Movie Class와 Song Class 모두 MediaItem을 상속받고 있기 때문에 MediaItem 타입의 매열을 만들어 줄 수 있다. is 예시 library 배열 안에 있는 값의 타입을 확인하고 개수를 세는 코드이다. if문을 보면 item is Movie 라고 되어있는데 이것은 현재 item이 Movie냐? …

December 23, 2021
iOS
Swift Inheritance(상속)

상속(Inheritance)이란? 부모가 자식에게 재산을 물려주는 행위 보통 부모클래스가 자식클래스에게 기능을 물려주는 행위라고 보면 된다. 클래스 종류 부모클래스(SuperClass) 자식클래스(SubClass) 기본클래스(BasicClass) 상속없이 평소에 쓰던 클래스들을 BasicClass라고 볼 수 있다. 사용법 class 클래스 이름: 부모클래스 이름 { 하위클래스 정의 } 예시 위와 같이 VehicleClass를 상속받은 BicycleClass 인스턴스는 VehicleClass의 프로퍼티에 접근하여 값을 확인 및 변경이 가능한 것을 볼 수 있다. 오버라이딩 상속받는 부모클래스에 있는 함수와 같은 이름의 함수를 만들 때 사용한다. 예시 위와 같이 SuperClass에 있는 makeNoise함수와 이름이 같은 함수를 Train에서 정의할 때 override 키워드를 사용하여 같은 이름의 함수를 만들 수 있다. 만약 오버라이딩을 한 후에 SubClass에서 Super…

December 22, 2021
iOS
Swift Protocol

프로토콜이란? 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진 사용법 protocol 이름 { } 예시 protocol을 채택해 만든 struct이다. class에도 같은 방법으로 프로토콜을 채택할 수 있지만 class가 상속받는 SuperClass가 있다면 SuperClass를 맨 앞에 써야한다. 프로토콜에서 변수를 선언할 때는 항상 var(변수)로 선언해야 하며 읽기,쓰기 전용인지 읽기 전용인지 정의할 수 있다. 프로토콜에서 타입 프로퍼티를 요구하려면 항상 static 키워드를 사용해야 한다. 위와 같이 함수를 사용할 수 있다. class에서 프로토콜의 생성자 요구사항을 준수하려면 required 식별자가 꼭 필요하다. (만약 class 자체가 상속받을 수 없는 finalClass라면 required 식별자가 필요없다.) (구조체에서는 필요없다.)

December 22, 2021
iOS
Swift 클래스와 구조체의 차이

클래스와 구조체의 차이 클래스와 구조체의 공통점 값을 저장할 프로퍼티를 선언할 수 있습니다. 함수적 기능을 하는 메서드 선언 할 수 있습니다. 내부 값에 .을 사용하여 접근할 수 있습니다. 생성자를 사용해 초기 상태를 설정할 수 있습니다. extension을 사용하여 기능을 확장할 수 있습니다. Protocol을 채택하여 기능을 설정할 수 있습니다. 클래스와 구조체의 차이점 클래스 참조 타입 ARC로 메모리를 관리 상속이 가능 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있음 deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있음 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경 시키면 모든 변수에 영향을 줌(메모리가 복사 됨) 구조체 값 타입 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당됩니다. 즉 같은 구조체를 여러 개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않음(값 자체를 복사) 값타…

December 21, 2021
iOS
Swift 프로퍼티(Property)

Property(프로퍼티) 프로퍼티의 종류 저장 프로퍼티 연산 프로퍼티 타입 프로퍼티 저장 프로퍼티 저번에 클래스의 인스턴스는 참조타입이고 구조체의 인스턴스는 값타입이라고 했었는데 때문에 클래스는 클래스의 인스턴스가 상수로 선언되어도 클래스 내의 프로퍼티가 변수로 선언되었다면 값을 변경할 수 있지만, 구조체는 구조체의 인스턴스가 상수로 선언되면 구조체의 인스턴스 내의 프로퍼티가 변수로 선언되어도 값을 변경할 수 없다. 구조체 예시 클래스 예시 연산 프로퍼티 저장 프로퍼티는 클래스나 구조체에서만 사용 가능했지만 연산 프로퍼티는 클래스, 구조체, 열거형에서 사용 가능하다. 연산 프로퍼티는 값을 직접적으로 저장하지 않는 대신에 getter와 setter를 사용해서 다른 프로퍼티와 값들에 직접적으로 접근할 수 있다. (getter만 쓰고 setter를 쓰지 않으면 읽기 전용 프로퍼티로 사용할 수 있다.) 프로퍼티 옵저버 프로퍼티 옵저버는 프로퍼티 값의 변화를 감지하고 반영한다. 새로운…

December 20, 2021
iOS
Swift 클래스와 구조체

클래스와 구조체 프로그래머가 데이터를 용도에 맞게 표현하고자 할 때 용이하다. 프로퍼티와 메서드를 사용해서 구조화된 데이터와 기능을 가질 수 있어 하나의 새로운 사용자 정의 데이터타입을 만들어 준다. 사용법은 거의 같다. 하지만 다른 점이 있다. 구조체의 인스턴스는 값타입이고 클래스의 인스턴스는 참조타입이다. 구조체 정의 struct 구조체 이름 { 프로퍼티와 메서드 } 구조체 예시 프로퍼티 값 변경 함수 사용 클래스 클래스 정의 class 클래스 이름 { 프로퍼티와 메서드 } 예시 초기화(Initialization)란? 클래스 구조체 또는 열거형의 인스턴스를 사용하기 위한 준비 과정 예시 초기화 해제(Deinitialization) 이니셜라이저와 반대 역할을 한다. 인스턴스가 메모리에서 해제되기 직전에 호출된다. 클래스 인스턴스와 관련하여 원하는 정리 작업을 구현할 수 있다. 클래스 인스턴스에만 구현할 수 있다. 예시 인스턴스에 nil이 들어가면 deinit가 호…

December 16, 2021
iOS
Swift 옵셔널과 옵셔널 바인딩

옵셔널이란? 값이 있을 수도 있고 없을 수도 있다. 예시) 이 두 코드는 얼핏 보기엔 ‘값이 없는 건 똑같은 거 아니야?‘라고 생각할 수 있지만 첫번째 코드는 빈 문자열이 들어있고 두번째 코드는 값이 없는 상태로 둘은 엄연히 다른 코드이다. (nil은 다른 언어에서의 null과 같다.) nil을 할당할 수 있는 것을 바로 옵셔널이라고 하는데 위 코드처럼 타입 뒤에 ?를 붙여 사용하면 된다. 옵셔널로 선언된 변수의 초기값을 선언하지 않으면 기본값은 nil이 들어간다. 물론 타입에 맞는 값으로 초기화하여 선언할 수 있다. 주의할 점은 아래와 같이 옵셔널이 아닌 변수에 옵셔널을 할당하려고 하면 에러가 발생한다. 옵셔널 변수에 nil이 아닌 값이 할당되어있는 상태여도 마찬가지이다. 이유는 옵셔널 변수에는 지금 값이 있더라도 언제든지 nil이 할당될 수 있기 때문이다. 옵셔널이 아닌 변수에 nil이 들어가면 에러가 생기는데 그런 상황을 미연에 방지하기 위해서이다. 옵셔널 바인딩이란? 옵셔널…

December 15, 2021
iOS
Swift 반복문

반복문이란? 반복적으로 코드가 실행되게 만드는 구문. 반복문 구문 for-in 사용 방법 for 루프상수 in 순회대상 { 실행구문 } 루프상수는 반복문 내에서만 사용가능하다. 범위 연산자를 사용한 예시) 배열을 사용한 예시) while 사용 방법 while 조건식 { 실행구문 } 예시) 5가 들어있었던 변수 number가 10보다 작을 때만 1을 더하는 while문이다. repeat-while (다른 언어의 do-while) 조건을 충족하지 못하더라도 무조건 한 번이상 실행되는 반복문. 사용 방법 repeat { 실행구문 } while 조건식 예시) x는 6이고 조건은 6보다 작을 때 실행되도록 하였지만 repeat-while문은 무조건 한 번은 실행되기 때문에 8이 출력되는 것을 확인할 수 있다.

December 04, 2021
iOS
Swift 조건문

조건문이란? 주어진 조건에 따라서 어플리케이션을 다르게 동작하도록 하는 것을 말한다. 조건문 구문 if 사용법 if 조건문1 { 실행구문 } else if 조건문2 { 실행구문 } else { 실행구문 } 예시 if 구문은 위처럼 사용하게 되는데 조건이 많다면 if-else if-else 방식으로 여러 조건을 사용할 수 있다. 필요하지 않다면 else-if, else는 생략해도 된다. switch 사용법 switch 조건대상 { case 조건1: 실행구문 case 조건2: 실행구문 default: 실행구문 } case는 조건을 검사하기 위함이고 default는 모든 조건에 해당하지 않았을 때 실행된다. 예시 switch 구문은 위처럼 사용하게 되는데 여러가지 조건을 검사하기 위해 사용된다. switch 구문에서 범위 연산자를 사용한 예시.

December 03, 2021
iOS
Swift Collection Type

컬렉션 타입(Collection Type)이란? 컬렉션 타입은 데이터들의 집합 묶음이다. Swift에는 3개의 컬렉션 타입이 존재하는데 Array, Dictionary, Set이다. Array 데이터 타입의 값들을 순서대로 저장하는 리스트 빈 Array 선언 방법 값 추가 특정 인덱스에 값 추가 특정 인덱스의 값 삭제 특정 인덱스 값 확인 Dictionary 순서없이 키(Key)와 값(Value) 한 쌍으로 데이터를 저장하는 컬렉션 타입 빈 Dictionary 선언 방법 키와 값 추가 이미 존재하는 키의 값 변경 특정 키 삭제 Set 같은 데이터 타입의 값을 순서없이 저장하는 리스트 (중복 데이터를 허용하지 않음) 빈 Set 선언 방법 (축약 문법을 허용하지 않음) 값 추가 중복 값을 허용하지 않기 때문에 같은 값을 여러번 추가해도 하나만 존재하는 것을 확인할 수 있다. 값 삭제

December 02, 2021
iOS
Swift 함수란?

함수란? 함수는 작업의 가장 작은 단위이자 코드의 집합이다. 함수 사용 방법 함수 사용 예시 매개변수가 없는 함수 반환 값이 없는 함수 매개변수에 기본값이 주어지는 함수 전달인자 레이블을 사용하는 함수 전달인자 레이블을 사용하면 사용자 입장에서 매개변수의 역할을 조금 더 명확하게 해줄 수 있다. 전달인자 레이블을 사용하지 않기 위해서는 위처럼 파라미터 이름 앞에 언더바를 붙여주면 함수를 사용할 때 파라미터 이름을 쓰지 않아도 된다. 가변 매개변수 사용 함수 위처럼 가변 매개변수를 사용할 매개변수 타입 뒤에 …을 붙이면 해당 매개변수는 가변 매개변수가 된다. 가변 매개변수로 전달받은 값은 배열의 형태로 넘어오는 것을 확인할 수 있다. 주의할 점은 가변 매개변수는 함수 당 하나만 선언이 가능하다. 참고 https://fastcampus.co.kr/dev_online_iosappfinal

December 01, 2021
iOS
Xcode에서 Playground 생성하기

Playground란? WWDC 2016 컨퍼런스에서 처음 발표된 Apple Inc.에서 개발한 Swift 프로그래밍 언어를 위한 교육 도구 및 개발 환경이다. 매우 간단하게 직접 코드를 짜면서 Swift언어를 배울 수 있는 방법이지만 나는 이것을 최근에 알았다.. (그 전에는 커맨드라인을 사용해왔다.) Xcode에서 Playground를 생성하는 법 Xcode 화면의 왼쪽 상단에 보이는 File → New → Playground 순서대로 선택하여 원하는 폴더에 생성하면 된다. 기본으로 제공되는 코드를 실행하면 아래와 같이 나오는 것을 확인할 수 있다. 정말 편하다고 느낀 것을 코드 왼쪽에 보면 실행버튼이 있는데 해당 버튼을 누르면 따로 print처럼 사용하지 않아도 해당 코드의 결과를 왼쪽에서 바로 보여주기 때문에 편할 것 같다.

November 28, 2021
iOS
Swift 네이밍 규칙 및 기본데이터 타입

Swift의 네이밍 규칙 네이밍 규칙에는 크게 Lower Camel Case와 Upper Camel Case 두가지가 있는데 언제 어떤 방식을 사용하는지 알아보자 Lower Camel Case function method variable constent Upper Camel Case class struct enum extension 변수 및 상수 선언 방법과 데이터 타입 변수 var 추후에 var로 선언된 변수의 값을 바꿀 수 있다. 타입 추론 값의 타입이 명확하다면 타입은 생략이 가능하다. 상수 let 값이 할당된 후에는 변경이 불가능하다. 하지만 선언할 때 값을 할당하지 않고 따로 값을 할당해줄 수 있다. 데이터 타입 Character - 유니코드를 사용하여 한글자만 할당 가능한 타입 (ex> ‘a’, ‘가’, ’😀’ 등) String - 문자열 Int - 64bit 정수형 UInt - 부호가 없는 64bit 정수형 Float - 32bit 부동 소수점 Double - 64bi…

November 26, 2021
iOS
SwiftUI 시작하기

SwiftUI란? 공식사이트에서는 “SwiftUI는 최소한의 코드만으로 Swift의 성능을 사용하여 모든 Apple 플랫폼에서 사용할 수 있는 앱을 개발 가능하다” 라고 나오지만 어떤 것인지 더 자세히 공부하기 위해 포스팅을 해보려고 한다. 먼저 SwiftUI는 UIKit 위에서 빌드되는 프레임워크로 선언형 방식의 구조를 가지고 있다. SwiftUI 프로젝트를 생성하면 SceneDelegate.swift, ContentView.swift, Preview Content라는 폴터가 생기는데 이것들은 무엇일까. SceneDelegate는 멀티 윈도우 같은 기능을 지원하기 위해 Delegate이다. AppDelegate와는 달리 각 화면의 인스턴스 단위로 작동시킬 수 있다. ContentView는 제일 먼저 출력되는 View로 SceneDelegate에 Scene 메서드에 선언되어 있다. Preview Content는 Xcode에서 Simulator 없이 미리보기 화면을 제공하는 Canv…

November 24, 2021
iOS
SwiftUI @State, @Binding, @ObservedObject

프로퍼티 래퍼(Property Wrapper)란 무엇인가? 프로퍼티 래퍼는 Swift5.1부터 추가된 어노테이션으로 사용자가 별도의 코딩 없이 어노테이션만 선언해도 뷰에서 수정이나 읽기가 가능하도록 캡슐화를 대신해준다. 변수 앞에 $를 붙이면 프로퍼티 래퍼 자체를 받기 때문에 WrapperValue 자체를 변경할 수 있다. @State란 무엇인가? @State 변수에 변화가 일어나면 View를 다시 그려준다. 하지만 private하기 때문에 View의 body안에서만 접근해야한다. 따라서 현재 화면에서 잠깐 사용할 목적으로 사용하는 것이 적합하다. @State 변수는 Heap에 할당되고 View에는 포인터만 있는 방식으로 되어있다. 그렇기 때문에 변화가 감지되면 새로운 View로 포인터를 옯기는 방식으로 View의 상태를 저장하고 변경한다. @Binding이란 무엇인가? @State 변수에 $를 붙여서 사용할 수 있다. 위에서 말했듯이 WrapperValue 자체를 변경한다. 예를…

November 24, 2021
iOS
NotificationCenter 동작 방식과 활용 방안

Notification Notification Center를 통해 등록된 모든 Observer에게 정보를 브로드캐스트하는 컨테이너. NotificationCenter 동작 방식 특정 객체가 NotificationCenter에 등록된 Event를 발생시키면 해당 Event를 처리할 것이라고 등록된 Observer들이 Event에 대한 행동을 취하는 것이 NotificationCenter가 동작하는 방식이다. 이렇게 특정 객체가 Event를 발생시키는 것을 Post라고 한다. Listener (observer) : notifications를 감지 Sender : 필요할 때 notifications 를 보내주는 역할 itself : notification center 그 자체. Observer가 관찰 시작 → 작업이 발생하면 Sender가 Post → Observer selector 실행

October 21, 2021
iOS
Delegate란 무언인가 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오.

Delegate란? Delegate 란 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에게 위임하는 것이다. 객체의 행동을 단순화 시키고 객체간 결합성을 최소화하는 장점이 있다. Retain Retain cycle은 메모리가 해제되지 않고 유지되어 누수가 생기는 현상을 말하며 두 객체간의 참조가 강한 순환참조가 생겨 메모리에서 해제되지 않는 현상이다. 따라서 Delegate 또한 객체간의 참조가 이루어 지기 때문에 retain cycle 현상이 발생할 수 있다.

October 20, 2021
iOS
Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있을까?

Foundation이란? Apple에서 제공하는 기본 프레임워크인 코코아 터치 프레임워크에 포한되어 있는 프레임워크이다. Foundation 프레임워크는 데이터 스토리지 및 지속성, 텍스트 처리, 날짜 및 시간 계산, 정렬 및 필터링, 네트워킹을 포함한 애플리케이션과 프레임워크에 대한 기본 기능 계층을 제공한다. Foundation에서 정의한 클래스, 프로토콜, 데이터 유형은 MacOS, iOS, watchOS, tvOS SDK 전반에 걸쳐 사용된다. 포함된 클래스 Collections(Sorting, Type…) Strings Dates and times URLs(Networking) XML data Ports and sockets Notification Center interaction

October 19, 2021
iOS
iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가?

UIKit UI(User Interface) Kit Framework는 사용자 인터페이스를 관리하고, 이벤트를 처리하는게 주 목적인 Framework이다. macOS에서는 Application Kit(AppKit) Framework를 사용했었지만 iOS로 넘어오면서 UIKit으로 대체되었다. UIKit에서 주로 처리하는 사용자 이벤트로는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등이 있다. 또한 테이블뷰, 슬라이더, 버튼, 텍스트 필트, Alert 창 등 Application의 화면을 구성하는 요소도 포함된다. UIViewController, UIView, UIAlertController 등 앞에 UI가 붙는 클래스들을 사용하려면 반드시 UIKit을 상속해야한다.

October 15, 2021
iOS
앱이 In-Active 상태가 되는 시나리오

앱이 In-Active 상태가 되는 시나리오를 설명하시오. Foreground In-Active와 Active를 합쳐서 Foreground라고 한다. In-Activeg App이 실행 중이지만 이벤트를 받지 않는 상태 시나리오 사용자가 앱을 실행했을 때 Not Running -> In-Active -> Active 앱 실행 도중 홈 버튼을 눌렀을 때 Active -> In-Active -> Background 앱을 다시 켰을 때 Background -> Active 앱이 백그라운드에 있다가 Suspended 상태로 전이 Active -> In-Active -> Background -> Suspended

October 12, 2021
iOS
SceneDelegate란?

SceneDelegate란? SceneDelegate는 Xcode11부터 iOS App 탬플릿 생성 시 자동으로 추가된다. iOS13 이상부터는 SceneDelegate가 AppDelegate의 일부 역할을 담당한다. 여기서 중요한 점은 window의 개념이 Scene 개념으로 대체된다는 것이다. 앱에 둘 이상의 Scene이 있을 수 있으며, 앱의 사용자 인터페이스 및 콘텐츠의 배경으로 사용된다. Scene이 있는 하나의 앱을 갖는 개념은 iOS 및 iPadOS에서 다중 창앱을 빌드할 수 있습니다. 자동으로 생성되는 SceneDelegate에는 active, resign and disconnect와 같은 친숙한 라이프사이클이벤트가 있습니다. SceneDelegate는 delegate를 사용하며 일반적으로 모든 장면에 응답한다는 점에 유의해야합니다. 하나의 Delegate를 정의하여 앱의 모든 Scene에서 사용합니다. SceneDelegate에 있는 함수들 SceneDe…

October 09, 2021
iOS
iOS App 상황별 Delegate Method

애플리케이션이 실행된 직후 사용자의 화면에 보여지기 직전에 호출 애플리케이션이 최초 실행될 때 호출되는 메소드 애플리케이션이 InActive 상태로 전환되기 직전에 호출 task 일시정지, 타이머 비활성화, 일시정지(게임) 애플리케이션이 백그라운드 상태로 전환된 직후 호출 애플리케이션이 Active 상태가 되기 직전, 화면에 보여지기 직전에 호출 애플리케이션이 Active 상태로 전환된 직후 호출 애플리케이션이 종료되기 직전에 호출

October 05, 2021
iOS
iOS App 상태별 제약사항

iOS App 상태별 제약사항에 대해 알아보자 not Running : 앱이 실행되지 않은 상태 Foreground : App이 실행되어 클라이언트에게 보여지고 있는 상태 Inactive : 앱이 실행중이지만 아직 아무런 이벤트를 받지 않은 상태 (Foreground 상태에서 전화가 왔을 때, 잠금상태, 멀티태스킹 스크린에서는 Inactive 상태를 가진다.) Active : 앱이 실행중이며 현재 이벤트를 받고 있고 발생한 상태 Background : 앱이 백그라운드에 있는 상태지만 여전히 실행중인 상태 Suspened : 앱이 백그라운드에 있고 실행되는 코드가 없는 상태 (App은 여전히 메모리에 존재하며 Suspened 상태가 될 당시의 상태를 저장하고 있지만, CPU나 배터리를 소모하지 않습니다. 언제든지 메모리 부족등의 이유로 종료됨.) 앱의 상태별 제약사항 Foreground mode는 메모리 및 기타 시스템 리소스에 높은 우선순위를 가지며 시스템은 이러한 리소스를 …

October 02, 2021
iOS
Bounds와 Frame의 차이

Bounds와 Frame Bounds와 Frame의 차이를 공부하기 전에 먼저 Bounds와 Frame이 뭔지 알아보자 Bounds와 Frame은 UIView의 instance property다. Bounds와 Frame 둘 다 CGRect Type이기 때문에 origin과 size를 가진 사각형으로 그려진다. Frame SuperView(상위뷰)의 좌표시스템 안에서 View의 origin과 size를 나타낸다. 여기서 상위뷰란 한단계 상위뷰를 의미한다. 예를 들어 Frame으로 정의된 View의 origin이나 size를 출력하면 해당 View의 상위뷰 origin과 size가 출력된다. 또한 origin과 size를 수정했을 때도 마찬가지로 상위뷰의 origin과 size가 수정된다. Bounds View의 위치와 크기를 자기 자신의 좌표시스템안에서 origin와 size를 나타낸다. 예를 들어 Bounds로 정의된 View의 origin이나 size를 출력하면 해당 View의…

September 30, 2021
iOS
iOS 개발할 때 실제 디바이스가 없으면 할 수 없는 것

개발할 때 디바이스가 없으면 할 수 없는 것 하드웨어 가속도 센서, 가압계 센서, 주변광 센서, GPS 센서 기능을 사용할 수 없다. 마우스로 시뮬레이터의 터치를 하기 때문에 두 소가락으로 하는 줌인 줌아웃 등의 기능을 테스트 할 수 없다. 카메라를 사용할 수 없다. 마이크를 사용할 수 없다. 전화기능을 사용할 수 없다. API Apple의 푸시 알림 받기와 보내기 기능을 사용할 수 없다. 사진, 연락처, 캘린더에 엑세스하기 위해 개인 정보 보호 알림을 지원하지 않는다. Handoff 기능을 사용할 수 없다. MessageUI 기능을 사용할 수 없다. 그 외 맥의 성능이 아이폰의 성능보다 훨씬 뛰어나 CPU나 메모리 부담이 얼마나 되는지 알 수 없다. 내트워크 속도 태스트를 할 수 없다. 페이스 아이디는 직접 얼굴 인식은 안되지만 인식됨, 안됨 처리는 할 수 있다.

September 30, 2021
iOS
Git 정리

Git 정리하기 Git은 버전을 편리하게 관리할 수 있도록 도와주는 도구이다. 개인 뿐만 아니라 다른 사람과의 협업을 하는 경우에도 큰 도움이 된다. Git Tool GitHub DeskTop : commands에서 사용할 때 보다 사용할 수 있는 기능이 극히 제한적이다. Sourcetree : 다양한 기능을 사용할 수 있고, 전반적으로 많이 사용하고 있지만 역시 commands에서 사용할 수 있는 명령어보다 적다. GitKraken : UI가 화려한 Tool Git 설치 여부 확인 방법 Git 설치 여부 확인하기 위해서는 터미널에서 git —version 명령어를 쳤을 때 버전이 나온다면 Git이 설치되어 있는 것이다. Git의 설정 정보 확인 방법 git을 설치하면 git에 대한 모든 설정들을 확인하려면 git config —list 명령어를 활용해 확인 할 수 있다. file로 확인하고 싶다면 git —global -e 명령어를 사용하면 된다. Git의 설정 정보를 특정 …

September 29, 2021
git
Gatsby 테마로 GitHub Blog 만들기

내가 블로그를 시작하게 된 계기는 개발이 아닌 관련 공부를 할 때 정리를 하고 싶어서 여러가지 블로그를 찾아보다가 현재 사용중인 GitHub와 연동하여 사용할 수 있는 블로그 라이브러리인 Gatsby를 알게 되어 만들게 되었다. Gatsby로 블로그를 만들기 위해 처음에는 관련 테마를 찾아보고 맘에 드는 테마를 적용하여 만들기로 했다. 이제부터 내가 Gatsby 블로그를 만드는 과정을 소개한다. 원하는 테마의 Gatsby Clone Repository 생성(Repository명은 꼭 GitHubID.github.io) Your old repository’s clone URL에 getsby 테마의 repository url 넣기 cd Repository 주소 npm install npm install gh-pages —save-dev npm run deploy git branch gh-pages Setting-Pages-Source Branch를 gh-pages로 설정 git br…

September 25, 2021
git