Swift

    Swift 메모리 관리 ARC(Automatic Reference Counting)

    C 나 C++ 에서는 OS 레벨의 메모리에 직접 접근하기 때문에 할당해준 메모리를 직접 해제해주었다. 그렇지 않으면 memory leak 문제가 발생 할 수 있는데 iOS에선 ARC 말그대로 참조 횟수를 카운트해서 메모리에서 해제해준다. 객체를 참조하는 수(Reference Count)가 0가 되면 메모리에서 해제해주는 방식이다. 자바에선 Garbage Collection으로 처리를 하는데, 프로세스가 메모리를 순환하면서 더 이상 사용 되지 않는다면 해제를 해주는 방법이다. 이런 방법은 언제 메모리에서 내려가는지 알 수가 없다는 특징이 있다. ARC는 참조하는 카운트가 0가 되면 내려가기 때문에 내려가는 시점이 명확하다. 근데, 메모리를 내가 신경 쓴다는 것 자체가 불편하긴 하다. 과거에는 메모리가 적기..

    Swift 기본 문법 - 16. 맵,필터,리듀서

    16. 맵, 필터, 리듀서 고차함수라 불리는 애들이다. 16.1 맵 맵은 collection의 값을 변경하기위해 주로 사용됩니다. 신기 했던 부분은 dictionary 컬렉션은 map으로 돌리면 내부는 튜플로 받아와지는점이 당황스러웠습니다. 반환 값은 배열로 반환해줍니다. let numbers: [Int] = [0, 1, 2, 3, 4] var doubleNumbers: [Int] = [Int]() doubleNumbers = numbers.map({ (number: Int) -> Int in return number * 2 }) doubleNumbers = numbers.map({ $0 * 2 }) print(doubleNumbers) let alphabetDictionary: [String: Stri..

    Swift GuideLines - 5.Naming(defaultParameter)

    일반적인 사용을 단순화 할 수 있다면, defaulted parameters를 사용하세요. 일반적으로 사용되는 파라미터가 default로 사용될 수 있습니다. 예를들어 아래의 경우 default parameter를 사용해서 가독성을 높일 수 있습니다. let order = lastName.compare(royalFamilyName, options: [], range: nil, locale: nil) 가독성높이기 (, options: [], range: nil, locale: nil 값들을 default로 넘겨버림) let order = lastName.compare(royalFamilyName) Bad extension String { /// ...description 1... public func co..

    Swift GuideLines - 4.Naming

    정리하면 이렇다. 1. 보편적인 단어를 써라 2. 사용자가 사용할 때 예상하지 못할 것 같은게 있으면 주석으로 작성을 해라 O(n^2)복잡도 같은것. 3. 클래스 내에서 동일한 이름으로 함수를 작성 할 때는 동일한 기능을 작성해라 4. 클래스 내에서 동일한 이름인데 반환값이 다른 짓은 하지 말아라 5. 주석을 작성 했을 때 유창하게 읽히게 파라미터 이름을 구성해라 Term of Art (아는 사람만 아는것) noun - a word or phrase that has a precise, specialized meaning within a particular field or profession. 명사 - 특정 필드나 전문영역에서 정확하고 특별함을 갖는 단어나 구절. 일반적인 단어가 의미를 더 잘 전달한다면 ..

    Swift 기본 문법 - 15. Closure

    15. 클로저 막상 ios개발을 해보니 생각 보다 엄청 많이쓰이는 문법이다. 단순하게 생각해서 그냥 익명함수로 생각하겠다. 얘는 파라미터로 함수를 주고 받을 때 많이 사용된다. 예를 들어 데이터를 fetch하는 함수가 있을 때, 데이터를 성공적으로 받았을 때 실행 시킬 함수를 @escaping으로 받는 경우가 있다. @escaping은 그냥 callback 함수라 생각해도 될 것 같다. @escaping을 파라미터로 받는 함수가 끝난후 실행될 함수.? 코드를 보면 이런거다. func fetchUser(withUsername username: String, completion: @escaping(User) -> Void) { REF_USER_USERNAMES.child(username).observeSin..

    Swift GuideLines - 3.Naming-mutating/nonmutating

    처음에 강의를 들었을 땐 무슨내용인가 했는데 mutation/ nonmutation에 따라 이름을 다르게 작성해야한다는 규칙이 있을 줄을 몰랐다. 값복사인지 참조복사인지에 따라 동사, 명사, 접미사, 접두사를 붙이라는데 외우고 싶진않다... 코드를 작성할 때 이 글을 보면서 익숙해지지 않는이상 쓰기 힘들 것 같다. 부수효과(side-effect)를 기반해서 function과 method의 네이밍을 하세요. side-effect가 없는 것은 명사로 읽혀야함. eg. x.distance(to: y), i.successor() side-effect가 있는 것은 동사로 읽혀야 함. eg. print(x), x.sort(), x.append(y) mutating/ nonmutating method의 이름을 일관성..

    Swift 기본 문법 - 14. 접근제어

    14. 접근제어 아마 자바의 public private 처럼 접근을 제어하는 기능이 swift에도 존재를 하는 것 같다. 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이라고 한다. 접근제어를 사용하는 이유는 객체지향에선 캡슐화, 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 전체 코드가 노출될 가능성이 있을 때 접근제어를 사용한다고 한다. 14.2 접근수준 클래스, 구조체, 열거형, 프로퍼티, 메서드, 이니셜라이저, 스브스크립트 각각에도 접근수준을 지정할 수 있습니다. open, public, internal, fileprivate, private 다섯 가지가 있습니다. 14.2.1 공개접근수준 - public public키워드로 지정된 요소는 어디서든 쓰일 수..

    Swift 기본 문법 - 13. 인스턴스의 생성과 소멸

    13. 인스턴스의 생성과 소멸 13.1 인스턴스 생성 이니셜라이저(initializer)를 정의하면 초기화 과정을 직접 구현할 수 있습니다. 이니셜라이저의 역할은 그저 인스턴스의 첫 사용을 위해 초기화하는 것 뿐입니다. init 메서드는 클래스, 구조체, 열거형 등의 구현부 또는 해당 타입의 익스텐션 구현부에 위치합니다. class SomeClass { init() { // 초기화할 때 필요한 코드 } } struct SomeStruct { init() { // 초기화 할 때 필요한 코드 } } enum SomeEnum { case someCase init() { // 열거형은 초기화할 때 반드시 case중 하나가 되어야 합니다. self = .someCase } } // 저장 프로퍼티 초기화 struc..