1. heap보다는 stack에 메모리를 할당 class보단 struct나 enum을 사용한다. class는 heap할당, struct나 enum은 stack할당이므로 메모리 할당 class: heap struct: stack enum: stack heap ⇒ 메모리 할당을 사용하지 않은 영역을 찾아 할당하는 방식(동적할당)이므로 좀 복잡함 (속도가 느림) stack ⇒ LIFO 방식이므로 메모리 구조가 단순함 (속도가 빠름, O(1)) 2. 정적 디스패치(static Dispatch)를 지향 일반적으로 swift에서는 dynamic dispatch를 사용하도록 되어있음 클래스(메서드, 프로퍼티)를 선언할 때 상속되지 않는 클래스에 final을 붙이면 성능이 향상됨 클래스는 dynamic dispatch..
전체 글
굉장할 나struct 값 타입 (데이터를 전달할 때 값을 복사하여 전달) 상속 불가 메모리에서 자동제거 ⇒ 함수 종료(지역변수, 매개변수), 프로그램 종료(static, 전역변수) 인스턴스 상수로 선언시 저장속성 전부 상수로 선언 메서드 내에서 속성 변경 불가능 소멸자 없음 class 참조 타입 (데이터를 전달할 때 값의 메모리 위치를 전달) 상속 가능 ARC로 메모리 관리 인스턴스 상수로 선언해도 가르키는 let/ var 선언에 따름 메서드 내에서 속성 변경 가능 소멸자 있음 객체 대신 인스턴스라는 용어 사용 enum 한정된 사례(case) 안에서 정의할 수 있는 타입 (요일, 성별 ..) 케이스가 선택가능한 가짓 수로 정해져 있을 때 정의 ⇒ 다른것 넣으면 타입 에러 상속 불가능 공통점 개발자가 마음대로 만들..

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ... 위 수열처럼 n번째 항의 수가 n-1 + n-2로 구성되는 수열을 피보나치 수열이라 한다. (단, n은 n

기초를 처음부터 다시 다지면서 타입 주석과 타입 추론의 개념을 접하게 되었다. 타입 추론은 기존에 알고 있었지만 타입 주석이라는 단어는 이번에 처음 접하게 되었으나 이미 알고 있는 개념이긴 했다. 두 개념은 모두 변수를 선언할 때 사용되는 개념이다. 1. 타입 주석(Type Annotation) var name: String var name: String = "Lily" 타입 주석은 변수를 선언할 때 변수의 자료형까지 함께 명시해주는 것을 의미한다. 첫번째 줄 처럼 name이라는 변수를 선언하면서 String이라는 자료형까지 함께 지정해준다. 두번째 줄 처럼 선언과 동시에 값을 지정해줄 수 있다. 2. 타입 추론(Type Inference) var name = "Lily" 타입 주석과 달리 변수를 선언할..
본 게시물은 OAuth를 구현하는 방법이 아닌 제가 생각한 특징을 정리한 글입니다. 이번에 다이어리 앱을 새로 업데이트하면서 소셜로그인 기능을 도입하기로 결정했다. 기존에 CoreData로 앱 내에 저장하던 다이어리 데이터를 보다 안전하게 저장하기 위해 firebase에 저장하기 위해서였다. 애플 정책에 따라 Apple로그인은 구현하지 않으면 리젝 사유가 된다. 😅 따라서 Apple Login은 당연히 구현하기로 결정했고, 조사해보니 사용자가 가장 많이 사용하는 소셜로그인이 Kakao라는 것을 알게되었다. 사용자의 편의를 위해 Kakao를 추가하고, 추가적으로 전에 구현해본 경험이 있는 Google로그인도 함께 적용하기로 결정했다. 1. Apple 애플로그인은 꼭 애플 개발자 계정이 있어야 한다. 1년에..
본 게시물은 앨런의 인프런 강의를 듣고 작성한 글 입니다. 작업을 처리하는 과정에서 2개의 스레드가 동시에 메모리에 접근할 수 있다. 이러한 상황에서 문제가 생기는데.. 이런 문제는 Thread-Safety를 통해 해결할 수 있다. 단어의 뜻 그대로 스레드를 안전하게 사용한다. 여러 스레드를 동시에 사용한다고 해도 문제가 생기지 않고 안전하게 사용할 수 있다. 한번에 한개의 스레드만 자원에 접근할 수 있게 하여 경쟁상황을 발생시키지 않고 안전하게 사용한다. 이렇게 사용함을 Thread-Safety하게 코드를 작성했다고 한다. 1. 경쟁상황 (Race Condition) var a = 1 DispatchQueue.global().async { sleep(1) a += 1 } DispatchQueue.gl..
본 게시물은 앨런의 인프런 강의를 듣고 작성한 글 입니다. 1. Dispatch Group의 개념 앞서 하나의 작업이 끝나면 그 작업이 끝나는 시점에 대해 알 수 있었다. 그러나 그런 작업들은 독립적이였기 때문에 여러가지 작업을 그룹지어 하나의 그룹으로 묶어 이런 그룹으로 묶인 작업이 끝나는 시점을 알고 싶을 때 디스패치 그룹을 사용한다. 여러 작업을 그룹으로 묶인 작업이라 하면 이미지를 여러개 다운로드 받고 싶을 때 하나의 이미지를 다운로드 받는것을 하나의 작업이라고 보면 이런 작업을 여러개 묶어 여러개의 이미지를 다운로드 받는 것을 하나의 그룹을 묶어 사용할 수 있다. 3개의 그룹을 묶인 작업을 3개의 스레드에서 사용한 경우 여러 스레드에서 작업을 처리하지만 각 그룹의 작업이 끝난 시점을 알 수 있..
본 게시물은 앨런의 인프런 강의를 듣고 작성한 글 입니다. 1. 반드시 메인큐에서 처리해야하는 작업 예전에 디스패치큐에 대해 얕게 공부할 때 스택오버플로우에서 UI와 관련된 작업은 메인큐에서 처리해야한다는 글을 본 적이 있다. 그때는 그냥 그렇구나 하고 넘어갔는데 그냥 내 머리에 "UI작업 -> 메인에서 처리해야함" 이정도로만 인식하고 있었다. 이번에 비동기에 대해 좀 더 자세히 공부하면서 UI관련 작업은 메인에서 처리해야함을 다시 듣게 되었고, 그 이유도 함께 알게 되었다. 생각해보면 간단하다. 다른 스레드로 분산해서 처리한다면 작업의 순서가 일정하지 않고, 다른 스레드에서 나눠서 처리하면서 간섭이 일어나게 되면서 화면이 깜빡거리는 등의 제대로 된 화면을 사용자에게 제공하기 어려울 수 있다. 메인큐에..