[iOS][UI] Auto Layout에 대해
Develop/iOS2024. 1. 23. 19:24[iOS][UI] Auto Layout에 대해

이 글은 애플의 Auto Layout공식 문서를 기반으로 작성되었습니다! 개요 AutoLayout이 필요한 이유 각기 다른 화면 크기 기본적으로, 화면에 무언가를 그린다는 것은 특정 위치의 픽셀에게 어떤 색상을 보여달라고 요청을 하는 것이다. 그 픽셀들, 점들이 모여서 선을 이루고, 그 선들이 면을 이루면서 우리가 보는 UI가 그려지게 된다. 그런데 그 UI를 그리는 화면의 크기가 항상 같지 않다. 세상에는 엄청나게 많은 종류의 기기들이 존재하고, 그에 따라 수 많은 종류의 화면 크기들이 존재한다. 아이폰도 그 크기가 항상 같지 않다. 처음에는 3.5인치의 화면 크기였고, 그 다음에는 4인치, 그 다음에는 4.7인치… 최근에는 6.1인치까지 그 화면크기가 커졌다. 다른 기기지만 보여주는 건 같아야 해 문..

[iOS][Swift] MetaType이란
Develop/iOS2024. 1. 23. 18:28[iOS][Swift] MetaType이란

메타타입(MetaType)? Swift의 메타타입(Metatype)은 타입 자체를 나타내는 타입이다. 일반적으로, 우리는 변수에 값을 저장하거나, 클래스의 인스턴스를 생성할 때 타입을 사용한다. 예를 들어, `Int`, `String`, `Array` 등이 타입이고, 추가로 정의한 클래스나 구조체들도 타입으로 사용할 수 있다. 하지만 Swift에서는 이러한 타입들 자체를 값으로 다룰 수 있고, 이를 위해 메타타입이 사용된다. 메타타입은 명함으로 생각하면 조금 이해가 쉽다. ‘저는 이런 타입이에요’를 실체화, 인스턴스화 한 게 명함과 비슷하다. ▼ 메타타입의 존재 의의 "그렇다면 Swift는 메타타입을 어떤 장점 때문에 사용하는 것일까?" 메타타입을 이용하는 큰 이유는 아래와 같다. 동적 생성과 타입 검사..

[iOS] Delegate 패턴
Develop/iOS2024. 1. 23. 17:24[iOS] Delegate 패턴

개요 애플의 iOS 앱 개발에서는 delegate 패턴을 정말 많이 사용한다. 가장 처음에 보이는 파일인 AppDelegate.swift와 SceneDelegate.swift부터 각종 UI컴포넌트를 구현하기 위해 사용하는 Delegate들 까지, Delegate 패턴이 굉장히 많이 사용되는 것을 알 수 있다.▼ 이렇게나 많이 사용되지만 이에 대해서 깊게 알아보려고 하지 않았다. 처음에는 내용물을 몰라도 사용할 수 있게 해주는 캡슐화 덕분인건지, 아니면 그냥 내가 아무렇게나 사용을 해서 그런건지는 몰라도 Delegate에 대해 많은 정보가 없이도 간단한 것들은 만들 수 있었다. 하지만 규모가 조금씩 커지고 기능들이 많아지게 되면서 이에 대한 이해도가 부족하면 개발을 제대로 할 수 없음을 깨달았고, 아래의 ..

[Flutter] 파이어베이스 이메일 인증에서 생긴 문제
Develop/Flutter2024. 1. 23. 15:46[Flutter] 파이어베이스 이메일 인증에서 생긴 문제

발단 (개요) 파이어베이스의 이상한 인증 순서 지나가던 사람을 붙잡고 회원가입을 할 때 물어본 것들을 말해보라고 하면 아마 대부분 아이디, 비밀번호, 이메일, 전화번호 등등을 이야기할 것이다. 그렇다면 이메일과 전화번호를 물어봤다면, 그게 정말 당신이 사용하고 있는 이메일과 전화번호가 맞는지도 물어봤다고 대답할 것이다. 위의 대답을 하고 회원가입 순서를 생각하면 일반적으로는 아래와 같이 생각하게 된다. 아이디, 비밀번호, 이메일, 전화번호 등등을 입력. 입력한 이메일과 전화번호가 정말 사용자의 것이 맞는지 인증. 인증이 완료되었다면 계정이 서버에 등록. 이게 대부분이 생각하는 회원가입과 인증 절차다. 하지만 파이어베이스에서는 이런 흐름과는 전혀 다르게 동작한다. 파이어베이스에서 제공하는 인증은 이미 등록..

[Flutter] Dart 비동기 프로그래밍 찍먹
Develop/Flutter2024. 1. 23. 12:04[Flutter] Dart 비동기 프로그래밍 찍먹

들어가기 앞서 동기와 비동기에 대해 잘 모른다면 아래의 글을 먼저 읽고 오시는걸 추천드립니다! 동기와 비동기 개론 개요 동기와 비동기, 프로그래밍을 공부하다보면 항상 등장하는 개념이다. 중요한 개념이고 꼭 알아야한다고 하지만 이게 왜 중요한 개념인지 잘 이해하지 못하고 넘어간 적이 많다.▼ 하지만 noguen.tistory.com 개론 비동기 프로그래밍은 다른 작업이 끝나기를 기다리는 것이 아니라 그 동안에 다른 작업을 수행하게 해준다. 보통 아래의 작업들을 비동기로 수행하곤 한다. 네트워크를 통해 데이터 가져오기 데이터베이스에 데이터 쓰기 파일에서 데이터 읽어오기 이런 작업들은 읽어오거나 가져온 결과를 Future, 만약 여러개의 부분으로 나누어져 있는 결과라면 Stream으로 가져온다. 만약에 한 함..

