프로그래밍을 하면서 항상 부딪히는 주제이고, 어려운 주제인... 동시성 프로그래밍, 비동기 프로그래밍에 대해서 정리해보고자 합니다. 먼저 필요한 기본 개념들을 하나씩 짚어보고 갈게요..! 프로세서, 코어, 프로그램과 프로세스, 스레드 프로세서 프로그램을 수행하는 하드웨어 유닛 멀티 프로세서 : 한 컴퓨터가 여러 개의 프로세서를 갖는것. (듀얼 프로세서 : 2개의 프로세서) ex) CPU 코어 프로세서의 주요 연산회로 싱글코어, 듀얼코어 : 연산회로의 갯수 여러 개의 코어를 갖는 프로세서 또한 멀티 프로세서 프로그램, 프로세스 프로그램 : 보조기억 장치에 저장된 실행코드, active하지 않은 상태 프로세스 : 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위, acti..
iOS 개발을 하다보면 자연스레 갤러리에 접근하는 일이 많아집니다. 그래서 이번엔 iOS 에서 iCloud 사진 라이브러리를 포함하여 사진 및 비디오에 직접 접근,편집할 수 있는 프레임워크 Photos 에 대해서 알아보겠습니돠 먼저 Photos프레임워크에서 객체를 지칭하는 방식을 살펴보겠습니다 . Asset < Asset Collection < Collection List Asset Asset Collection Collection List 각각의 모델 클래스(PHAsset, PHAssetCollection, PHCollectionList)의 인스턴스를 통해 작업하려는 항목에 접근할 수 있습니다. 가져오기 메스드에서 반환된 에셋 또는 컬렉션의 목록을 받을 수 있습니다. (PHFetchResult) 받아온..
Codable 인스턴스를 다른 데이터 형태로 변환하고 그 반대의 역할을 수행하는 방법을 제공합니다. 스위프트의 인스턴스를 다른 데이터 형태로 변환할 수 있는 기능을 Encodable 프로토콜로 표현하였고, 그 반대의 역할을 할 수 있는 기능을 Decodable로 표현해 두었습니다. 그 둘을 합한 타입을 Codable로 정의해 두었습니다. .. 왔? 일단 안을 들여다 보면 두 프로토콜 Decodable, Encodable 을 동시 채택하는 프로토콜... 입니다. 일단 Encoding, Decoding 용어에 대해서 먼저 살펴보겠습니다. 불라불라를 스위프트 타입의 인스턴스로 변환해 주는 것이 Decoding, 그 반대가 Encoding 입니다. 일단 예제를 통해 확인해 보지요 struct Student: C..
전 포스팅에서 화면전환에 대해서 살짝 다뤘었는데요 (모달 present, 네비게이션 push) 이번 포스팅에서도 화면전환에 대해서 다루려고 합니다 ! Segue (세그) Segue는 스토리보드에서 뷰 컨트롤러 사이의 화면전환을 위해 사용하는 객체입니다. 기존에 제가 보였드렸던 방식은 거의 코드로 (present, push) 했었는데 Segue의 경우 별도의 코드 없이도 스토리보드에서 세그를 연결하여 뷰 컨트롤러 사이의 화면전환을 구현할 수 있습니다. UIStoryboardSegue Class UIStoryboardSegue 클래스는 UIKit에서 사용할 수 있는 표준 화면전환을 위한 프로퍼티와 메서드를 포함하고 있습니다. UIViewController의 performSegue(withIdentifier:..
이번 포스팅에서는 셀의 재사용을 알아보고 또 다시 UITableView 를 이리저리 가지고 노는 실습을 진행해 보겠습니다. 뷰의 재사용 iOS 환경에서 뷰를 재사용하는 애들은 대표적으로 저희가 다룰 UITableView와 UICollectionView 가 있습니다. 작동 방식 테이블뷰 및 컬렉션뷰에서 셀을 표시하기 위해 데이터 소스에 뷰(셀) 인스턴스를 요청합니다. 데이터 소스는 요청마다 새로운 셀을 만드는 대신 재사용 큐 (Reuse Queue)에 재사용을 위해 대기하고있는 셀이 있는지 확인 후 있으면 그 셀에 새로운 데이터를 설정하고, 없으면 새로운 셀을 생성합니다. 테이블뷰 및 컬렉션뷰는 데이터 소스가 셀을 반환하면 화면에 표시합니다. 사용자가 스크롤을 하게 되면 일부 셀들이 화면 밖으로 사라지면서..
이론을 어느 정도 톺아 보았으니 테이블 뷰를 이리 저리 마구 잡이로 가지고 놀아 보겠습니다. 포켓몬 도감? 만들기 ... 네 도감을 만들어 보려 합니다 ㅎㅅㅎ 구성 UITableView 셀 추가 버튼 3개 (오박사, 메타몽, 꼬부기) DoctorCell (오박사), MonsterCell (메타몽, 꼬부기) 동작 버튼에 따라 서로 다른 Cell이 추가됩니다 editing 모드로 cell 삭제를 합니다 먼저 사용될 UIViewController에 UITableView를 뷰전체 사이즈로 추가합니다. UITableViewCell 하나를 추가한 뒤 Style을 Basic으로, Identifier를 "DoctorCell"로 지정해줍니다. UITableView안에 Stack뷰를 하나 추가한 뒤 3개의 버튼을 추가해줍..
UITableView 테이블뷰는 iOS 애플리케이션에서 많이 활용하는 사용자 인터페이스입니다. 테이블뷰는 리스트 형태를 지니고 있으며 스크롤이 가능해 많은 정보를 보여 줄 수 있습니다. 테이블 뷰 기본 형태 UITableView 에는 3대 요소가 있습니다. 차근차근 하나씩 알아보겠습니다. UITableViewCell 구조 기본적으로 테이블뷰 셀은 크게 콘텐츠 영역과 액세서리뷰 영역으로 구조가 나뉩니다. 콘텐츠 영역: 셀의 왼쪽 부분에는 주로 문자열, 이미지 혹은 고유 식별자 등이 입력됩니다. 액세서리뷰 영역: 셀의 오른쪽 작은 부분은 액세서리뷰로 상세보기, 재정렬, 스위치 등과 같은 컨트롤 객체가 위치합니다. 테이블뷰를 편집 모드(Editing Mode)로 전환하면 아래와 같은 구조로 바뀝니다. 편집 컨..
Gesture Recognizer 제스처 인식기는 여러 제스처 관련 이벤트를 인식할 수 있습니다. 특정 제스처 이벤트가 일어날 때 마다 각 타깃에 맞는 액션 메시지를 보내어 제스처 관련 이벤트를 처리할 수 있습니다. 예를 들어, 단순하게 화면을 터치할 수도 있고, 길게 누를수도 있고, 두손가락으로 확대할 수 도 있고, 화면도 넘길 수 있습니다. UIGestureRecognizer 종류 UIGestureRecognizer 클래스는 특정 제스처 인식기에 대한 동작을 정의합니다. 또한 델리게이트 객체를 활용하여 일부 동작을 더욱 세밀하게 사용자화 할 수 있습니다. Gesture Recognizer를 사용하기 위해서 Target-Action 연결을 설정한 후 UIView의 메서드인 addGestureRecogn..
Target-Action 디자인 패턴 Target-Action 패턴 역시 상당히 많이 사용되며 @IBAction func .... 의 형태로 Storyboard에 있는 뷰를 ViewController에서 참조할때 많이 사용하셨을 겁니다. 모르고 써도 잘 되지만 알고 사용하면 더 잘, 넓게 사용할 수 있겠죠 ?? 라고 누군가가 조언해주었슴다 ㅎ 다시 본론으로 .. Tartget-Action 디자인 패턴에서 객체는 이벤트가 발생할 때 다른 객체에 메시지를 보내는 데 필요한 정보를 포함합니다. 액션은 특정 이벤트가 발생했을 때 호출할 메서드를 의미합니다. 타겟은 액션이 호출될 객체를 의미합니다. .... 뭔가 번거로워 보이지 않나요? 타겟 객체에 그냥 메서드를 넣으면 안되나? Apple이 뭔가 만들어 놓은 데..
싱글턴(Singleton) 싱글턴은 '특정 클래스의 인스턴스가 오직 하나임을 보장하는 객체'를 의미합니다. 싱글턴은 애플리케이션이 요청한 횟수와는 관계없이 이미 생성된(static) 같은 인스턴스를 반환합니다. 즉, 애플리케이션 내에서 특정 클래스의 인스턴스가 딱 하나만 있기 때문에 다른 인스턴스들이 공유해서 사용할 수 있습니다. 예시를 통해 살펴보겠습니다. 메타몽 소환! 간단하게 버튼에 따라서 서로 다른 페이지를 띄워주고 다시 뒤로 갈 수 있는 UI를 구성했습니다 class Singleton{ static let shared = Singleton() var state: MetamongState? } enum MetamongState: String{ case metamong case metamong_ch..