전체 글33 클로저의 메모리 구조 + 캡처현상 / 캡처리스트 일단 클로저의 메모리 구조를 정리하기 전에 클로저가 무엇인지? 간단하게 정리해보자. 클로저는 이름이 없는 함수이다. 그럼 클로저는 왜 함수 이름이 필요 없을까? 클로저는 주로 콜백 함수 형태로 사용하기 때문에 이름이 필요 없다. * 여기서 콜백 함수는? 🧐 다른 함수의 인자로 사용되는 함수 어떤 이벤트 후 호출되는 함수 그럼 이러한 클로저는 왜 사용될까? 콜백 함수로 클로저의형태가 간단하기도 하고 사후적 정의가 가능하기 때문! 클로저가 무엇인지 대충 정리했으니, 이제 클로저의 메모리 구조에 대해 정리해보자! 클로저는 참조 형식이기 때문에 클래스처럼 값을 힙 메모리에 저장을 한다. (클로저의 실제 명령어는 당연히 코드 영역에, 코드 영역을 가리키는 주소는 힙!! 에 저장, 클로저도 함수일 뿐이기 때문에 실.. 2021. 12. 22. 클래스&구조체 메모리 관점에서의 차이 이번 포스팅에서는 클래스와 구조체의 가장 큰 차이 2가지 1. 메모리 저장 방식 2. 상속 가능 여부 중 메모리 저장 방식 차이에 대해 정리할 것이다! (아래 코드들은 playground에서 실행했기 때문에, main 함수 안이라고 가정한 뒤 공부한 것입니다. 즉, 전역 변수가 아닌 main 함수의 스택 영역이라고 생각하며 코드를 작성한 것입니다.) 클래스 예시 1. class Dog { var name = "강아지" var weight = 0 func sit() { print("\(self.name)가 앉았습니다.") } func layDown() { print("누웠습니다.") } } // 객체 생성 var bori = Dog() var choco = Dog() // 객체의 속성에 접근 choco.n.. 2021. 12. 17. [RxSwift] Operator 연습 4탄 : Time Based Operator 이번 포스팅에서는 시간의 흐름에 따라 데이터를 제어, 변동, 조작하는 오퍼레이터인 Time Based Operator를 정리할 것이다. TimeBasedOperator는 buffer 연산자 계열이고 buffer 연산자 계열은 과거의 요소들을 subscriber에게 다시 재생하거나 잠시 버퍼를 두고 줄 수 있다. 1. replay 지나간 이벤트 방출에 대해 버퍼 사이즈 수만큼 새로운 subscriber에게 replay 해주는 연산자. let intro = PublishSubject() let parrot = intro.replay(1) // buffer size=1 parrot.connect() intro.onNext("1.hello") intro.onNext("2.hi") parrot .subscribe.. 2021. 12. 14. [RxSwift] Operator 연습 3탄 : Combining Operator 이전의 Operator들에서는 Observable 시퀀스를 어떻게 필터링(Filtering Operator)하고 변형하는지(Transforming Operator)를 정리했다면 ! 이번에는 Combining Operator를 이용하여 Observable 시퀀스들을 모으고 시퀀스 내의 데이터들을 병합하는 방법에 대해 정리할 것이다 🤔 1. startWith Observable에서 작업할 때 초기값을 받는지 여부가 중요하다. 현재 위치, 네트워크 상태 등의 초기값이 필요한 경우에 쓰임! import RxSwift let disposeBag = DisposeBag() let yellowClass = Observable.of("student1","student2","student3") yellowClass .e.. 2021. 12. 13. 이전 1 2 3 4 5 6 7 ··· 9 다음