Delegate 패턴????? 객체 지향 프로그래밍에서 많이 사용되는 디자인 패턴 중 하나 객체 간의 상호작용을 할 때 사용함 위임하는 객체와 대리하는 객체로 구성됨 대리자 객체는 위임자 객체에서 호출이 가능한 메서드를 구현함 이를 호출하는 위임자 객체는 대리자 객체의 메소드를 대신 호출함 객체산 결합도를 낮출 수 있고, 유연하고, 확장 가능한 코드를 작성할 수 있게 됨 Swift에서 Delegate 패턴을 사용하는 방법 1. 프로토콜 정의하기 protocol SomeDelegate: AnyObject { func someMethod() } 2. 위임자 객체 생성하기 class SomeClass { var delegate: SomeDelegate? func someMethod() { delegate?.s..
[Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(1) [Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(2) ! 공식문서를 참고한 글입니다 메모리에 접근할 때, 충돌을 피하는 코드를 구조화 하는 법 기본적으로 스위프트는 코드에서 일어나는 언세이프한 행동을 방지함 예를 들어 스위프트는 변수를 사용 전에 초기화시키는 것, 메모리는 해제 된 뒤에 접근할 수 없는 것, 배열 인덱스가 범위를 벗어났는지 체크하는 것 들을 보장함 대부분의 경우에는 스위프트가 메모리를 자동으로 관리하기 때문에 이를 생각할 필요는 없지만, 충돌이 발생할 수 있는 경우를 알고, 그것을 예방하는 코드를 작성할 줄 알아야함 충돌이 일어난 경우에는 컴파일 오류나 런타임 오류가 발생할 ..
! 공식문서를 참고한 글입니다 In-Out Parameters 함수의 매개변수는 기본적으로 상수 실수로 파라미터의 값을 바꿀 수 없게 되어있고, 이를 바꾸려고 하면 에러가 발생함 함수의 매개변수를 수정하고 함수가 끝난 뒤에도 이를 지속하려면 inout 파라미터로 정의해야함 func printName(name: String) { name = "가짜 이름" // 에러 발생 Cannot assign to value: 'name' is a 'let' constant print(name) } name 파라미터는 상수이기 때문에 바꿀 수 없다고 에러 뿜뿜 inout 파라미터는 이미 정의된 변수를 파라미터로 받고, 그 변수를 바꿀 수 있게 만들어줌 따라서 상수를 받을 수 없음 사용할때는 함수를 호출할 때 &문자를 같..
! 공식문서를 참고한 글입니다 캡쳐리스트 Capture Lists 기본적으로 클로저는 주변에서 클로저 안에서 사용할 때 필요한 상수와 변수를 캡쳐함 이때 어떻게 밸류를 캡쳐할 것인지 캡쳐리스트를 사용해서 컨트롤 할 수 있음 var a = 0 var b = 0 let closure = { [a] in print(a, b) } a = 10 b = 10 closure() // Prints "0 10" 캡처리스트는 대괄호를 사용하여 파라미터 앞에 명시함 클로저에서 매개변수 이름, 타입, 반환타입을 생략하더라도 캡처리스트를 사용하려면 in 키워드를 사용해야함 캡처리스트는 생성될 때 초기화 되기 때문에 a는 0으로 표시됨 만약 캡쳐한 변수가 참조타입이라면 원래의 인스턴스를 참조해서 캡쳐한다고 생각할 수 있음 cla..
! 공식문서를 참고한 글입니다 보통의 경우에는 Swift에서 메모리 관리를 위해서 어떠한 행동을 해줄 필요가 없다 ARC라는 것이 알아서 사용하지 않는 인스턴스를 메모리에서 해지해주기 때문이다 ARC, Automatic Reference Counting 말그대로 참조의 수를 자동으로 카운팅한다는 것이다 참조가 되는 수를 세고 있다가 더이상 참조되지 않으면 메모리에서 해제한다 ARC가 동작하는 방법 How ARC Works 클래스의 인스턴스를 만들 때마다, ARC는 인스턴스에 대한 정보를 저장하기 위해서 메모리 조각을 할당한다 이 메모리는 인스턴스의 타입에 대한 정보를 갖고, 인스턴스와 관련된 저장된 속성의 값도 갖고 있다 추가적으로, 인스턴스가 더이상 필요하지 않을 때, ARC는 해당 인스턴스에 의해 사..
바이너리 Binary 2진수 컴퓨터의 모든 정보(그림이나 문자 등)는 2진수 형태로 입력, 출력, 저장된다 0과 1로만 정보를 처리하고 저장하는 2진수를 사용 숫자를2진수로 나타내는 방법 숫자 21을 2진수로 나타내보자 32, 16, 8, 3, 2, 1의 숫자 카드가 있다고 가정 숫자 21을 만들기 위해서는 16, 4, 1 카드가 필요하다 32, 16, 8, 4, 2, 1의 카드 사용여부를 1과 0으로 나타낸다면 010101로 표시할 수 있다 같은 방법으로 15는 8+4+2+1 이기 때문에 1111으로 표시할 수 있다 27은 11011 숫자 카드 5장으로 만들 수 있는 최대 수는 무엇일까? 2^(5장의 카드) - 1 = 255 0부터 시작하기 때문에 -1을 해주는 것 16진수 Hexadecimal 숫자 ..
! 공식문서를 참고한 글입니다 클로저????????????????????? 클로저는 한마디로 말해서 코드블럭 { } 이다. 어렵게 생각하지 말자 클로저의 3가지 종류 클로저는 3가지 종류가 있다. 전역 함수(Global function) : 이름이 있고(Named Closure) 어떤 값도 캡쳐하지 않는 클로저 중첩 함수(Nested function) : 이름이 있고(Named Closure) 관련된 함수로부터 값을 캡쳐할 수 있는 클로저 클로저 표현(Closure expression) : 경량화된 문법으로 쓰여지고 관련된 문맥으로(context) 값을 캡쳐할 수 있는 이름이 없는(Unnamed Closure) 클로저 설명을 들으면 어렵다 캡쳐한다는 뜻은 그냥 미뤄두자 전역 함수는 우리가 생각하는 일반적..
어떤 문제를 해결할 수 없을 때, 그 문제를 해결할 수 있는 더 쉬운 문제가 항상 존재한다. - 조지 폴리야(Pólya György) 컴퓨팅 사고는 분해, 패턴 인식, 추상화, 알고리즘의 4가지 중요한 요소가 있다. 분해 Decomposition 상황이나 문제를 분석, 분해하는 것 크고 복잡하고 어려운 문제들을 작은 문제들로 나누는 것 나눠진 작은 문제들을 개별적으로 해결하면 하나의 큰 문제도 해결할 수 있음 집에서 학교에 가는 방법을 분해한다면 집의 문에서 나서는 길부터 학교에 도착하는 과정을 분해할 수 있다 걷기 - 7호선 지하철을 타기 - 2호선으로 환승하기 - 걷기 - 학교 도착! 추상화 Abstraction 어렵고 복잡한 문제를 해결하기 위해서 중요한 핵심 요소에 집중하는 것 상대적으로 중요하지..
UIAlertController를 사용하다보면 반복적으로 코드를 사용하게 된다. BaseViewController 클래스를 따로 만들어서 해당 클래스에 메서드를 만들어서 사용을 했었는데 매니저를 따로 만드는게 좋지 않을까 싶어서 정보를 찾아보았다. 매니저(헬퍼)를 만들어서 코드의 중복을 줄이거나, 프로토콜을 사용하는 두가지 방법을 확인해보자. UIAlertController의 반복적인 사용 예시1) let ac = UIAlertController(title: "알림", message: "메시지", preferredStyle: .alert) ac.addAction(UIAlertAction(title: "확인!", style: .default, handler: nil)) present(ac, animated..
Swift Tutorial: An Introduction to the MVVM Design Pattern Swift Tutorial: An Introduction to the MVVM Design Pattern Swift Tutorial: An Introduction to the MVVM Design Pattern On every new project, you have the privilege of deciding how you’ll architect the app and organize the code. But if you don’t pay attention, or you rush through coding, you risk ending up with spaghetti code. The solution..
- Total
- Today
- Yesterday
- 클로저 축약
- 클로저
- escaping closrue
- 캡쳐리스트
- authorizationCode
- 회원가입
- 디자인패턴
- core data
- 자동클로저
- 강한참조순환
- ASAuthorizationAppleIDCredential
- 메모리 안정성
- 클로저표현
- CoreData
- ios
- object
- 클로저 강한 참조
- Delegate 패턴
- SWIFT
- Persistent Container
- Core Data Stack
- context
- 토큰저장
- unowned
- 강한 참조 순환
- inout 파라미터 메모리 충돌
- autoclosure
- Entity
- identity Token
- weak
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |