개요 Swift를 공부하다보면 lambda와 비슷한 개념으로 클로져(Closure)라는게 나온다. 내용 자체는 익명 함수와 비슷한데, 초반부터 나오는 캡쳐(Capture)라는 용어가 굉장히 이해하기가 힘들었다. ▼ 공식문서에서도 이에 대해 다루기는 하지만 캡쳐를 하는 방법에 대한 내용 위주고, 이해 위주는 아니었기에 이해하기 쉽게 정리해보기로 했다. ▼ 캡쳐(Capture)가 정확히 뭐야? 캡쳐의 정의 클로져의 캡쳐는 클로져의 내용에서 주변에 있는 외부 context의 상수와 변수를 사용하기 위해 참조하는 것을 말한다. 이렇게 하면 설령 외부 context가 사라지더라도, 클로져에서는 계속해서 연산을 수행할 수 있게 된다. 공식문서의 예제를 보자. ▼ func makeIncrementer(forIncre..
개요 초기화에 관해서 전체 내용을 정리하기 전에, two phase initialization에 대해서 먼저 보고 들어가는 것이 다른 개념들을 이해하는데 도움이 될 거라고 생각이 들었다. 그래서 two phase initialization에 대해 먼저 정리를 하고 나중에 초기화에 관해 전체적으로 보기로 했다. 두 단계로 진행되는 초기화 Swift의 클래스 초기화는 두 단계로 진행이 된다. 첫번째 단계에서는 클래스에 명시된 값에 따라 각 stored property들이 초기화가 된다. 모든 stored property에 대한 초기 상태가 정해지고 나면(예를 들면 메모리 할당), 두번째 단계가 실행이 된다. 두번째 단계에서는 클래스에게 stored property들의 값을 사용자가 설정 할 수 있는 기회가 ..
개요 기본적으로 거의 모든 컴퓨터는 2가지에 데이터를 보관한다. 하나는 디스크, 다른 하나는 메모리(RAM)로 힙 이라고도 한다. 우리가 보는 메모리 관리는 사실상 힙 메모리 관리라고 볼 수 있다. 디스크에 있는 데이터를 바로 가져다 쓰기에는 데이터를 읽는 속도가 굉장히 느리기 때문에, 당장 사용할 프로그램과 데이터들을 메모리에 미리 불러 놓은 뒤에 메모리의 빠른 읽기 속도를 활용하여 프로그램을 실행시킨다. 이는 아이폰에서도 똑같이 동작을 하며, 앱이 실행되는 동안 사용되는 클래스 인스턴스들은 모두 이 메모리 안에 저장이 된다. 메모리 관리라고 하면 엄청나게 거창한 무언가를 하는 것 처럼 느껴지지만 사실 프로그램이 요구로 하는 곳에 메모리 자원을 주고, 프로그램이 더 이상 사용하지 않는 메모리를 회수하는..
Future 데이터들 다루기 너무나도 까다로운 Future 추천 정보 비동기를 잘 모른다면 간단하게 이해하고 보는걸 추천합니다. 동기와 비동기 개론 -> Dart 비동기 프로그래밍 찍먹 -> Future 변수들을 사용하여 비동기 작업을 하다보면 가장 힘든 부분이 화면에 그려주는 부분이다. 데이터가 바로 들어온다고 가정하고 화면을 그리게 되면 빨간색 에러 화면을 마주하기 쉽상이다. 데이터가 완성되는게 아무리 빠르다고 해도 화면을 그리는 부분이 별도의 장치가 없다면 선행되기 때문에 에러가 쉽게 발생한다. 데이터가 들어오는걸 기다리는 동안에… 상태관리로 전부 처리하자 그렇기에 데이터가 들어오는것을 기다리며 그 동안에는 로딩 화면을 보여주거나 빈 화면을 보여줘야 하는데, Stateful Widget이나 GetX..
Dart의 String 문법 다른 언어들은 안이러는데 Flutter는 Dart언어를 사용하기에 대부분 Dart를 사용하지 않다가 Flutter를 사용하기 위해 사용하게 되었을 것이다. 조금 범용적으로 사용되는 JAVA나 Python, C++ 와 같은 언어들에 익숙해져있다가 Dart로 오게 되면 한가지 의문점이 생기게 된다. 바로 문자열을 “”(큰 따옴표, Double quote) 로 감싸는게 아니라 ‘’ (작은 따옴표, Single quote) 로 감싸기 때문이다. Dart의 String 문법 Dart에서는 아래와 같이 문자열을 작성할 수 있다. String singleQuote = '안녕하세요. 고라니입니다.'; String doubleQuote = "안녕하세요. 고라니입니다."; 두 문자열에 차이가 ..
이 글은 애플의 Auto Layout공식 문서를 기반으로 작성되었습니다! 개요 AutoLayout이 필요한 이유 각기 다른 화면 크기 기본적으로, 화면에 무언가를 그린다는 것은 특정 위치의 픽셀에게 어떤 색상을 보여달라고 요청을 하는 것이다. 그 픽셀들, 점들이 모여서 선을 이루고, 그 선들이 면을 이루면서 우리가 보는 UI가 그려지게 된다. 그런데 그 UI를 그리는 화면의 크기가 항상 같지 않다. 세상에는 엄청나게 많은 종류의 기기들이 존재하고, 그에 따라 수 많은 종류의 화면 크기들이 존재한다. 아이폰도 그 크기가 항상 같지 않다. 처음에는 3.5인치의 화면 크기였고, 그 다음에는 4인치, 그 다음에는 4.7인치… 최근에는 6.1인치까지 그 화면크기가 커졌다. 다른 기기지만 보여주는 건 같아야 해 문..
메타타입(MetaType)? Swift의 메타타입(Metatype)은 타입 자체를 나타내는 타입이다. 일반적으로, 우리는 변수에 값을 저장하거나, 클래스의 인스턴스를 생성할 때 타입을 사용한다. 예를 들어, `Int`, `String`, `Array` 등이 타입이고, 추가로 정의한 클래스나 구조체들도 타입으로 사용할 수 있다. 하지만 Swift에서는 이러한 타입들 자체를 값으로 다룰 수 있고, 이를 위해 메타타입이 사용된다. 메타타입은 명함으로 생각하면 조금 이해가 쉽다. ‘저는 이런 타입이에요’를 실체화, 인스턴스화 한 게 명함과 비슷하다. ▼ 메타타입의 존재 의의 "그렇다면 Swift는 메타타입을 어떤 장점 때문에 사용하는 것일까?" 메타타입을 이용하는 큰 이유는 아래와 같다. 동적 생성과 타입 검사..
개요 애플의 iOS 앱 개발에서는 delegate 패턴을 정말 많이 사용한다. 가장 처음에 보이는 파일인 AppDelegate.swift와 SceneDelegate.swift부터 각종 UI컴포넌트를 구현하기 위해 사용하는 Delegate들 까지, Delegate 패턴이 굉장히 많이 사용되는 것을 알 수 있다.▼ 이렇게나 많이 사용되지만 이에 대해서 깊게 알아보려고 하지 않았다. 처음에는 내용물을 몰라도 사용할 수 있게 해주는 캡슐화 덕분인건지, 아니면 그냥 내가 아무렇게나 사용을 해서 그런건지는 몰라도 Delegate에 대해 많은 정보가 없이도 간단한 것들은 만들 수 있었다. 하지만 규모가 조금씩 커지고 기능들이 많아지게 되면서 이에 대한 이해도가 부족하면 개발을 제대로 할 수 없음을 깨달았고, 아래의 ..
발단 (개요) 파이어베이스의 이상한 인증 순서 지나가던 사람을 붙잡고 회원가입을 할 때 물어본 것들을 말해보라고 하면 아마 대부분 아이디, 비밀번호, 이메일, 전화번호 등등을 이야기할 것이다. 그렇다면 이메일과 전화번호를 물어봤다면, 그게 정말 당신이 사용하고 있는 이메일과 전화번호가 맞는지도 물어봤다고 대답할 것이다. 위의 대답을 하고 회원가입 순서를 생각하면 일반적으로는 아래와 같이 생각하게 된다. 아이디, 비밀번호, 이메일, 전화번호 등등을 입력. 입력한 이메일과 전화번호가 정말 사용자의 것이 맞는지 인증. 인증이 완료되었다면 계정이 서버에 등록. 이게 대부분이 생각하는 회원가입과 인증 절차다. 하지만 파이어베이스에서는 이런 흐름과는 전혀 다르게 동작한다. 파이어베이스에서 제공하는 인증은 이미 등록..
들어가기 앞서 동기와 비동기에 대해 잘 모른다면 아래의 글을 먼저 읽고 오시는걸 추천드립니다! 동기와 비동기 개론 개요 동기와 비동기, 프로그래밍을 공부하다보면 항상 등장하는 개념이다. 중요한 개념이고 꼭 알아야한다고 하지만 이게 왜 중요한 개념인지 잘 이해하지 못하고 넘어간 적이 많다.▼ 하지만 noguen.tistory.com 개론 비동기 프로그래밍은 다른 작업이 끝나기를 기다리는 것이 아니라 그 동안에 다른 작업을 수행하게 해준다. 보통 아래의 작업들을 비동기로 수행하곤 한다. 네트워크를 통해 데이터 가져오기 데이터베이스에 데이터 쓰기 파일에서 데이터 읽어오기 이런 작업들은 읽어오거나 가져온 결과를 Future, 만약 여러개의 부분으로 나누어져 있는 결과라면 Stream으로 가져온다. 만약에 한 함..