Swift/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 기본 문법 - 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 기본 문법 - 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..

    Swift 기본 문법 - 12. 프로퍼티와 메서드

    프로퍼티는 클래스, 구조체, 또는 열거형 등에 관련된 값을 뜻합니다. 메서드는 특정 타입에 관련된 함수를 뜻합니다. 12.1.1 저장프로퍼티 클래스의 경우 옵셔널을 준다면, init을 통해 초기값을 주지않아도 괜찮습니다. 나중에 값을 알게되었을 때 class에 값을 넣어줄 수 도 있습니다. // 좌표 struct CoordinatePoint { var x: Int = 0 // 저장 프로퍼티 var y: Int = 0 // 저장 프로퍼티 } // 구조체에는 기본적으로 저장 프로퍼티를 매개변수로 갖는 이니셜라이저가 있다. let kemiPoint = CoordinatePoint(x: 3, y: 5) // class Position { var point: CoordinatePoint // 저장 프로퍼티(변수)..

    Swift 기본 문법 - 11. 구조체와 클래스

    11. 구조체와 클래스 둘 모두 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용하다. 구조체: 값 타입 클래스: 참조 타입 11.1 구조체 11.1.1 구조체의 정의 구조체는 struct 키워드로 정의합니다. struct BasicInformation { var name: String var age: Int } // 구조체 인스턴스의 생성 및 초기화 // 프로퍼티 이름(name, age)으로 자동 생성된 이니셜라이저를 사용하여 구조체를 생성합니다. var kemiInfo: BasicInformation = BasicInformation(name: "kemi", age: 99) kemiInfo.age = 100 kemiInfo.name = "Seba" // 프로퍼티 이름(name, age)으로 자동 생성..

    Swift 기본 문법 - 10. 옵셔널

    옵셔널 다른언어에는 없는 표현으로 스위프트의 특징 중 하나인 안정성safe을 문법으로 담보하는 기능입니다. 옵셔널은 단어 뜻 그대로 '선택적인', 즉 값이 '있을 수도, 없을 수도 있음'을 나타내는 표현입니다. 옵셔널 사용 // var myName: String = "kemi" // myName = nil // 오류! var myName: String? = "kemi" print(myName) myName = nil print(myName) 옵셔널은 어떤 상황에 사용할까요? 1) 함수에 전달되는 전달인자의 값이 잘못된 값일 경우 제대로 처리하지 못했음을 nil을 반환하여 표현 할 수 있습니다. 2) 매개변수를 굳이 넘기지 않아도 된다는 뜻으로 매개변수의 타입을 옵셔널로 정의 할 수도 있습니다. 옵셔널 자..