본문 바로가기

전체 글

to name of few, to say the least, least of all (just) to name of few 뿐만 아니라, 예를 들어 (뭔가 더 있는 걸 의미) décor: 장식품 drafty: 바람이 부는 appliances: 가전제품 What are the problems with house? Well, to name a few, the décor is ugly, it feels very drafty, and several of the appliances don't work. to say the least ??? Towards the end: 끝을 향해 blame: 이상하다(타동사) exaggerate: 과장하다 turned up: 상태가 변하다. idiom: 관용구 Not to exaggerate, as in When the ring turned up in the l.. 더보기
Swift < - > Objective C 프로젝트를 Swift 기반으로 제작했을 때를 기준으로 작성했다. Swift에서 objc를 사용할 경우 새롭게 objc 파일을 만들게 되면 저절로 Xcode가 Bridging 파일을 생성해준다. Bridging Header를 생성하게 되면 objc 파일 중 Swift에서 사용할 친구들을 명시해주면 된다. objc에서 Swift를 사용할 경우 사용할 .objc 파일에서 "프로젝트명-Swift.h"를 임포트 해준다. 사용할 swift 객체는 NSObject를 상속받아야 하며, 프로퍼티 혹은 메소드 앞에 @objc를 붙여줘야 한다. 일일이 붙이기 어려울 경우 @objcMembers를 사용하면 된다. 더보기
마아저씨 마아저씨를 처음 만났을 때 착한 동네 형 이미지였다. 그 당시에는 고민이 정말 없었고, 정신없이 옆집 아저씨랑 마아저씨 놀리면서 이런저런 얘기를 했다. 약속이 존재해서 그만 일어서려고 할 때 마아저씨가 진지한 얘기를 꺼내셨다. 취업에 관한 얘기였고, 잘 기억이 안 난다. 정말로 그 당시에는 취업에 대한 걱정이 없었고, 마아저씨 손가락에 껴있는 반지의 무게를 잠깐 느끼고 약속을 위해 자리에서 일어났다. 그 후 시간은 두세 달 정도 흘렀고, 같이 공부하던 동료들의 취업 소식을 듣고 불안해지기 시작했다. 머리가 아는 거와 마음이 받아드리는 거에 큰 차이가 있었고, 시간이 지날수록, 열심히 작성했다고 생각한 이력서가 탈락 메일을 받을수록 무너져 내렸다. 옆 동네 아저씨와 많은 얘기를 하면서도 채워지지 않는 무언.. 더보기
App Lifecycle 오늘 다룰 내용은 현재 공식문서에서 숨겨진 내용을 포함한다. RunLoop는 무엇일까라는 고민에서부터 출발했고, 여러 블로그 글을 정리해서 작성했다. storyboard를 사용할 때도 시작점을 설정하고, view를 코드로 작성할 때도 시작점을 설정해야 한다. App Lifecycle을 공부하면서 한 번도 main함수에 대해서 생각을 해본 적이 없다. 이 글은 application(_:willFinishLaunchingWithOptions:)을 부르기 전부터 시작한다. start 함수는 화면에서 앱을 실행시킬 때 호출되며 내부적으로 main 함수가 호출된다. Swift만 사용했다면 main 함수를 한 번도 본적이 없을 것이다. objc를 사용했다면 main.m 파일이 있지만, Swift는 아래 코드를 보면.. 더보기
@autoreleasepool applifecycle을 공부하던 중 @autoreleasepool를 발견하고 의문점이 생겼다. autorelease pool는 objc와 연관이 있어서 다른 블로그를 참고하면서 작성했다. int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(...); } } autorelease pool은 객체의 소유권을 포기할 수 있는 메커니즘을 제공하지만 즉시 해제 될 가능성을 방지한다. objc는 Swift와 달리 MRC(Manual Referencing Counting)을 (사용한다) 사용할수 있다. ARC가 나오면서 objc도 MRC가 아닌 ARC를 기본적으로 사용한다. 설정을 변경하면서 프로그래머가 선택할 수 있다. re.. 더보기
POP 프로젝트에 적용하기 OOP에서 POP를 적용하면서 느꼈던 새로운 관점을 나누고 싶어서 정리했습니다. 처음 작성해본 POP이기 때문에 "이렇게 작성해야 POP야"가 아닌 "이런 방식으로도 생각했구나"라고 봐주셨으면 좋겠습니다. 코드 스쿼드를 졸업하고, 완성하지 못한 부분이 자꾸 아쉬움이 남아서 IssueTracker를 구현하고 있었습니다. 콤바인을 원하는대로 구현할 수 있다는 자신감, 재사용성을 충분히 생각했다는 자만감에 빠져있어서 코드의 품질은 좋다고 생각했었습니다. 하지만 부엉이 말 한마디에 부족한 부분이 보였고, Protocol에 대해서 공부하다 보니 새로운 접근을 할 수 있을 거 같아서 시작하게 되었습니다. 아래 그림을 보면 Label 화면과 MileStone 화면의 구성은 완벽하게 일치하고, UITableView C.. 더보기
TableView에 animation 추가하기 tableView에 모델을 바인딩하면서 발생한 문제점을 발견했다. 모델이 변경되었을 때 테이블뷰에 대한 애니메이션 처리를 핸들링할 수 없었고 tableView 전체를 리로드 했다. 검색을 통해서 performbatchupdates()로 구현할 수 있다는 걸 알았지만, 혹시나 하는 마음에 WWDC에 tableView를 검색했다. 2019년 영상에서 tableView, collectionView의 애니메이션을 쉽게 구현할 수 있는 새로운 친구를 확인했다. 오늘 소개할 친구는 UITableVIewDiffableDataSource다. 기존에 사용했던 DataSource는 Controller에서 데이터를 변경하고 UI에게 변경했다는 걸 알렸다. 잘못 업데이트할 경우에 에러가 발생한다. 특히 IndexPath를 잘.. 더보기
POP Swift 2.0으로 업데이트 되면서 Swift는 Protocol Oriented Programming라고 발표했다. 많은 Protocol이 생겼고, 구조체와 클래스에서 프로토콜을 채택하고, 클래스 상속에서 받지 못했던 이점을 챙겼다. 왜 OOP에서 POP로 변경된 건가? OOP는 클래스를 기반으로 상속을 통한 유연함을 유지했다. 하지만 상속은 생각보다 유연하지 못했다. 추상화된 클래스를 구체화했을 때 공통적인 책임을 갖는 여러 클래스가 존재할 수 있고 중복된 코드가 생성된다. 참조 타입을 사용하면서 발생하는 문제들(멀티 스레드 환경에서의 다중 접근, 동적 할당과 참조 카운팅으로 인한 자원 소모)이 있다. 위와 같은 문제점을 해결하고자 Swift 2.0에서는 Protocol + Extension + Ge.. 더보기