배열(array)과 연결 리스트(linked list)
Algorithm/Algorithm 개념2024. 1. 23. 09:41배열(array)과 연결 리스트(linked list)

개요 연결 리스트와 배열은 다른 자료구조를 구현할 때 기본이 되는 자료구조로 많이 사용이 되며 서로 비교되는 일이 많다. 스택, 큐, 덱과 같은 선형 자료구조들의 기본이 된다. 기초적인 단계의 자료구조들은 배열로 구현하기가 쉬워서 보통 배열로 많이 구현해보는데, 배열의 단점(후에 이야기 할 것이다.)으로 인해 이를 보완하고자 연결리스트를 사용하기도 한다. 둘 중 무엇을 사용하느냐는 자유지만, 둘의 특성을 잘 알아두고 상황에 맞게 응용하는 것이 가장 좋아보인다.▼ 배열(array) 배열이란? 배열(array)은 연관된 데이터를 하나의 변수에 그룹화 하여 관리하는 자료구조이다. 말이 조금 어려울 수 있는데, 다들 알다시피 같은 데이터 타입 변수들을 모아놓은 것이다. 좀 더 세부적이고 명확하게 설명을 하자면,..

정렬 - 거품 정렬부터 셀 정렬까지
Algorithm/Algorithm 개념2024. 1. 22. 18:46정렬 - 거품 정렬부터 셀 정렬까지

개론 정렬에는 여러가지 뜻이 있는데 대체로 "가지런히 줄지어 늘어섬. 또는 그렇게 함" 혹은 "영역, 항목, 데이터 따위를 미리 지정된 양식으로 맞추는 일." 등의 의미를 말한다. 어떻게 보면 우리가 정리하는 것과 같은 얘기를 하는 것이다. 우리가 현실 세계에서 책장을 정리한다고 했을 때 어떻게 정리하는가에 대해서 생각해보자.▼ 책의 개수가 많지 않고 책장에 들어갈 자리가 넉넉하게 있다면, 크게 뭔가를 생각하지 않고 노동요를 틀고 하나씩 책장에 넣을 것이다. 그러면 컴퓨터에게 책 정리 시뮬레이팅을 시킨다고 해보자.▼ 컴퓨터는 우리의 행동 하나하나를 전부 생각하고 있어야한다. "책을 빼서 어디에 놓지?" "책장의 전체 크기가 어느정도지?" "이 책이 저 책보다 우선순위가 높은걸까?" "이 책은 전체 책 중..

6. Agile
CS/소프트웨어 공학2024. 1. 21. 22:436. Agile

Agile 모델 그 전까지는 실제 현장에서 사용할 수 있는 모델들과 워터폴과의 차이점을 이야기 했다. 원래 Agile 개발 방법은 책의 9판까지는 없었다고 한다. 10판에 새롭게 추가된 내용인데, 여기서 알 수 있는 점은 Agile 방법을 최근에 많이 쓰게 됐다는 것이다. 등장 배경 Waterfall 방식의 장점이자 아이덴티티는 매 단계가 끝이 나면 문서가 나온다는 것이다. 하지만 문서 제작에 의한 오버헤드가 꽤나 컸다. 매 단계가 끝이 나면 문서가 나오는 것은 좋지만 그 장점을 위한 오버헤드가 생각보다 많이 컸기에 이 오버헤드를 줄이는 Agile 방식을 고안하게 되었다. 목표 Agile 모델의 목표는 요구사항 변경에 빠르게 반응하여 delivery time을 줄이는게 목표다. Agile이라는 단어의 뜻..

[Flutter][Error] M1 맥 Flutter CocoaPod 설치 오류
Develop/Flutter2024. 1. 21. 18:58[Flutter][Error] M1 맥 Flutter CocoaPod 설치 오류

발단 Cloud_Firestore 패키지를 설치하고 나서 데이터베이스에 생각한 대로 데이터가 잘 들어가는지 확인하기 위해 디버깅을 했는데 아래와 같이 에러 문구가 나왔다. Log (스크롤 주의) 더보기 LoadError - dlopen(/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle, 0x0009): tried: '/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Library/Rub..

5. Process Iteration
CS/소프트웨어 공학2024. 1. 21. 16:005. Process Iteration

Process Iteration Process Iteration은 뜻 그대로 해석하면 프로세스 반복을 말한다. 하지만 여기서 말하는 프로세스는 Process Activites 포스트에서 말한 5가지 Activities다. "전에 말한 Activity들을 수행하는 것은 납득이 가는데, 왜 이 Activity들을 반복 하는 것일까?" 그 이유는 소프트웨어 개발하는 동안 요구사항 변화는 불가피하기 때문이다. 아래의 이유들로 바뀌곤 한다. 비지니스의 변경 비지니스의 변경으로 인해 필요로 하는 요구 사항의 기능들이 바뀔 수 있다. 구현을 위한 새로운 기술의 등장 이런 새로운 기술들은 구현을 쉽게 만들어주어 새로운 가능성을 열 수 있다. 하지만 이런 기술들을 섣불리 도입했다가 큰 결함이 생길 수 있어 조심해야한다...

image