본문 바로가기

iOS34

[16일차] Class 사용 * Class와 Struct 차이 비교 - class : Heap(느림) / struct : Stack(빠름) - structure은 Copy(복사 = 별도로 관리) 개념, class는 Share(공유 = 같은 곳을 바라봄) 개념 import UIKit struct PersonStruct { var firstName: String var lastName: String var fullName: String { return "\(firstName) \(lastName)" } mutating func uppercaseName() { firstName = firstName.uppercased() lastName = lastName.uppercased() } } class PersonClass { var firs.. 2020. 8. 4.
[15일차] Property vs Method * Property vs Method 을 선택 기준 : 동일한 결과값을 전달할 때 무엇을 사용하는 것이 효율적인가? Q) Setter가 필요한가? A) Yes - "Computed Property" Q) 계산이 많이 필요한가? 혹은 DB Access나 File IO가 필요한가? A) Yes - "Method" No - '"Computed Property" * Method : 인스턴스에 귀속되어서 사용되는 것 - mutating : struct 인스턴스 변수가 함수내에서 변형될 때 '함수 선언부'에 적어줘야 한다. * extension : 기존에 만들어진 struct에서 기능을 확장하고자 할 때 사용 Tip) 확장 시 필요한 함수명을 미리 적어놓고, 함수 선언문을 만들기 2020. 8. 4.
[14일차] Structure Property (구조 프로퍼티) 학습 * Property Observer (프로퍼티 감시자) : willSet(값이 변경되기 직전), didSet(값이 변경된 직후) 프로퍼티 변경을 감시 * Computed Property (연산 프로퍼티) : set, get 저장된 값을 연산(가공)하여 반환 * lazy variables (게으른 변수) : 필요하지만 실제로 사용되기 전에는 미리 불러오지 않는 형태의 변수를 의미 (불필요한 메모리 낭비 줄이는 효과) import UIKit struct Person { var firstName: String { // willSet : 변수 변경이 이루어지기 전에 확인 (firstName --> newValue)로 변경 willSet { print("willSet: \(firstName) --> \(newVa.. 2020. 7. 31.
[13일차] Structure(구조)와 Class 일반적으로 Swift에서 객체 구조는 아래와 같다. Object = Data + Method * Structure vs Class Structure Class Value Types Reference Types Copy Share Stack Heap - Structure : 관계 있는 데이터를 모아서 표현할 때 사용 - Class : 데이터를 모아서 표현하되, 같은 데이터를 참조할 때 사용 왜 Structure 구조를 사용해야 할까? 위와 같이 첫번째 줄처럼 변수를 일렬로 나열하는 것보다, 두번째 줄처럼 사람이 이해하기 쉬운 구조로 나누어서 변수를 표현해주는 것이 가독성이 좋으며 협업이나 리펙토링 과정에서도 코드파악에 용이하다. 아래는 Structure(구조) 형식을 이용하여 "제일 가까운 위치의 배달 가.. 2020. 7. 30.
[12일차] Set 과 Closure 이용 * Set : 중복이 없는 유니크한 아이템을 담을 때 사용 * Closure : 이름이 없는 메소드 클로저를 이용하여 동적으로 함수를 만들어서 활용 가능 * Closure - Capturing Value (☆) : scope 밖의 범위에서도 사용이 가능하다. (Swift에서 제공하는 기능) 2020. 7. 28.
[11일차] Array 함수와 Dictionary 실습 1. Array(배열)에 사용하는 다양한 함수 * 배열 변수에 range(범위)를 지정하여 사용 가능 ex) let firstThree = eventNumbers[0..2] * contains() : 배열에 특정 값의 포함 여부 * insert(value, at) : 특정 값(value)을 인덱스(at)에 추가 * removeAll() : 배열 전체를 모두 삭제 * swap(startIndex, endIndex) : 배열의 특정 인덱스 값을 서로 바꿔주는 함수 * for num in eventNumbers { print(num) } * 반복문으로 인덱스와 값을 출력 for (index, num) in eventNumbers.enumerated() { print("idx: \(index), value: \.. 2020. 7. 27.
[9일차] Optional 고급기능 * Optional 이란? : 없는 것을 표현할 때 사용하는 개념 nil : 존재하지 않는 것을 표현할 때 사용 * 고급 기능 4가지 - Forced unwrapping : 억지로 박스를 까보기 - Optional binding (if let) : 부드럽게 박스를 까보기 1탄 - Optional binding (guard) : 부드럽게 박스를 까보기 2탄 - Nil coalescaing : 박스를 까봤더니, 값이 없을 때 기본값을 줘보자 * 도전 과제 * if let : 변수값을 출력 및 확인 * guard : if let 보다 코드를 간결하게 표현 가능 2020. 7. 25.
[8일차] Functional 고급 기능 * Functional 함수 중간 과제 (실습) - 총 3문제 - 1. 성, 이름을 받아서 fullName을 출력하는 함수 2. 1번에서 만든 함수인데, 파라미터 이름을 제거하고 fullName을 출력하는 함수 3. 성, 이름을 받아서 fullName을 return 하는 함수 온라인 학습할 때는, 반드시 중간에 제시하는 문제를 Pause(일시정지) 버튼을 이용해서 스스로 생각해서 코드를 구현하는 시간을 가져야 한다. ▹ 함수를 한마디로 정의한다면? : 함수는 자판기다. - 다양한 함수의 형태 (1) input만 있는 경우 (2) output만 있는 경우 (3) input, output 둘 다 있는 경우 (4) input, output 없이 내부 기능만 수행하는 경우 * 함수 형태 (전체적인 틀) func.. 2020. 7. 24.
[7일차] for, switch, Functional 사용법 * for ~ loop 조건절 : where (조건) 사용 --> 코드의 간결성이 좋음. #현업에서는 중첩 for문을 사용하지 않는다. (이유: 가독성이 떨어지고, 불필요한 자원 낭비가 발생할 가능성 있음) * continue 사용 : for 반복문 내에서 특정한 조건(if)에 해당하는 경우는 pass 하고, 그다음 순서를 실행 * switch ~ case 사용 * Functional and Optional Method와 Function은 다르다. - object.methodName() : Method - functionName() : Function 일반적으로 Method는 Object(객체)에 종속되어 사용된다. 하지만, Function의 경우에는 독립적으로 사용이 가능하다. * func() 에서 파.. 2020. 7. 23.