본문 바로가기

iOS82

Swift) final final? 출처 Swift에선 상속을 지원한다!! final 키워드를 클래스에 앞단에 붙이면 해당 클래스는 더 이상 상속하지 않겠다.를 의미한다. 상속하지 않겠단걸 보고, 어.. 클래스만 상속 가능하니깐 클래스만 final을 사용할 수 있겠네? 하면.. 오산이다. 재정의가 더 이상 필요없다고 생각하거나, 재정의를 금하고싶은 경우에 사용할 수도 있다. 아무래도 상속받아서 하는 것이 재정의다보니 같은 것으로 생각하면 될 것 같다. 그렇다면 final 키워드를 붙여주면 얻는게 무엇일까? 이는 클래스와 관련이 있는데.. 클래스는 Dynamic Dispatch로 동작한다. Dynamic Dispatch는 런타임시 VTable을 통해 메서드를 찾아 실행하기 때문에 "찾는 것"에서 성능상 손해를 발생시킨다. 클래스.. 2022. 2. 20.
Swift) Frame vs Bounds 평소 알아야겠다 생각한 둘의 차이를 간단히 알아보려한다. Frame 공식문서를 보면 알 수 있듯.. it's superview's coordinate system 슈퍼 뷰, 즉 자신의 한단계위 부모뷰에 의해 위치가 결정된다. 부모의 origin으로 부터 25,25 떨어진 곳에서부터 뷰가 그려지기 시작하는 것이다. Bounds 얘는 좀 다르다. it's own coordinate system 자기 자신의 좌표에 의해 위치가 결정된다. 그래서 어느 위치에 있던 자신의 좌표이기 때문에 (0,0)을 유지한다. Frame은 뷰를 감싸는 사각형 모양을 나타내기떄문에 뷰가 회전한다면, Frame은 변하게된다. 하지만 자기 자신을 표하는 Bounds의 경우 값이 변하지 않는다. 2022. 2. 20.
Swift) non-Escaping Closure vs Escaping Closure non-Escaping Closure vs Escaping Closure Swift에서 함수와 클로저는 일급 객체이다. 일급 객체라 함은 함수에 파라미터로 전달하고, 함수의 반환값이 될 수 있으며, 변수, 상수에 저장을 할수 있는 것을 의미한다. non-Escaping Closure의 경우 클로저가 함수 본문을 탈출하지 않는다. 함수가 종료되기 전에 클로저가 실행된다는 것이다. 방금 위에서 말한 두 줄이 non-Escaping Closure와 Escaping Closure의 가장 큰 차이점이라는 것을 알아야 한다 그림으로도 대강 설명이 되있지만 흐름을 단계별로 써보자면.. 함수 호출 클로저가 nonEscapeSquare 파라미터(completion)로 들어감 함수 내부에서 completion 실행 com.. 2022. 2. 20.
Swift) Unit Test without networking 네트워크와 실제로 통신하며 테스트.. 실제 서버와 네트워킹하는 과정은 뭐 어떻게 테스트 하는걸까? 예를 들면 서버로부터 아래와 같은 JSON 파일을 받아오고 이를 테스트를 하는 것이겠지.. { "name": "Serval", "latin_name":"Leptailurusserval", "animal_type":"Mammal", "active_time":"Nocturnal", "length_min":"2.3", "length_max":"3.3", "weight_min":"7.5", "weight_max":"41", "lifespan":"13", "habitat":"Savannah", "diet":"Game birds, rodents, small ungulates", "geo_range":"Africa", .. 2022. 2. 20.
Swift) GCD (Grand Central Dispatch) Task Distribution 우린 일을 한다. 아 물론 지금의 난,,, 네,, 이건 간단한 것이니깐 알바를 예로 들어 설명해보겠다. 사장님이 알바생 한명한테만 일을 계속 시킨다. 하지만 알바생은 한번에 하나의 일밖에 하지 못한다.. 바닥 닦으면서 불판을 어떻게 닦아.. 주어진 일을 하나씩 처리해야하는데, 불판 닦고, 손님 응대하고, 바닥 닦고, 세금 처리까지 다 하고 사장님 애를 봐야한다. 그럼 사장님 애는 알바생에게 먼저 맡겨진 일이 모두 처리될 동안 뭐해야됨 상당히 비효율적일 것이다. 그럼.. 일을 분배하면 되겠지? 알바생을 더 써서 일을 나눈다면 이전보다 훨씬 효율적으로 일을 처리할 수 있을 것이다. 자.. 위에서 든 예에서 알바생을 "스레드"로 바꿔서 생각해보자 메인 스레드에만 할당되어있던 일.. 2022. 2. 15.
Swift) Main.sync 외 않됌? sync, async .. concurrent, serial을 공부하다가 main.sync를 돌려보니 프로그램이 죽는 것을 보고.. 왜 그런건지 어제 오늘 하루종일 생각해봤다. 왜 main.sync 하면 안됨? 먼저 생각해본 것은 뭐였냐면.. 메인 스레드는 프로그램이 시작하고, 종료될 때까지 계속 일을 처리하고 있으니, 해당 스레드에 동기적으로 일을 시켜버리면 프로그램이 필수적으로 해야됐던 일을 내가 동기적으로 시킨 일을 처리할 때까지 하질 못하니깐 프로그램이 죽는거 아닐까? 라고 생각했다. 메인 큐는 serial queue이고, 일을 순차적으로 처리한다. 그리고 메인 큐는 일을 처리할 때 단일 스레드인 메인 스레드에 무조건 할당시키게되는데.. 이런 이유때문인가..? 도 했다.. 그래서 내가 도달한 결론.. 2022. 2. 13.