본문 바로가기

프로그래밍 [KOR]/Swift

(27)
Swift의 프로퍼티 감시자 1. 프로퍼티 감시자 •프로퍼티 감시자를 사용하면 프로퍼티의 값이 변경될 때 원하는 동작을 수행할 수 있음 •값이 변경되기 직전에 willSet 블럭이, 값이 변경된 직후에 didSet 블럭이 호출됨 •둘 중 필요한 하나만 구현해 주어도 무관 •변경되려는 값이 기존 값과 똑같더라도 프로퍼티 감시자는 항상 동작 •willSet 블럭에서는 암시적 매개변수 newValue를, didSet 블럭에서는 oldValue를 사용할 수 있음 •프로퍼티 감시자는 연산 프로퍼티에는 사용할 수 없음 •프로퍼티 감시자는 함수, 메서드, 클로저, 타입 등의 지역/전역 변수에 모두 사용 가능 2. 정의 및 사용 123456789101112131415161718192021222324252627282930313233343536373..
Swift의 프로퍼티 1. 프로퍼티의 종류 •인스턴스 저장 프로퍼티 •타입 저장 프로퍼티 •인스턴스 연산 프로퍼티 •타입 연산 프로퍼티 •지연 저장 프로퍼티 2. 정의와 사용 •프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있음 •다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있음 •연산 프로퍼티는 var로만 선언할 수 있음 •연산 프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없음 •읽기전용으로 구현하려면 get 블럭만 작성해주면 됨. 읽기전용은 get 블럭을 생략할 수 있음 •읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set 블럭을 모두 구현해주면 됨 •set 블럭에서 암시적 매개변수 newValue를 사용할 수 있음 12345678910111213141516171819202122..
Swift의 클로저 고급 클로저는 아래 규칙을 통해 다양한 모습으로 표현될 수 있음 1. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행 클로저(trailing closure)로 함수 밖에 구현할 수 있음 2. 반환타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입을 생략할 수 있음 3. 단축 인자 이름 : 전달인자의 이름이 굳이 필요없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달인자 이름($0, $1, $2 ..)을 사용할 수 있음 4. 암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급 기본 클로저 표현 123456// 클로저를 매개변수로 갖는 함수 calculated(a:b:metho..
Swift의 클로저 1. 클로저 •클로저는 실행가능한 코드 블럭 •함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달과 반환 값이 존재 할 수 있다는 점이 동일 •함수는 이름이 있는 클로저 •일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능 2. 기본 클로저 문법 •클로저는 중괄호 {}로 감싸져있음 •괄호를 이용해 파라미터를 정의 •-> 을 이용해 반환 타입 명시 •"in"키워드를 이용해 실행 코드와 분리 123{ (매개변수 목록) -> 반환타입 in /* 실행 코드 */}cs 3. 클로저 사용 1234567// sum이라는 상수에 클로저를 할당let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b} let sumResult: Int = sum(1..
Swift의 값/참조 타입 클래스 vs 구조체/열거형 •클래스는 참조 타입, 열거형과 구조체는 값 타입이라는 것이 가장 큰 차이•클래스는 상속이 가능하지만, 열거형과 구조체는 상속이 불가능 1. 값 타입과 참조 타입 비교 •값 타입(Value Type) : 데이터를 전달할 때 값을 복사하여 전달 •참조 타입(Reference Type) : 데이터를 전달할 때 값의 메모리 위치를 전달 123456789101112131415161718192021222324252627282930313233343536struct ValueType { var property = 1} class ReferenceType { var property = 1} // 첫 번째 구조체 인스턴스let firstStructInstance = ValueType() // ..
Swift의 열거형 1. 열거형 Swift 열거형은 다른 언어의 열거형과 많이 다름. 강력한 기능을 지니고 있어 잘 알아두고 사용하면 좋음 •유사한 종류의 여러 값을 한 곳에 모아서 정의한 것. 예) 요일, 월, 계절 •enum 자체가 하나의 데이터 타입으로, 대문자 카멜케이스를 사용하여 이름을 정의 •각 case는 소문자 카멜케이스로 정의 •각 case는 그 자체가 고유의 값 (각 case에 자동으로 정수값이 할당되지 않음) •각 case는 한 줄에 개별로도, 한 줄에 여러개도 정의할 수 있음 1234567891011121314enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ...} // 예제enum BlackPink { case Jennie case Rose case Lisa c..
Swift의 클래스 1. 클래스 •클래스는 참조(reference) 타입 •타입이름은 대문자 카멜케이스를 사용하여 정의 •Swift의 클래스는 다중 상속이 되지 않음 2. 클래스 문법 •정의: "class" 키워드 사용 123class 이름 { /* */}cs •프로퍼티 및 메서드 구현 1234567891011121314151617181920212223242526class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method..
Swift의 구조체 1. 구조체 •스위프트의 대부분 타입은 구조체로 이루어져 있음 •구조체는 값(Value) 타입 •타입이름은 대문자 카멜케이스를 사용하여 정의 2. 구조체 문법 •구조체 정의 : "struct" 키워드 사용 123struct 이름 { /* 구현부 */}cs •구조체 프로퍼티 및 메서드 구현 1234567891011121314151617181920struct Sample { // 가변 프로퍼티 (값 변경 가능) var mutableProperty: Int = 100 // 불변 프로퍼티 (값 변경 불가능) let immutableProperty: Int = 100 // 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티) static var typeProperty: Int = 100 //..