프로퍼티 프로퍼티는 클래스, 구조체, 열거형과 연관된 값입니다. 타입과 관련된 값을 저장할 수도, 연산할 수도 있습니다. 프로퍼티의 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 이번 파트에서는 지연 저장 프로퍼티를 제외한 저장 프로퍼티와 연산 프로퍼티에 대해 알아봅니다. 정의와 사용 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있습니다. 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있습니다. 연산 프로퍼티는 var로만 선언할 수 있습니다. 연산프로퍼티를 읽기전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없습니다. 읽기전용으로 구현하려면 get 블럭만 작성해주면 됩니다. 읽기전용은 get블럭을 생략할 수 있습니다. 읽..
클로저는 코드의 블럭입니다. 일급시민(first-citizen)으로, 전달인자, 변수, 상수 등으로 저장, 전달이 가능합니다. 함수는 클로저의 일종으로, 이름이 있는 클로저라고 생각하면 됩니다. 기본 클로저 문법 { (매개변수 목록) -> 반환타입 in 실행 코드 } 매개 변수 필요없으면 () 로만 사용해도 됨 반환타입 없으면 void 사용 // 함수를 사용한다면 func sumFunction(a: Int, b: Int) -> Int { return a + b } var sumResult: Int = sumFunction(a: 1, b: 2) print(sumResult) // 3 //클로저의 사용 // sum이라는 변수에 클로저를 할당 var sum: (Int, Int) -> Int = { (a: In..
swift 에서 class, 구조체, 열거형을 살펴보면 class 전통적인 OOP관점에서의 클래스 와 크게 다른점 없음 단일상속 : 이게 가능함 (인스턴스/타입)메서드 (인스턴스/타입) 프로퍼티 참조타입 Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성 Struct C 언어 등의 구조체보다 다양한 기능 상속 불가 (인스턴스/타입)메서드 (인스턴스/타입) 프로퍼티 값 타입 swift의 대부분의 큰 뼈대는 모두 구조체로 구성 Enum 다른 언어의 열거형과 많이 다른 존재 상속 불가 (인스턴스/타입)메서드 (인스턴스/타입) 연산 프로퍼티 값 타입 Enumeration 약자 유사한 종류의 여러값을 유의미한 이름으로 한 곳에 모아 정의 예) 요일, 상태값, 월(Month)등 열거형 자체가 하나의 데이..
클레스는 구조체와 매우 유사함 구조체는 값 타입인 반면 클래스는 참조 타입임 정의 문법 클래스는 참조 타입입니다. 타입이름은 대문자 카멜케이스를 사용하여 정의합니다. swift의 클레스는 다중 상속이 되지 않는 다는 것이 특징임 class 이름 { /* 구현부 */ } 클레스도 구조체와 유사하게 프로퍼티와 메소드를 가질수 있음 프로퍼티 및 메서드 구현 클래스의 타입 메서드는 두 종류가 있습니다. 상속 후 재정의가 가능한 class 타입메서드, 상속 후 재정의가 불가능한 static 타입메서드가 있습니다. 자세한 내용은 상속 부분에서 다시 다룹니다. class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutablePropert..
정의 문법 스위프트 대부분의 타입은 구조체로 이루어져 있습니다. 구조체는 값 타입입니다. 타입이름은 대문자 카멜케이스를 사용하여 정의합니다. struct 이름 { /* 구현부 */ } */ 프로퍼티 및 메서드 구현 // 프로퍼티는 구조체 안에 들어가는 인스턴스 변수라고 생각 // 메서드는 안에 들어가 있는 함수라고 생각 struct Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 가변, 불변 프로퍼티는 인스턴스 프로퍼티라고 생각하면 됨 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() {..
옵셔널 값 추출 방법 2가지 • Optional Binding - 옵셔널 바인딩 • Force Unwrapping - 강제 추출 Optional Binding 옵셔널의 값을 꺼내오는 방법 중 하나 nil 체크 + 안전한 값 추출 ex 인트형을 보관하는 상자를 하나 더 보호막으로 감쌓아 준다고 생각하면됨 상자안에 값이 있습니까? 있으면 추출 없으면 지나침 //MARK:- Optional Binding func printName(_ name: String) { // 일반 스트링 값 가지려고 했는데 print(name) } var myName: String? = nil //printName(myName) // 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생 그래서 if-let 방식을 통해 옵셔널 바인딩 해..
옵셔널 스위프트 핵심 개념중 하나 값이 있을수도, 없을수도 있음 옵셔널이 아닌 상수에다가 nil 값 넣으려고 하면 오류남 let someConstant: Int = nil 오류남 왜 옵셔널이 필요한가 nil의 가능성을 명시적으로 표현 • nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현가능 • 문서/주석 작성 시간을 절약 • 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용 • 효율적인 코딩 • 예외 상황을 최소화하는 안전한 코딩 let optionalValue: Optional = nil 아래 처럼 줄여 사용 가능 let optionalValue: Int? = nil 옵셔널 표현방법음 ?, ! 2가지가 있음 //MARK:- 암시적 추출 옵셔널 // Implicitly U..
for-in 구문 기존 언어의 for-each 구문과 유사합니다. Dictionary의 경우 이터레이션 아이템으로 튜플이 들어옵니다. 튜플에 관해서는 Swift Language Guide의 Tuples 부분을 참고하면 되겠습니다. for-in 구문의 기본 형태 for item in items { /* 실행 구문 */ } for-in 구문의 사용 var integers = [1, 2, 3] let people = ["yagom": 10, "eric": 15, "mike": 12] for integer in integers { print(integer) } // Dictionary의 item은 key와 value로 구성된 튜플 타입입니다 for (name, age) in people { print("\(na..