Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

iOS프로그래밍기초 8주차 중간고사 정리 본문

1-2/iOS프로그래밍 기초

iOS프로그래밍기초 8주차 중간고사 정리

김브래 2022. 10. 24. 17:26

iOS 프로그래밍 기초

 

변수의 자료형의 종류와 크기 print(type(of:변수명))

일반적으로 초기값을 주지 않을 때만 자료형을 쓴다.

 

정수 데이터 타입 Int

부동 소수점 데이터 타입 Double

부울 데이터 타입 Bool

문자 데이터 타입 Character

문자열 데이터 타입 String

 

변수: var

상수: let

 

튜플 (Tuple): 여러 값을 하나의 개체에 일시적으로 묶는 방법

 

let myTuple = (10, 12.1, "Hi")

print(type(of:myTuple)) // (Int, Double, String)

 

let myTuple = (count: 10, length: 12.1, message: "Hi")

print(type(of:myTuple)) // (count: Int, length: Double, message: String)

 

튜플의 가장 강력한 점은 함수에서 여러 값들을 한 번에 반환하는 것

 

옵셔널 타입 (매우 중요)

값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환

옵셔널 타입을 선언하기 위해서는 타입 선언부 뒤에 ? 문자를 씀

 

옵셔널 타입 강제 언래핑

옵셔널형 선언: 자료형 뒤 ?

옵셔널 강제 언래핑: 변수명 뒤 !

 

옵셔널 바인딩

강제 언래핑하는 또 다른 방법, 옵셔널에 할당된 값을 임시 변수 또는 상수에 할당

if let 상수 = 옵셔널 변수{

// 옵셔널 변수에 값이 있다면 언래핑 되어 상수에 저장 되고 if문 실행

// 값이 없다면 if문의 조건이 거짓이 되어 if문을 실행하지 않음

}

 

여러 옵셔널을 언래핑 하는 법 = 콤마 사용

- if let 상수1 = 옵셔널 변수1, let 상수2 = 옵셔널 변수2

 

형 변환

상속 관계가 있는 클래스들 끼리만 타입 캐스팅 가능

자식클래스 as 부모클래스 // upcasting 안전한 캐스팅

부모클래스 as! 자식클래스 // downcasting 일반 타입으로 반환

// 다운캐스팅이 반드시 성공할 것이라는 확신이 있을 때

부모클래스 as? 자식클래스 // downcasting 옵셔널 타입으로 반환, 확신이 없을 때

 

타입 검사 is is 키워드를 이용하여 값의 타입 검사 (type check)

인스턴스가 해당 클래스인가?

; 인스턴스 is 클래스

 

Any Anyobject

Anyobject (protocol)

범용 타입, 상속관계가 아니더라도 타입 캐스팅 가능한 타입. 어떤 클래스의 객체도 저장 가능, 클래스만 허용함

Any

클래스, 구조체, 열거형, 함수 타입도 가능

 

범위 연산자

닫힌 범위 연산자: ...

반 열린 범위 연산자:..<

 

Nil-Coalescing Operator (Nil 합병 연산자): ??

- 옵셔널 변수 ?? nil일 때 할당되는 값

 

if if문 다음에 무조건 중괄호를 사용 / I문에서 콤마는 and의 의미

 

guard조건식이 거짓이면 실행 / 조기 출구 전략을 제공

 

if let 상수 = 옵셔널 변수 // 옵셔널 변수가 nil이 아니면

guard let 상수 = 옵셔널 변수 // 옵셔널 변수가 nil 이면

 

소수점 자리 표현

import Foundation / print(String(format: “%.2f”,변수))

 

switch ~ case: case문 마지막에 break가 자동으로 들어가 있음

switch 표현식{

case :

구문

.

.

.

default:

구문

}

 

함수 선언 방법

func 함수명 (매개변수 이름:매개변수 타입,매개변수 이름:매개변수 타입,...) -> 리턴형 타입{

// 함수 코드

}

func add (first x: Int, second y: Int) -> Int{

return(x+y)

} // first, second는 외부 매개변수 x,y는 내부 매개변수

 

함수명: 함수명(외부 매개변수:외부 매개변수:)

함수명 알아보는 법: print(#function)

함수자료형: (매개변수 타입, 매개변수 타입) -> 리턴형 타입

 

가변 매개변수

함수가 가변 매개변수를 받는다는 것을 가리키기 위해 세 개의 점 (...)을 사용

Call by reference 하고 싶은 매개변수의 자료형 앞에 inout을 씀

Call by reference 하고 싶은 변수에 &를 붙여서 호출

 

Swift의 함수는 1급 객체 이다.

1급 객체 또는 1급 시민

다음 조건을 충족하는 객체를 1급 객체 라고 한다.

함수를 변수에 저장할 수 있다.

함수를 매개변수로 전달할 수 있다.

함수가 리턴값으로 사용될 수 있다.

 

클로저

익명함수

클로저 표현식은 독립적인 코드블록

 

클로저 표현식:

let 변수명 = {(매개변수 이름:매개변수 타입,...) -> 반환타입 in

//클로저 표현식 코드

}

후행 클로저 (trailing closure)

클로저가 함수의 마지막 argument라면 마지막 매개변수명을 생략한 후 함수 소괄호 외부에 클로저를 작성

클로저의 축약 표현들

리턴형 자료형 생략

in 과 매개변수를 생략하고 단축인자($N) 사용

return 생략

ex) let add = ~~~ return a+b

result = math (x:10, y:20, cal: add)

result = math (x:10, y:20){$0 + $1}

 

클래스 클래스로부터 만들어진 객체를 인스턴스라고 한다.

객체지향 용어 비교

Swift에서의 멤버변수 = 프로퍼티 / 멤버함수 = 메소드

 

클래스 선언하기

class 클래스 이름 : 부모 클래스{

// 프로퍼티

// 인스턴스 메소드

// 타입 메소드(클래스 메소드)

)

 

프로퍼티

초기값이 있거나

init을 이용해 초기화하거나

옵셔널 변수로 선언하여 nil값으로 초기화 해야한다.

 

인스턴스를 만들고 메서드와 프로퍼티 접근

 

var 인스턴스명 : 클래스명 = 클래스명()

인스턴스.프로퍼티

인스턴스.인스턴스 메소드()

 

init() - 인스턴스 초기화 하기

init()을 하나라도 만들면 눈에 안보이는 default initializer은 없어지고, 이렇게 만든 init()designated initializer 라고 한다 // init()이 있다면 인스턴스를 초기화 하지 않아도 된다.

 

클래스 메소드

타입 메소드는 인스턴스 메소드와 동일한 방법으로 선언하지만 classstatic 키워드를 앞에 붙여서 선언한다. 타입 메소드 또는 클래스 메소드는 클래스 레벨에서 동작

- 호출: 클래스명.클래스 메소드()

 

Self

현재 클래스 내 매서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙임

매개변수와 이름이 같다면 구분하기 위해 반드시 써줘야함

 

프로퍼티

stored property

computed property