Swift TIL(43)

웰디(Well-D)·2023년 10월 7일
0

Sweet & Soft, SWIFT

목록 보기
41/76

패턴잡기가 어려워져서 순 공부시간을 늘리기가 어렵다 ㅠㅠ (아쉬운 부분)

  • 코드 먼저 보고 > 강의듣기 + 정리
  • 코드 직접 기입대신 줄번호 + 키워드 정리
    로 새로 try해보는 중

오늘은 클로저 나머지 부분의 코드를 읽는 것으로 마무리 하기로 했다
약간의 공태기가 올것같아서 + 완벽주의자 성향으로 공태기를 피하기 위해 실질적인 공부의 필요성을 느끼고 있어서, 실천 하기위해 전환함

복습

  • 클로저 문법 최적화 부분의 예시
  • 클로저의 메모리 구조
    파일 읽고 이해 > 강의 > 정리 + 이해

클로저를 제대로 이해하면서 들으려니 조금 더 오래걸렸다 (읽고 들으니 부담은 주는 데 시간은 좀 더 걸림)

그래도 캡쳐현상이 왜 생기는지, 왜 생길수밖에 없는지, 어느경우에 생기는지, 정확히 캡쳐현상이 생길때 함수실행은 어떤식으로 되는건지 이해할 수 있어서 좋았다.

열린루프로 일부러 남겨두었던 어제 진도..어쨌든 마무리하였음

  • 클로저 사용예시(후행 클로저문법 예시): URLSession함수, Timer.scheduledTimer메서드, UIViewController.dismiss메서드

  • 클로저는 특히 후행클로저로 사용시 형태를 함수라고 알아볼 수 있어야한다(클로저라고 알아볼것)

  • 클로저는 결국 코드 묶음이다

  • 멀티플 트레일링 클로저 swift 5.3부터 적용, 아규먼트로 구분지어서 전체요소를 트레일링 문법가능(후행클로저 문법가능)

  • 후행클로저 문법이 최종적으로 4단계중 4단계에만 해당된다고 규정짓지 말자 / 정확히는 소괄호 생략가능함을 의미함

  • 멀티플 트레일링 클로저인 경우에 만약 원함수에서 클로저 정의시 아규먼트레이블에 와일드카드패턴을 사용했다면, 원함수실행시 클로저에 와일드카드패턴으로 아규먼트를 구분해주면된다(후행클로저 문법적용되있을경우)

	_: {코드내용}
  • 클로저의 메모리구조 : 클로저는 reference Type이다. 힙에 저장되고, 힙을 가르키는 주소가 스택에 저장

  • 캡쳐현상 : 변수에 중첩함수의 내부함수를 저장할때(중첩함수의 내부함수가 중첩함수의 외부함수의 변수를 지속적으로 사용할때) / 클로저사용시 발생

  • 캡쳐현상이란 외부의 값을 캡쳐해서 heap안의 내 메모리안에 넣어두고 계속 사용하는 것(힙영역의 특성상 오래보관됨)

  • 중첩함수 외부함수에서 리턴값으로 내부함수를 리턴하고, 함수를 리턴하는 중첩함수를 변수에 저장하고, 중첩함수의 변수를 내부함수에서 지속사용하면 캡쳐를 할수밖에 없다(외부함수는 이미 스택프레임에서 사라졌는데, 내부함수는 사라진 스택프레임의 변수를 사용해야하는 꼴이라서, 이미 만들어져있는 heap영역에 (변수에 함수를 저장할때 생긴 저장공간, 스택에는 힙영역 주소가 저장됨) 저장공간 내부에 변수를 캡쳐해서 넣는다(외부함수가 사라질때 캡쳐해서 값을 가져옴, 이후에는 지속업데이트 된다. 누적되는 이유)

  • 모든 스택프레임(함수로인한) 이 사라진 후에도 나는 변수에 저장된 함수를 사용할수있어야하므로(함수의 코드 메모리주소가 필요함) 이를 힙영역에 저장한다, 이후에 캡쳐가 일어나면 캡쳐로 인한 변수도 힙영역에 함께 저장됨

  • 만약 해당 변수를 또 다른 변수에 할당한다면 어떻게 될지 생각해보자! (같은 힙을 가르키게 되겠지? 즉 그 안의 변수를 사용하니, 또 값이 누적되는 현상이 일어나게 된다 )

profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히

0개의 댓글