❗️ "절차지향은 데이터 중심, 객체지향은 기능 중심"
=> 🟧Swift 언어는 객체지향형, 함수형, 프로토콜 지향 프로그래밍을 모두 다룰 수 있는 언어이다.
단, iOS 프레임워크가 객체지향형 프로그래밍으로 구현되어 있어서, 객체지향 프로그래밍을 하도록 권장한다.
optional
❗️
optional
은 선택적인 것!
값이 있을 수도 없을 수도있는 경우를 위해서 필요함!
swift는 기본적으로 변수를 선언할 때 non-optional
즉, 어떠한 '값'을 변수에 주어야 함! nil값은X
예를들면 String
값에는 무조건 문자열 타입이 들어가 있어야 함!
var name : String = "예리"
name = nil //에러!
-> 그런 이유에서 위 코드는 오류가 발생한다.
string
에 nil
문자열 타입의 값이 없으면 안되기 때문
그럼 값이 있을 수도 있고 없을 수도 있는 변수를 정의할 때는?
타입에 ?
을 붙여준다!
이렇게 정의한 변수를 optional
이라고 하고, 기본값은 nil
값이 된다.
var name : String?
name = nil //오류가 생기지 않는다!
name = "예리"
print(name) //Optional(예리)
?
을 붙여 optional
값이 되면 코드가 실행되기 전에는 값이 있는지 없는지 알 수 없다.
따라서 아래와 같은 오류에 조심하자!
String
string?
-> 둘은 달라
let name : String? = "예리"
let nickName : String = name //에러!
optional
벗기기⚠️❗️ "Optional Binding"과 "!"을 사용하자!
!
사용하기!
를 붙인다. var num: Int? = 1
if num != nil {
print("num is \(num!)") // num is 1
}
-> 확실하게 값을 추출할 수 있는 방법이지만 옵셔널 값이 없다면 오류가 발생한다.
-> 더 안전하게 optional
벗기기 위해서는 Optional Binding을 사용하는 것이 좋다!
if
문과 함께 사용된다.if let name = optionalName {
print(name) // optionalName의 값이 존재하면 해당 값이 출력된다.
}
//
// optionalName의 값이 존재하지 않는다면,
//if문을 그냥 지나쳐서 이곳의 코드가 실행된다.
❗️ UI Kit은 프레임 워크다!
UIKit은 iOS와 애플 티비에 들어가는 앱을 빌드할 때 필요한 핵심 오브젝트(core object)를 지원한다.
Xcode는 UI기반으로 앱을 빌드하는데, UI요소가 오브젝트로써 기능하며 Library 버튼에서 오브젝트를 생성할 수 있다.
❗️UIKit이 사용된 어플리케이션은 "애플리케이션 아이콘"과 "Launch screen storyboard"(스플래쉬 스크린 in Adroid)을 필수적으로 가져야한다.
-> UIImageView가 사용된 예시
-> UINavigation Bar가 사용된 예시
-> UINavigation Bar가 사용된 예시
❗️
let
과var
을 사용하자!
/*번수와 상수 선언 강의내용*/
//1.1 상수
let name: String = "uni"
let swift = "swift" //타입 추론으로 타입 정의X
//1.2 변수
var year : Int = 2022
var y = 2022 //타입 추론으로 타입 정의X
year = 2023
//print(year) //var은 변수라 값 변경가능
-> swift문법에서 변수와 상수는 다음과 같은 문법으로 선언한다.
let
과 var
의 차이점은 뭘까?⚠️❗️"중복선언"의 차이가 있다!
var
은 중복선언이 가능하다.
// 첫번째 변수 선언+초기화
var A = 1;
console.log(A); // 1
// 두번째 변수 선언+초기화
var A = 2;
console.log(A); // 2
// 세번째 변수 선언(초기화X)
var A;
console.log(A); // 2
let
은 중복선언이 불가능하다.
let a = 10;
let a = 20;
// SyntaxError: Identifier 'a' has already been declared
-> 이미 선언한 변수를 다시 선언하면 오류가 난다.
var
의 변수 선언 방식에는 단점이 있다. 유연한 변수 선언으로 간단한 케이스에서는 편리하겠지만, 코드량이 많아지거나 협업을 해야하는 상황에서는 값이 바뀌거나 파악하기 힘들 수 있기 때문이다.
func
/*2. 함수만들기 강의내용*/
func sum(a: Int, b: Int) -> Int{
return a+b
}
//print(sum(a: 1, b: 2))
func multiply(a: Int, b: Int) -> Int {
a * b //리턴 생략 가능
}
//print(multiply(a: 1, b: 2))
-> 함수는 func
키워드를 사용해서 정의하고, ->
를 사용해서 함수의 타입을 반환한다.
print(multiply(a: 1, b: 2))
-> swift에서는 독특하게 함수를 호출할 때 파라미터 이름을 함께 써 주어한다.
class
, srtucter
//강의내용
/* 3. 이름짓는 규칙*/
// 3.1 Lower Canel Case - 인스턴스 / 매소드 / 함수
// - 시작은 소무자 나머지 단어의 시작은 대문자
let viewContriller = UIViewController() //인스턴스를 생성
// 3.2 Upper Canel Case - 구조 / 클래스 / 프로토콜
// - 시작과 나머지 단어도 모두 대문자
struct Person{
let a:Int
let b:Int
} //구조체(스트럭쳐의 축약 struct사용) 'P'erson 시작을 대문자로 시작
class Operator {
let a:Int //내부에 있는 a, b에 할당
let b:Int
init(a: Int, b:Int) { //초기화 함수는 클래스, 인스턴스가 생성될 때 제일 최소에 호출되는 함수
self.a = a
self.b = b //파라미터로 두 개의 값을 받음, 외부에서 호출
}
} //클래스는 오류 (초기화 함수를 자동으로 생성해주지 않는다/구조체는 생성해줌)
protocol Flyable {
func fly()
}
구조체와 클래스는 OPP(객체지향)를 위한 필수 요소로 프로그램의 코드를 추상화하기 위해 사용한다.
swift에서는 다른 프로그래밍 언어와 달리 구조체와 클래스를 위한 별도의 인터페이스와 파일을 만들 필요가 없다.
Swift에서 클래스와 구조체는 많은 공통점이 있다. 클래스와 구조체 둘다 다음과 같은 기능이 가능하다.
클래스만 가능한 기능은 다음과 같다.
구조체를 사용하는 것이 유리한 경우는 다음과 같다. (애플은 다음 조건 중 하나 이상에 해당한다면 구조체를 사용하는 것을 권장한다.)
class
키워드를 구조체는 struct
키워드를 적어 선언할 수 있다.class SomeClass {
// 클래스 내용은 여기에
}
struct SomeStructure {
// 구조체 내용은 여기에
}
init
❗️초기화 (Initialization)
초기화는 클래스, 구조체, 열거형 인스턴스를 사용하기 위해 준비 작업을 하는 단계이다.
이 단계에서 각 저장 프로퍼티의 초기 값을 설정한다. 초기화 과정은 initializer를 정의 하는 것으로 구현할 수 있다.
init
키워드를 사용하는 것이다.init() {
// perform some initialization here
}
Break Point
❗️일시정지 포인트!
-> 브레이크 포인트는 대체로 디버깅을 하는데 사용합니다. 원하는 결과가 나오지 않았을 때 일시정지하여 버그의 위치를 파악하고 수정할 수 있다.
출처 : 링크텍스트, 컴공선배