first class object - 2, Class

2023. 10. 17. 12:35iOS

1. closure

1.1. closure의 정의

- 특정 작업(함수)과 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구

- 익명 함수

- Javascript, Swift, Python 등이 지원

1.2. closure의 활용

- closure의 표현식

{(매개변수명:매개변수 타입, ...) -> 반환 타입 in}

- closure 호출 시 argument label을 생략해야 한다.

- 일반 함수와 closure를 비교한 소스 예시

1.3. trailing closure

- closure가 함수의 마지막 argument일 경우 마지막 매개변수의 이름 대신 함수 소괄호 외부에 closure를 작성할 수 있는데,

이를 후행 클로저(trailing closure)라 한다.

- trailing closure 사용 여부에 따른 함수 변화 예시

1.4. Closure의 축약 표현

- Closure로 활용할 함수 math와 Closure 기본형

- trailing closure 사용 및 리턴형 생략

- 단축 인자를 사용하여 매개변수 생략

- closure는 마지막을 자동 리턴하므로 return문 생략

- 최종 축약 소스

 

2. class

2.1. 객체의 개념

2.2. 객체 지향 용어 비교

2.3. 클래스 선언

- 기본 구조

class 클래스명 : 부모 클래스 {

  //property(변수 및 상수 정의)

  //instance method(객체가 호출할 메서드 정의)

  //type method(클래스가 호출할 메서드 정의)

}

- stored property: 초기값을 주거나 init을 이용하여 초기화 또는 옵셔널 래핑이 필요

- stored property를 가진 클래스 선언 예시

- instance method를 가진 Man 클래스 선언 예시

- class method: 클래스 내에서 사용하는 메서드로, class 혹은 static를 명시하여 구분한다.

- class를 사용하여 class method 선언 시,  자식 클래스에서 override가 가능하다.

- class method를 가진 Human 클래스 선언 예시

2.4. instance 생성

- 클래스 정의 시 default initializer가 자동으로 제공된다.

- 클래스를 통해 인스턴스 생성 시 반드시 initializer를 통해 초기화를 해야 하며,

생성자가 없을 경우 default initializer를 통해 초기화한다.

- 인스턴스 생성 후 instance method를 접근할 수 있다.

- Man 클래스로 kim 인스턴스 생성 예시

- class method는 클래스명을 사용하여 접근할 수 있다.

2.5. initializer

- 인스턴스가 생성될 때 수행하는 초기화 작업

- designated initializer: 모든 property를 초기화시키는 생성자

- init() 메서드를 정의할 경우 default initializer는 소멸

- 생성자를 선언한 클래스 예시

 - self: 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.를 붙여 표시한다.

- self를 사용하여 위의 생성자를 변경한 소스

2.6. method overloading

- method overloading: 매개변수의 개수와 자료형이 다른 이름이 같은 함수를 여러 개 정의하는 것을 말한다.

- 매개변수가 다른 생성자를 정의하여 인스턴스를 다양한 방법으로 생성할 수 있다.

- method overloading을 이용한 생성자 정의 예시

 

3. 참고자료: iOS프로그래밍 기초 강의 - 한성현 교수님

'iOS' 카테고리의 다른 글

Xcode - 2  (0) 2023.11.07
Mac 입문, Xcode 입문  (0) 2023.10.31
Swift 함수, first class object - 1  (0) 2023.10.10
Swift 문법 - 2  (0) 2023.09.26
Swift 문법 - 1  (0) 2023.09.19