본문 바로가기

Swift37

클래스 (Class) 정의 문법 클래스는 참조 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 클래스의 타입 메서드는 두 종류가 있다. 상속 후 재정의가 가능한 class 타입메서드, 상속 후 재정의가 불가능한 static 타입메서드가 있다. class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 // 재정의 불가 .. 2024. 4. 1.
구조체 (Struct) 정의 문법 스위프트 대부분의 타입은 구조체로 이루어져 있다. 구조체는 값 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. struct 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 프로퍼티는 변수의 다른 이름을 말한다. 클래스, 구조체, 열거형 등 전체적으로 사용되는 변수를 프로퍼티라고 부른다. 프로퍼티에는 저장, 연산, 타입 프로퍼티가 있다. 메서드는 함수와 같은 의미인데, 구조체, 클래스 내에서 쓸 때 메서드라고 한다. struct Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100.. 2024. 4. 1.
옵셔널 옵셔널 변수 뒤에 붙는 ? 물음표가 바로 옵셔널이다. 옵셔널 변수는 값이 있을 수도 또는 없을 수도 있다는 의미이다. name이라는 변수에 String 타입으로 "jerry"라는 값을 할당했다. var name: String = "jerry" print(name) // jerry 근데 만약에 name이라는 변수에 들어갈 값이 아직 정해지지 않았다면? String 타입 뒤에 ? 물음표를 붙인다. 그러고 print()로 출력하면 nil이 출력된다. var name: String? print(name) 나중에 name이라는 변수에 값을 할당한다면? 그리고 출력하면 Optional("jerry")가 나온다. var name: String? = "jerry" print(name) // Optional("jerry.. 2024. 3. 29.
반복문 for ~ in while repeat ~ while for ~ in 구문 for ~ in 구문의 기본 형태 for item in items { /* 실행 구문 */ } for ~ in 구문의 사용 var myNumber: [Int] = [1,2,3,4,5] for item in myNumber{ print("배열 내 데이터 : \(item)") } /* 배열 내 데이터 : 1 배열 내 데이터 : 2 배열 내 데이터 : 3 배열 내 데이터 : 4 배열 내 데이터 : 5 */ 컬렉션의 딕셔너리 경우 item은 key와 value로 구성된 튜플 타입이다. var mathScore = ["jerry" : 100, "mike": 90, "john" : 85, "tom" : 70] for (name, score).. 2024. 3. 26.
조건문 if ~ else switch if ~ else 구문 if ~ else 구문의 기본 형태 if 조건 { /* 실행 구문 */ } else if 조건 { /* 실행 구문 */ } else { /* 실행 구문 */ } if ~ else 의 사용 스위프트의 조건에는 항상 Bool 타입으로 들어와야 한다. 즉, myNumber 100 { print("100 보다 커요") }.. 2024. 3. 26.
함수 고급 매개변수 기본 값 매개변수에 기본적으로 전달될 값을 미리 지정할 수 있다. ⭐️ 기본값을 갖는 매개변수는 매개변수 목록 중에 뒤 쪽에 위치하는 것이 좋다. func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 반환타입 { /* 함수 구현부 */ return 반환값 } 예: friend 라는 매개변수에는 기본값이 없고, me 라는 매개변수에는 기본값을 할당 함수 func greeting(friend: String, me: String = "mike") { print("Hello \(friend)! I'm \(me)") } greeting 함수를 호출하면? greeting(friend: "jerry") // Hello jerry! I'm mike .. 2024. 3. 22.
함수 함수의 선언 기본형태 func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> 반환타입 { /* 함수 구현부 */ return 반환값 } 예: 두 개의 정수를 받아서 더한 값을 정수로 반환하는 함수 func sum(a: Int, b: Int) -> Int { return a + b } 반환 값이 없는 함수 반환 값이 없을 경우에는 반환 타입에 Void를 설정하거나, 반환 타입을 생략할 수 있다. func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> Void { /* 함수 구현부 */ return } 예: 매개변수 name에 String 타입의 값을 입력 받아 이름을 출력하는 함수 func printMyName(name: Str.. 2024. 3. 22.
컬렉션 타입 Array: 순서가 있는 리스트 컬렉션 Dictionary: 키와 값의 쌍으로 이루어진 컬렉션 Set: 순서가 없고, 멤버가 유일한 컬렉션 Array 멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입이다. var someArray: [String] = [] var someArray1: [String] = Array() print(type(of: someArray)) // Array print(type(of: someArray1)) // Array Array 활용 만약에 someArray라는 배열을 선언할 때 "let" 키워드로 하면 수정이 안된다. // 요소 추가 someArray.append("apple") someArray.append("banana") print(someArray) // ["a.. 2024. 3. 21.
기본 데이터 타입 Bool Int, UInt Float, Double Character, String Bool true와 false 만을 값으로 가지는 타입 var someBool: Bool = true someBool = false print(someBool) // false Int, UInt Int 정수 타입, 현재는 기본적으로 64비트 정수형 var someInt: Int = -100 someInt = 100 // someInt = 100.2 오류 발생 UInt 양의 정수 타입, 현재는 기본적으로 64비트 양의 정수형 var someUInt: UInt = 100 // someUInt = -100 오류 발생 Float, Double Float 실수 타입, 32비트 부동소수형 실수는 정수를 포함하기 때문에 Int 타입의.. 2024. 3. 21.
상수, 변수 상수 선언 키워드: let 변수 선언 키워드: var 선언 방식 let 이름: 값의 타입 = 값 var 이름: 값의 타입 = 값 값의 타입이 명확하다면 타입은 생략 가능 let constant: String = "차후에 변경이 불가능한 상수 let" var variable: String = "차후에 변경이 가능한 변수 var" var booleanValue = true 상수, 변수 선언 후에 나중에 값 할당하기 let sum: Int var inputValue1: Int = 200 var inputValue2: Int = 300 // sum 선언 후 할당 sum = inputValue1 + inputValue2 print(sum) // 500 // sum = 200 // 오류 발생 변수(var 선언)는 .. 2024. 3. 21.
클로저 - @autoclosure 클로저 - @autoclosure 파라미터로 전달된 일반 구문 또는 함수를 클로저로 래핑(Wrapping) 한다는 의미이다. 즉, @autoclosure가 붙은 경우에는 일반 구문을 인자값으로 넣어도 컴파일러가 알아서 클로저로 만들어준다. 아래 코드는 클로저가 어떻게 판단을 지연하는지 보여준다. 클로저 내부의 코드에 의해 fruits 배열의 첫 번째 요소는 삭제 되지만, 클로저가 실제로 호출되기 전까지 삭제되지 않습니다. var fruits: [String] = ["Apple", "Banana", "Kiwi", "Melon"] let fruitsCheck = { fruits.removeFirst()} print(fruits.count) // 4 print("삭제 아이템: \(fruitsCheck())").. 2024. 3. 20.
클로저 클로저란? 클로저는 코드의 블럭이다. 일급 시민으로 전달인자, 변수, 상수 등으로 저장, 전달이 가능하다. ⭐️ 일급시민(frist citizen) 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원한다. 함수는 클로저의 일종으로, 이름이 있는 클로저라고 생각하면 된다. 기본 클로저 문법 { (매개변수 목록) -> 반환타입 in 실행 코드 } 클로저의 사용 아래에서 보면 (String) → String 을 통해 String 타입의 매개변수를 받아 String을 반환하는 함수 타입이라는 걸 알려준다. (클로저는 이름 없는 함수이다.) { ... } 이 부분이 바로 클로저이다. // sayHello라는 상수에.. 2024. 3. 20.