전체 글
-
swift - Propery #3 (Property Observer)swift 2021. 1. 12. 11:15
// 속성 감시자 // wilSet : 속성이 저장되기 직전에 호출됨, 파라미터 생략하면 newValue // didSet : 속성에 값이 저장된 후 호출됨, 파라미터 생략하면 oldValue // var만 사용 가능 // 지연저장 속성과 계산속성에는 속성 감시자를 추가 불가능 // 그렇다고 속성을 감시할수 없는 것은 아님 지연 저장속성의 경우 초기화 코드에서, 계산 속성에서는 set 블록에서 필요한 코드를 구현한다. // 계산속성에서는 한가지 예외가 있는데 서브클래스에서 계산속성을 오버라이딩하고 여기서 프로퍼티 옵저버를 구현하는 것은 가능 // wilSet 블록과 didSet블록 중 반드시 하나는 구현해야 속성 감시자가 된다. class Size { var width = 0.0 { willSet { p..
-
swift - Property #2 (Computed ProPerty, Read-Only Computed Property)swift 2021. 1. 12. 11:08
// Computed : 수학적인 의미보다는 다른 속성을 기반으로 속성이 결정된다는 뜻 // 즉, 속성에 접근할때 마다 값이 달라질 수 있다. -> 항상 var 키워드로 시작해야함 // type을 항상 명시해줘야 하고 기본값을 설정할 수 없다. class Person { var name: String var yearOfBirth: Int init(name: String, year: Int) { self.name = name self.yearOfBirth = year } var age: Int { get { let calendar = Calendar.current let now = Date() let year = calendar.component(.year, from: now) return year - y..
-
swift - Property #1 (Stored Properties, Explicit Member Expression, Lazy Stored Properties)swift 2021. 1. 12. 10:59
// 저장속성 : 형식 내부에 속성을 설정한다. // 저장속성은 instance // var : 변수 // let : 상수 class Person { let name: String = "John Doe" var age: Int = 33 } let p = Person() p.name p.age // instance 멤버에 접근하는 . : Dot syntax or Explicit Member Expression // var로 age를 설정했기 때문에 바꿀 수 있음 p.age = 30 p.age // p.name = "New Name" 못바꿈 struct Person2 { let name: String = "Jaeho" var age: Int = 28 } let p2 = Person2() p2.name p2...
-
swift - Identity Operators(항등 연산자)swift 2021. 1. 8. 03:34
Identity Operators(항등 연산자) 우선 동일성 비교 방식에 대해 알아보면 값 형식의 데이터는 데이터를 저장할때 Stack에 저장하기 때문에 하나의 비교 방법만으로 가능하지만 참조 타입의 경우에는 값을 Heap에 주소를 Stack에 저장하기 때문에 값을 비교할 때는 ==, != 같은 연산자를 사용하지만 주소를 비교할 때는 Identity Operator가 필요하다 피연산자는 항상 classInstance class A { var a: Int var b: Int init(a: Int, b: Int) { self.a = a self.b = b } } let a = A(a: 1, b: 2) let b = a let c = A(a: 3, b: 4) a === b // true : 동일한 주소에 저장..
-
swift - Value Types And Reference Types(값 형식과 참조 형식)swift 2021. 1. 8. 03:21
Value Types And Reference Types(값 형식과 참조 형식) 가장 큰 차이점은 값 형식은 원본에 영향을 미치지 않지만 참조형식은 원본에 영향을 미침 구현 목적에 맞게 값 형식인지 참조형식인지를 명확히 구분해서 쓸 것. 규칙 1. 객체지향 프로그래밍에서는 대부분 참조형식으로 구현 2. 상대적으로 적은 데이터를 구현하고 상속이 필요하지 않으면 값 형식 3. 값이 전달되는 시점마다 복사본이 생성되어야 하는 경우도 ㄱ밧 형식 4. 연관된 상수그룹을 구현할때는 열거형, 코드 내에서 한번만 사용되는 형식은 튜플 형식 5. 나머지는 튜플 6. 함수형 프로그래밍, 프로토콜 지향 프로그래밍에서는 주로 값 형식 7. 참조를 전달해야 하거나 상속을 해야하는 경우 class
-
swift - Structures & Classesswift 2021. 1. 7. 21:09
Structures & Classes swift는 방대한 형식의 데이터 타입을 제공하지만 우리가 필요한 모든 데이터 타입을 제공하진 않음 Programming Paradigm 프로그램 언어는 저마다 프로그래밍 철학을 가지고 있고 내부적인 규칙 등의 차이가 있다. 이러한 것을 Programming Paradigm이라고 하는데 프로그래밍 언어가 다양한만큼 Programming Paradigm 또한 다양하다. swift는 Multi Paradigm언어이고 이 세가지 paradigm이 큰 축을 이루고 있다. 1. Object-Oriented Programming 객체지향 프로그래밍에서 가장 중요한 것은 Object(객체) 프로그램에서 표현하는 모든 데이터를 객체로 표현한다. 1.1 Abstraction (추상화..
-
swift - Enumerations(RawValue, Associated Value, Enumeration case Pattern)swift 2021. 1. 7. 19:18
Enumerations(열거형) // 열거형 // 열거형에 포함된 상수들은 상수라고 부르지 않고 Enumeration case 혹은 case로 부름 // 코드의 가독성, 안정성 향상 // 열거형을 사용하지 않았을때 발생하는 오류 //let left = 0 //let center = 1 //let right = 2 // //var aligment = center // 규칙을 모르더라도 값만으로 어떤 의미인지 파악할 수 있게 // 가독성은 증가했지만 문자열이기 때문에 오타가 발생할 수도 있고 비교 기준을 명확히해야함(대소문자 등) let left = "left" let center = "center" let right = "right" var aligment = center // 대문자라서 false if ..
-
swift - Iterating Collections(for-in, foreach)swift 2021. 1. 7. 15:01
Iterating Collections Collection을 열거한다 -> Collection에 저장된 모든 요소를 대상으로 반복처리 한다. for-in // Collection을 열거한다 -> Collection에 저장된 모든 요소를 대상으로 반복처리 한다. // 배열, 딕셔너리, 셋 열거해보자 // 1. for in print("Array,", "===============") let arr = [1, 2, 3] for num in arr { // 1, 2, 3이 loop 상수인 num으로 순서대로 전달됨 print(num) } print("Set", "===========") let set:Set = [1, 2, 3] for num in set { print(num) } print("Dictiona..