본문 바로가기
iOS 앱 개발자 윤기사🍎

[SeSAC iOS 앱개발자 데뷔과정 2기] 레벨테스트 합격!! _ 2

by 개발하는윤기사 2022. 6. 13.
728x90
반응형

안녕하세요 이웃님들~ 저번 게시글에 이어서 문법 정리 이어서 해보도록 하겠습니다~~

 

꼭! SeSAC이 되기위해 개발하는 윤기사는 더 열심히 코딩 공부 하도록 하겠습니다!

 

 

이번 게시글에서는 클로저와 메소드, 그리고 상속에 대해 알아보겠습니다!

 

 

- 클로저 (Closure) -

 

 

클로저는 어떤 상수나 변수의 참조를 캡쳐(capture)해 저장할 수 있습니다.

 

스위프트는 이 캡쳐와 관련한 모든 메모리를 알아서 처리합니다!

 

클로저는 특정 문맥의 상수나 변수의 값을 캡쳐할 수 있습니다. 원본 값이 사라져도 클로져의 바디 안에서 그 값을 활용할 수 있는 거죠!

 

클로저의 형태는 3가지로 나누어볼 수 있습니다!

 

  • 전역 함수 (Global Function) : 이름이 있고 어떤 값도 캡쳐하지 않는 클로저
  • 중첩 함수 (Nested Function) : 이름이 있고 관련한 함수로 부터 값을 캡쳐 할 수 있는 클로저
  • 클로저 표현 : 경량화 된 문법으로 쓰여지고 관련된 문맥(context)으로부터 값을 캡쳐할 수 있는 이름이 없는 클로저

 

sorted(by:)는 배열의 콘텐츠와 같은 타입을 갖고 두개의 인자를 갖는 클로저를 인자로 사용합니다.
names의 콘텐츠는 문자열 타입이므로 (String, String) -> Bool 의 타입의 클로저를 사용해야 합니다!
"랜덤배열" 클로저를 만들고 그것을 names.sorted(by: 랜덤배열)에 넣으면 원본 배열의 순서가 바뀐 배열을 얻을 수 있습니다.

클로저 표현 문법의 기본 형태

 

name.sorted(by:)를 이용한 예시

 

 

다른 방식으로도 표현 가능합니다.

 

 

return을 생략할 수도 있다.

 

클로저는 참조 타입입니다!!

함수나 클로저를 상수나 변수에 할당할 때 실제로는 상수와 변수에 해당 함수나 클로저의 참조(reference)가 할당 됩니다.

그래서 만약 한 클로저를 두 상수나 변수에 할당하면 그 두 상수나 변수는 같은 클로저를 참조하고 있습니다.

 

 

- 메소드 (Methods) -

 

특정 타입의 Class, Struct, Enum과 관련된 함수를 뜻합니다.

 

특정 타입의 인스턴스에서 실행할 수 있는 메소드를 인스턴스 메소드(Instance Methods)

 

특정 형과 관련된 메소드를 타입 메소드(Type Methods)라 합니다.

 

첫 번째로, 인스턴스 메소드는 이름 그대로 그 인스턴스가 속한 특정 타입의 인스턴스에서만 실행 가능합니다.

 

Counter 클래스를 선언 후 인스턴스 메소드로 각각 증가() , 증가(by 추가: Int) , 초기화() 를 정의

 

 

count += 1 과 self.count += 1 은 같은 의미를 갖는다.

 

모든 프로퍼티는 암시적으로 인스턴스 자체를 의미하는 self라는 프로퍼티를 갖습니다!
 
인스턴스 메소드 안에서 self프로퍼티를 이용해 인스턴스 자체를 참조하는데 사용할 수 있습니다! 

 

만약 인자 이름과 프로퍼티 이름이 같으면 프로퍼티에 접근하기 위해 명시적으로 self. 키워드를 사용해야 합니다.

 

두 번째로, 타입 메소드는 특정 타입 자체에서 호출해 사용하는 메소드입니다.

 

타입 메소드의 선언은 메소드 키워드 func앞에 static이나 class키워드를 추가하면 됩니다!

 

static메소드와 class메소드의 차이점은

  1) static메소드는 서브클래스에서 오버라이드 할 수 없는 타입 메소드(Override(X))

  2) class메소드는 서브클래스에서 오버라이드 할 수 있는 타입 메소드(Override(O))

 

인스턴스 메소드, 타입 메소드 차이점

 

- 메소드 (Methods) -

 

클래스는 메소드, 프로퍼티와 다른 특징(characteristics)을 다른 클래스로 부터 상속할 수 있습니다.

클래스에서는 저장된 프로퍼티/계산된 프로퍼티와 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응이 가능합니다!

스위프트에서 상속의 특징입니다!

  1. 구조체는 불가능하고, 클래스에는 가능하다.
  2. 자식 클래스가 부모클래스로부터 기능을 물려받는것
  3. 상속 받은 클래스도 새로운 자식 클래스에게 상속 가능
  4. 단일 상속만 가능

 

 

서브클래싱의 예제, 서브클래싱을 하면 부모로 부터 성격을 상속받고, 자신 고유 특성도 추가 가능!

 

 

서브클래스에서는 상속받은 저장된 프로퍼티, 계산된 프로퍼티 모두 오버라이드가 가능합니다.

오버라이드시에는 프로퍼티의 이름과 타입을 명시해야합니다.

서브클래스에서는 단순히 상속받은 특정 형의 프로퍼티가 있다는 정도만 알고 있기 때문입니다.

 

* 상속받은 읽기전용 프로퍼티 getter/setter를 정의해서 읽고/쓰기가 가능한 프로퍼티로 변경해서 제공 가능합니다.

* 하지만 반대의 읽고/쓰기가 가능한 프로퍼티 읽기전용 프로퍼티로 선언하는 것은 불가능합니다.

 

상속받은 메소드를 오버라이드 하려면 메소드 선언 앞에 override키워드를 붙이면 됩니다.

 

 

프로퍼티 오버라이드 예시

 

게시글 잘 보셨나요?

 

이번 포스팅은 여기서 마치도록 하겠습니다~ SeSAC이 되는 거에서 만족하지 않고, 개발자로 성공하기 까지 개발하는 윤기사는 더 열심히 빡코딩 하도록 하겠습니다~ 

 

감사합니다 ^^

 

728x90
반응형