고차함수, 함수형프로그래밍, 옵셔널타입의 심화학습, 클로저와 메모리관리에 대해 배웠다.
메모리 관리가 재미있다
매서드 디스패치만큼 재밌다 :)
ARC,MRC 등에 대해 배우면서 어떻게 ARC를 활용해야 오류없이 활용할수 있는지,
특히 값타입과 참조타입, 클로저 등에서 메모리 누수를 어떻게 하면 방지할 수 있는지 클로저에서의 캡처리스트 사용, 참조타입의 약한/비소유(weak, unowned) 참조 를 재밌게 배웠다.
이런걸 배울때마다 이렇게 발전하다니 도입한 분들이 정말 똑똑하다 'ㅁ' 문제를 이렇게 해결했구나! 하는 부분들이 있다.
고차함수 부분은 filter reduce map compactMap flatMap forEach 부분이었는데 javascript 와 겹치는 부분이 있어서 비교적 쉽게 들을 수 있었고, js에서는 사용위주로 감각적으로 알던 부분을 좀 더 체계적으로 정리할수있어 좋았다.
Swift 의 특징인 OOP POP 그리고 FP 함수형 프로그래밍/선언형 프로그래밍
함수형과 명령형을 구분해본적이 없었는데 내가 코딩테스트 연습을 할때 원시적으로 구현한다고 생각했던것이 명령형 프로그래밍이었고,
비교적 쉽게 함수들을 활용해서 하던게 함수형 프로그래밍이었구나 다시한번 정리하게되었다.
이렇게 감각으로만 익히던 프로그래밍 방식의 장단점을 알아가면서 개념을 파악하는 건 매우 재미있다. 역사도 알아볼수 있어서 더 재밌다.
옵셔널타입, 클로저는 더 많이 연습해야겠다 싶은 것들이다..당장 이해는 되지만 설명하라고 하면 헷갈리는 부분이 많을것이다.
피곤한 몸을 이끌고 겨우겨우 오늘 할당 복습 완료
처음 듣기시작할때는 지쳐서 힘든데, 듣다보면 또 괜찮아지는 신기한 경험을 하고있다(나이이슈일까..?^^)
함수의 지침표기법(함수를 가르켜서 변수에 할당 후, 해당 변수를 통해 함수를 실행하는 등의 동작을 어떻게 구현하는지) 을 복습했다.
파라미터 사이에 컴마를 쓰지않는다는 점을 주의해야할듯, 특히 와일드카드 패턴과 함께쓰면
doSth (_:_:)
이런 모양새가 되기때문에 자주 쓰거나 공식문서에서 쓰인 것들을 확인하면서 익히는게 좋을 듯 하다. 지금보니 표정같고 귀엽당 (?)
함수타입의 표기는 간단한 내용이라 복습정도 진행했고 함수의 오버로딩과 스코프의 의미를 복습했다.
컴파일링을 하며 함수를 식별하는데에는 함수의 이름, 파라미터의 타입과 갯수, argument label, return타입 등이 있어서 함수의 오버로딩이 가능하다는 것을 좀 더 명확하게 알게되었다.
제어전송문의 break, continue, fallthrough, return ,throw는 단순 암기부분이고(물론 이해가 선행되어야 하지만)
오늘 복습 중 제일 중요한 내용은 함수의 메모리구조 이해가 아닐까 싶다.
함수가 실행될때 , 반복문 ,if문이 실행될때 실제로 cpu는 어떻게 함수라는 일종의 코드(명령어)묶음을 해석하고 메모리를 데이터, 힙, 스택 영역에 할당하는지(아직은 힙영역은 크게 다루지 않는 부분이라 예시에 없긴했지만)
이해하고, 복습하는 시간이었다.
요약하자면 함수가 실행될때 스택에 스텍프레임이 생성되고 함수내부에서 정의한 변수, 상수들은 해당 스텍프레임 내에 존재하게 된다. 또한 스텍프레임에는 복귀해야할 코드의 메모리주소도 존재하게 된다.
함수의 실행이 끝나면 스택에서 해당스텍프레임은 사라진다.
이와다르게 전역변수는 데이터영역에 저장되는 것이 함수의 실행여부와 관계없이 전역변수를 계속 참조하고 할당이 가능한 이유다.
실제로 그리고 글로 손코딩하면서 플로우를 이해하다보니 더 잘 이해되는 측면이 있는 것 같다.
플레이그라운드 공간을 일종의 main함수 영역으로 보는 가정도 신선했다.
오늘도 게더타운 지키미로 마무리