과제2 정리-2

김서영·2023년 1월 29일
0

iOS정리

목록 보기
2/3

함수

함수는 코드 블록을 얘기한다.
정의하는 부분을 매개변수(parameter), 호출하는 부분을 인수(argument)라고 한다.
swift의 클래스 내에서의 함수는 method라고 한다.

함수 선언 방법

func exp(Num : Int, Str Cha : String) -> String{
return ("\(Cha) \(Num)")
}

이 함수의 함수명은 exp(Num:Str:)이다.
함수명을 알기 위해서는 함수 내에 print(#function)을 넣으면 된다.
Str은 외부매개변수명이며 함수 밖에서 사용하고, Cha은 내부매개변수명이고 함수 안에서 사용한다. Num은 함수 밖과 안 모두 동일한 이름으로 사용한다.
이때 함수의 타입은 (Int, String) -> String이다.
()은 void를 나타내며, _은 매개변수명을 생략할 때 사용한다.

함수를 매개변수처럼 사용하는 법

swift에서는 함수를 매개변수처럼 사용할 수 있다.
swift의 함수는 1급객체이기 때문에 함수를 변수에 저장할 수 있으며, 함수를 매개변수나 리턴값으로 사용할 수 있다.

클로저

클로저는 c나 C++의 block과 같다.

func exp(Num : Int, Str Cha : String) -> String{
return ("\(Cha) \(Num)")
}

let exp1 = {(Num : Int, Str Cha : String) -> String in 
return ("\(Cha) \(Num)")
}

아랫부분이 클로저 표현식이다.

후행 클로저는 마지막 argument가 함수일 경우, 함수를 생략하고 함수 소괄호 외부에 클로저를 작성하는 방법이다.

클래스

클래스는 메서드가 하는 일이나 속성을 정의한다.

프로퍼티(property)는 클래스내의 저장되는 값을 뜻하며, 일반적으로 저장 프로퍼티를 말한다.
저장 프로퍼티의 초기값을 주기 위해서는 초기값이 있거나, init()으로 초기화하거나 옵셔널 변수 혹은 상수로 선언한다.
프로퍼티는 저장 프로퍼티(stored property)와 계산 프로퍼티(computed property)가 있다.

init으로 초기화할 때 모든 값을 초기화할 때 사용하는 생성자는 designated initializer라고 하며, 일부분만 초기화하는 생성자는 convenience initializer라고 한다. 초기화를 하지 않았을 경우에는 default initializer가 초기화한다.
소멸자는 deinit{}라고 한다.
계산 프로퍼티는 저장 프로퍼티가 저장 혹은 검색되는 시점에서 계산이나 파생된 값을 뜻한다.

var Num : Int = 33
var CPm : Int {
	get{
    	return Num + 1
	}
    set(newValue) // (newValue) 생략 가능
    {
    	Num1 = newValue * 2
    }
} 

계산 프로퍼티 내에는 값을 리턴하는 getter와 값을 대입하는 setter가 있으며, setter가 있으면 getter는 생략할 수 있다.
setter의 매개변수명이 newValue일 경우에는 (newValue)를 생략할 수 있다.

클래스 내의 함수는 클래스 메서드 혹은 인스턴스 메서드라고 한다.

클래스 내에서는 생성자 중첩이 가능하다
init?으로 만들어진 생성자는 옵셔널로 래핑되었기 때문에 실패 가능한 생성자라고도 한다.

상속

클래스만 가능한 기능으로, 클래스의 기능을 다른 클래스에 넘기기 위해 사용한다.
상속한 클래스는 부모 클래스, 상속받은 클래스는 자식클래스라고 하며, 자식 클래스는 상속받은 부모 클래스의 모든 기능을 상속받으며 자신의 기능을 추가할 수 있다.
swift에서는 자식클래스가 하나의 부모클래스만 상속받을 수 있지만, 프로토콜은 여러 개를 받을 수 있다.

class 자식명 : 부모명, 프로토콜1, 프로토콜2 ... {}

부모가 없을 경우에는 생략 가능하다.
부모 메서드를 호출할 때는 앞에 super를 붙여 호출한다.
override가 있으면 부모와 자식에 같은 메서드가 있을 때 자식 메서드를 우선한다.
자식클래스가 default initializer를 하는 경우에는 부모의 init()을 사용할 수 없다.

extention

클래스, 구조체, 열거형, 프로토콜에 새 기능을 추가한다.

extention Int {
	var Num : Int {
    	return self * 2
	}
}

Int에 2배의 값을 반환하는 프로퍼티를 추가한다.

주로 프로토콜을 추가할 때 extention을 사용해 추가한다.


Smile Han의 Swift강좌를 참고해 작성한 글입니다.

0개의 댓글