[시작] - Swift의 특성 중 Safe를 문법으로 담보하는 기능 - 옵셔널 : 값이 있을 수도 있고 없을 수도 있다- 옵셔널인 값과 옵셔널이 아닌 값은 서로 다른 타입 [옵셔널 사용] - NULL == nil, 완벽하게 같은 표현 - 옵셔널 변수(상수)가 아니면 nil을 할당할 수 없음 : 해당 변수(상수)에는 값이 없을 수 있다 -> nil일 가능성이 있으므로 사용에 주의하라 : nil에 강제 접근하면 런타임 오류 발생- 타입명 뒤에 물음표(?)를 붙임으로서 해당 변수(상수)가 옵셔널 변수(상수)임을 알림 : Optional이라고 쓸 수도 있음 - 옵셔널은 열거형으로 구현되어 있음 1234public enum Optinal : ExpressibleByNilLiteral{ case none case ..
[시작] - Swift에서 함수는 일급 객체이므로 하나의 값으로도 사용 가능함 - 개인이나 협업자끼리 코딩 규칙을 만들고 함수를 사용하는 것이 권장됨 [함수와 메서드] - 메서드 : 구조체, 클래스, 열거형 등 특정 타입에 연관되어 사용하는 함수 - 함수 : 모듈 전체에서 전역적으로 사용할 수 있는 함수- 오버라이드와 오버로딩을 지원함12345func 함수 이름(매개변수...) -> 반환 타입{ 실행 구문 return 반환값} cs - 함수 정의 시 매개변수 이름을 붙여야 함 - 전달인자 레이블을 붙일 수 있음. _로 지정하면 함수 호출 시 전달인자 레이블을 명시하지 않아도 됨 : 이 경우에 매개변수 이름은 함수 내에서, 전달인자 레이블은 함수 호출 시 매개변수 지정에 사용됨- 전달인자 레이블만 다르게 ..
[조건문 - if문] - if문의 조건은 무조건 Bool 타입이어야 함 [조건문 - switch문] - break 키워드를 사용해도 사용하지 않아도 됨 - fallthrough 키워드를 사용하면 case를 연속 실행할 수 있음- 조건에 다양한 값이 들어갈 수 있음- 조건에 열거형과 같이 명확히 한정적인 값이 들어가지 않으면 default를 반드시 작성해야 함- 각 case에 범위 연산자를 사용할 수 있음- 각 case에 여러 경우를 적을 수 있음. 쉼표로 구분- 각 경우 다음에는 반드시 실행 가능한 코드가 위치해야 함- where절을 사용하여 조건을 확장할 수 있음 1234567891011let tuple: (String, Int) = ("Hi", 13)switch(("Hi", 12)){case ("Hi..
[시작] - A === B : A와 B가 참조 타입일 때 같은 인스턴스를 가리키는지 비교 - A ~= B : A와 B의 패턴 매치- A ... B : A 이상 B 이하의 범위- A ..< B : A 이상 B 미만의 범위- A... : A 이상의 범위- ...A : A 이하의 범위- ..< A : A 미만의 범위- &+ : 오버플로우에 대비한 덧셈 연산- &- : 오버플로우에 대비한 뺄셈 연산- &* : 오버플로우에 대비한 곱셈 연산 - A ?? B : A가 nil이 아니면 A, nil이면 B를 반환 (A != nil ? A! : B)- A! : Optional 강제 추출- A? : A(Optional 변수)의 값을 안전하게 추출하거나 A(데이터 타입)가 Optional임을 표현 123let number:..
[데이터 타입 안심] - Swift는 타입에 매우 엄격하고 민감하여 서로 다른 타입끼리의 데이터 교환 시 반드시 타입 캐스팅을 거쳐야 함 - 엄밀히 말하여 새로운 인스턴스를 생성하여 할당하는 것- Swift는 서로 다른 타입의 값을 할당하면 컴파일 오류를 내므로 실수를 줄일 수 있음 [타입 별칭] - typealias 키워드 사용 123typealias int = Intlet number: int = 42let number2: Int = 42cs [튜플 Tuple] - 지정된 데이터의 묶음 123456789101112131415let person: (String, Int, Double) = ("noname", 742, 142.3)person.0 //"noname"person.1 //742person.2 ..
[시작] - Swift의 기본 데이터 타입은 구조체를 타입의 기반으로 삼아 Swift의 다양한 기능(익스텐션, 제네릭 등)을 두루 사용하여 구현되어 있음 [Int와 Uint] - 정수 타입- UInt : unsigned int- max, min 프로퍼티로 타입의 최솟값과 최대값을 알아볼 수 있음- Int와 UInt를 다른 타입으로 인식하므로 굳이 섞어서 사용할 필요가 없음 (타입 변환 시 많은 자원을 소모할 가능성)1234567var integer: Int = 100let integer2: Int = Int.max + 1 //오버플로우var unsignedInt: UInt = 3let unsignedInt: UInt = -2 //비부호형 정수에 음수를 할당할 수 없음integer = unsignedInt..
[기본 명명 규칙] - 함수, 메서드, 인스턴스 이름은 Lower Camel Case를 사용 - 클래스 ,구조체, 익스텐션, 프로토콜 이름은 Upper Camel Case를 사용- 대소문자를 구별 [콘솔 로그] - print()를 사용하여 출력하려는 인스턴스의 description 프로퍼티에 해당하는 내용을 확인 가능 - dump()를 사용하여 인스턴스의 자세한 내부 콘텐츠를 확인 가능 [문자열 보간법] - 변수 또는 상수 등의 값을 문자열 내에 나타내고 싶을 때 사용 123let count: Double = 3.14print("PI = \(count)") cs 실행 결과 PI = 3.14 [변수와 상수] - 변수 생성 시 var 키워드를 사용 1234567var string: String = "Hell..
[Safe, Fast, Expressive] - Safe : 엄격한 문법을 적용, 프로그래머의 실수를 사전에 방지함. Optional, guard문, 오류처리, 강력한 타입 통제 등 - Fast : 실행 속도의 최적화, 빠른 컴파일 성능 - Expressive : 사용하기 편하고 보기 좋은 문법 구현 [객체 지향 프로그래밍 패러다임] - 강한 응집력, 약한 결합력 : 클래스 하나에 문제 해결을 위한 데이터와 메서드를 모아 응집력을 강화 : 각 클래스는 독립적으로 작용하게 하여 결합력을 약화 : 자료 추상화, 상속, 다형성, 동적 바인딩 [함수형 프로그래밍 패러다임] - 상태 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 함- 전달된 인자 값만 결과에 영향을 주므로 일정하게 같은 결과를 도출함-..