Stacking Fire
어느 사회적인 기준이든, 그 기준을 잘 지켜낸 사람들에게는 안정감이 주어진다.어쩌면 모든 사람들이 찾아 헤매는 것. 괜찮다는 한 마디를 누구에게든 들을 수 있다. 그리고 나면 나머지는 그저 작은 불만들이다. 자아 실현 같은, 그다지 중요하지 않은 것들 말이다. 부럽다. 근데 난 이미 늦은 거 같다. 그래서 이제 그런 기준을 쫓아 사는 데는 큰 관심이 없다. 그렇다고 해서 꿈만 먹고 사는 일에도 흥미를 못 느낀다. 문제는 욕심까지 없어진 건 아니라는 데 있다. 성공하기 위해 사는 일도, 꿈을 먹고 사는 일도 각자 나름대로의 욕심을 채운다. 돈과 돈에서 오는 안정감, 성취감. 성취와 성취에서 오는 돈과 안정감. 뭐가 어디서 출발했든, 어느 게 어느 것보다 우월할 것도 열등할 것도 없다. 나도 그런 걸 갖고 ..
이니페이 모바일(INIPay Mobile)은 이니시스(INICIS)의 서비스 중 하나로, 앱 내에서 웹뷰를 이용해 결제 서비스를 제공할 수 있도록 하는데요. 직접 iOS에 붙이면서 배운 점을 정리해 보았습니다. 언어는 Swift 4.0입니다. 주의할 쿼리, P_RESERVED 앱 내에서 웹뷰를 띄울 때를 위한 대부분의 설정은 여기서 해 줍니다. 그런데 P_RESERVED는 '복합 필드'라고 해서, P_라는 프리픽스가 붙는 쿼리들과 섞여서 요청되게 되는데 그 값에 문자열 &이나 = 들어가야만 합니다. INIPay 문서 쪽에는 이 처리를 위한 iOS 가이드가 없습니다. 따라서 캐릭터셋 중에 .alphanumerics이라는 놈을 이용하여 퍼센트인코딩을 해 주었습니다. 일단 잘 동작하긴 하지만, 테스트를 많이 ..
Closure 안에서 self를 무심코 참조하여 쓰는 경우가 많습니다. 하지만 Swift에서는 Closure가 일급 객체이기 때문에, self의 프로퍼티로 저장될 수도 있습니다. 아무 조치 없이 그냥 쓴다면 상호참조로 인해 메모리 누수가 발생하기 쉬운데요. 그래서 클로저 파라미터 앞에 [weak self]를 넣어 리테인 카운트를 올리지 않은 채 참조할 수 있도록 해주는 것이 필요합니다. 이렇게 weak 키워드를 넣으면 클로저 내부에서는 self를 옵셔널로 판단합니다. 쓰려면 까 주어야죠. someInstance.someFunction { [weak self] param in guard let `self` = self else { return } self.someOtherFuction(param) //아니..