Structure 구조체는 서로 관계 있는 속성들을 묶어서 표현하는 오브젝트이다. (Object = Data + Method) Object는 Structure와 Class 둘 중 하나의 방법으로 구현된다. Structure와 Class의 차이 Structure(구조체) Class Value Type Reference Type Copy Shared Stack Heap 우선 Structure는 Value type이다. 구조체 타입의 변수에는 말 그대로 해당 구조체의 value가 저장된다. 반면에 Class는 reference type으로 class 타입의 변수에는 값이 저장된 메모리에 대한 참조가 저장된다. 따라서 해당 클래스 변수를 참조하게 되면 변수가 참조하고 있는 메모리에 가서 얻고자 하는 값을 가져온..
Closure 선언 다음과 같이 closure를 선언할 수 있다. // 두개의 정수를 받아 곱한 결과를 반환하는 closure이다. // 정석대로 closure를 선언하였다. var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in return a*b } // 간략하게 closure를 선언하였다. var simipleMultiplyClosure: (Int, Int) -> Int = { a, b in return a * b } closure는 아래와 같이 사용할 수 있다. func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int { let result = operati..
Closure 정의: "Closure expressions are unnamed closures written in a lightweight syntax that can capture values from therir surrounding context" (이름이 없고, 주변의 값들을 캡쳐할 수 있는 가벼운 문법을 가진 closure type이다) (Swift 공식 홈페이지) 간단히 정의하면, 이름이 없는 메소드이다. 장점: 개발자가 필요한 함수를 동적으로 구현하여 넣을 수 있다는 것이다. 함수는 func 키워드를 이용해서 만든다. 함수는 어떤 기능을 수행하는 코드 블록이다. swift는 앞서 배운 함수처럼, 기능을 수행하는 코드블럭의 특별한 타입이 있고, 그것이 closure이다. 함수는 closure..
Dictionary Dictionary 순서가 없다. Key-value 쌍으로 이루어진다. Key는 유일해야한다. 의미 단위로 데이터를 관리할 때 편한다. Dictionary vs. Array 배열은 순서 단위로, 딕셔너리는 키(의미 단위)로 데이터를 찾는다. Dictionary는 다음과 같이 선언하고 초기화 한다. var scoreDic: [String: Int] = ["Jason" : 80, "Jay" : 95, "Jake" : 90] // 단축문법 var scoreDic2: Dictionary = ["Jason" : 80, "Jay" : 95, "Jake" : 90] // 정식문법 Dictionary에서 value는 key를 이용하여 갖고 온다. key가 collection 안에 없을 수도 있기 때..
Swift는 많은 변수들을 묶어 저장하고 관리할 수 있는 Collection을 제공한다. Collection은 대표적으로 3가지 종류가 있다. Array Dictionary Set Array Array는 같은 타입의 변수를 순서에 따라 저장하는 Collection 타입으로 다음과 같은 특징이 있다. Array는 순서에 따라 element를 담는다. Array는 같은 타입의 데이터(element)만 담을 수 있다. Index로 Array로 접근할 수 있다. Array는 언제 쓰는가? 1. 순서가 있는 아이템을 저장, 관리할 때 2. 아이템의 순서를 알면 유용할 때 Array 선언 Array의 선언은 다음과 같다. 아래 코드는 같은 내용이나 표현 방법이 다른 것이다. let evenNumbers : [Int..
Class Class는 Reference type이다. 그리고 heap 메모리 영역에 생성된다. Stack Heap Fast: 시스템에서 당장 실행해야하거나, tight 하게 컨트롤하고 관리되어야 하는 경우. 함수 내에 선언된 지역변수. 효율적이고 빠르다 Slow: reference type을 저장한다. 큰 메모리 풀을 가지고 있어서 시스템에 동적으로 메모리 할당을 요청할 수 있다. 대신 스택처럼 자동으로 데이터를 제거하지 않기 때문에, 개발자가 신경써서 쓰지 않는 데이터는 제거해줘야 한다. Structure를 Class로 바꿔보자. 다음과 같이 PersonStruct 구조체가 있다. struct PersonStruct { var firstName: String var lastName: String va..
Optional의 해제 Optional은 그자체로 값이 아니다. 비유하자면 택배박스와 같은데, 택배박스를 개봉해야 내용물이 나오는 것처럼 Optional도 값을 가져오기 위해서는 Optional 해제를 해야한다. Optional 해제는 4가지 방법이 있다. Forced unwrapping Optional binding (if let) Optional binding (guard) Nil coalescing 하나하나 알아보자 Forced unwrapping 'Forced'란 말에서 느껴지겠지만 말 그래도 강제로 Optional을 해제한다는 말이다. 억지로 택배박스를 까는 것이다! 강제로 Optional을 해제한다는 건 무슨 소리일까? var carName: String? carName = nil carNam..
Optional 이란 개념은 왜 생겼을까? 예를 들어보자. var name: String = "dew" var dogName:String = "mung" var carName:String = ?? 내 이름은 dew 이고, 우리집 멍멍이 이름은 뭉이다. 그리고 나는 뚜벅이이다. 그러면 난 차가 없는데 carName은 어떻게 표현해야하지?? 이렇게 존재하지 않는다는 것을 표현하기 위해서는 'nil'이라는 개념을 이용하여 표현한다. 즉 내 carName == nil 이라는 것이다 (nil은 구글 번역기를 돌려보면 없을 '무'라는 의미있다). Swift는 이처럼 존재 자체가 없는 값을 표현하기 위해서 nil이란 개념을 두었고, nil이란 값을 가질 수 있는 변수 타입을 optional이라고 한다. 즉 Optio..
Function 고급 기능 오버로드 함수의 이름은 같지만 다양한 리턴 타입, 파라미터 타입, 개수 등으로 다른 함수. func printTotalPrice(price: Int, count: Int){ print(" Total price: \(price * count)") } func printTotalPrice(price: Double, count: Double){ print(" Total price: \(price * count)") } func printTotalPrice(가격: Double, 갯수: Double){ print(" Total price: \(가격 * 갯수)") } In-out parameter 기본적으로 swift에서 파라미터 value는 값이 copy 되어서 들어오되, 그 타입이 c..
Function Function은 기능을 수행하는 코드 블럭이다. 인풋을 주면 기능을 수행한 뒤 결과값을 반환해주는 것이다. 마치 자판기와 같다. 동전을 넣으면 음료수를 반환해주는 자판기처럼, 인풋을 넘기면 결과값을 반환해주는 것이 function이다. 메소드와 비슷하나 fucntion은 메소드와 다르다. 먼저 메소드는 오브젝트에 속해서 기능을 수행한다. 그에 반해 function은 독립적으로 호출이 가능하다. 예를 들어 메소드는 오브젝트에 속해있기 때문에 다음과 같이 호출해야 한다.object.method() 하지만 함수는 독립적이기 때문에 print()와 같이 그 자체로 호출할 수 있다. 함수의 선언 Swift에서 함수는 'func' 키워드를 사용하여 선언한다. // param 0개 // 이름을 출력..