전체 글

전체 글

    [iOS] URLSession Completion Handler와 Delegate

    URLSession Completion Handler와 Delegate 를 활용하여 데이터 받아오는 방법 URL Session을 통해 data task를 생성하고 메모리에 직접적으로 데이터를 받아보자. 서버와 자그마한 상호작용을 위해서는 URLSessionDataTask 클래스를 사용하여 메모리에 response data를 받을 수 있다. 만약 데이터를 파일 시스템에 다운로드 받아야 한다면, URLSessionDownloadTask를 사용하면 된다. data task는 웹 서비스를 호출할 때 이상적인 방법이다. task를 생성하기 위해 URL session 인스턴스를 사용하게 된다. 만약 간단한 경우라면 URLSession 클래스의 shared 인스턴스를 사용할 수 있다. 만약 delegate의 콜백을 ..

    [iOS] Dynamic Type에 따른 AutoLayout 조정하기 (feat. WWDC 2017)

    WWDC 2017 Building Apps with Dynamic Type를 보다가 마침 현재 프로젝트에도 있는 문제가 있어서 적용 가능해보이는 부분을 발견했다. 바로 UILabel이 나란히 2개 있는 상황에서 기기의 폰트 크기가 커짐에 따라 어떻게 레이아웃을 잡아야하는지에 대한 내용이었다. 당연히 텍스트 일부가 ...등으로 짤리면 안되고, 뭔가 텍스트의 줄바꿈이 이상하게 되어있어도 안된다고 이야기하고 있다. 딱 봐도 이상해보이긴 한다... 그래서 권장하는 방식은 텍스트 크기가 커졌을 때, 우측 UILabel을 좌측 UILabel 아래로 내리는 방법이다! WWDC에서는 아래와 같은 방법으로 구현할 수 있다고 이야기하고 있다. 우측 UILabel의 firstBaseline을 좌측 UILabel lastBa..

    [Design Pattern] Factory Pattern과 Abstract Factory Pattern

    Factory Pattern Factory pattern이라는 말 그 자체로 객체를 생성해주는 역할을 한다. Factory pattern의 정의는 다음과 같다. 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하게 만드는 패턴이다. 즉 객체를 통해 인스턴스를 만드는 것이 아니라 Factory method를 통해 인스턴스를 생성하고 사용하게 되는 것이다. 어떤 과정으로 인스턴스가 생성되는지 그 과정에서 알아야 하는 세부 사항들을 줄여주는 효과가 있다. 예를 들어 storyboard를 기반으로 View Controller의 인스턴스를 만들려고 할 때 알아야 하는 값이 두 가지 있다. 바로 storyboard의 name과 identifier이다. 매번 Vie..

    [iOS] Delegation 재정복하기 (feat. 야곰 아카데미)

    본 게시글은 야곰 아카데미의 Coda가 제공한 실험실 콘텐츠를 학습하며 얻은 지식과 경험을 정리한 글 입니다. Thanks for Coda!!🙇🏻‍♂️🙏🏻 오랜만에 블로그에 글을 남겨봅니다~! (아카데미에서 공부하느라... 블로그가 뒷전이 되었네요... 블로그에만 올리지 않고 github에는 TIL로 매일 정리하고 있습니다!) 각설하고 Delegation에 대해서 알아봅시다! 1. Delegation이란? Delegation이란 무엇일까? 뭔가 익숙한듯 익숙하지 않은 단어.... 여기저기서 delegation pattern, delegate pattern이라는 말을 들어봤을 것이다. 답은 항상 단어의 뜻에 있다. 단어의 뜻을 알아보자. "위임"이라는 뜻이 현재 문맥에서는 적합한 것 같다. 그렇다면 무엇을..

    [Swift] wholeNumberValue 란?

    문자열를 정수형으로? ( String -> Int ) 알고리즘 문제를 풀다보면 Character나 String을 Int로 변환시켜야 하는 순간을 마주하게 된다. 이 때 가장 보편적인 방법으로는 Int()로 감싸서 값을 변환시키는 것이다. let numbString: String = "2" let numb = Int(numbString) print(numb) // Optional(2) // optional 형태로 반환되기 때문에 보통 옵셔널 바인딩을 하여 사용한다. if let n = Int(numbString) { // Int가 된 n을 활용하면 됨! } 다만 이 경우 주의해야할 점이 있는데 String 형일 때만 Int( )를 바로 씌울 수 있다는 것이다. numbString이 Character인 경우..

    [Network] 네트워크 계층 6

    앞선 글에서 봤던 count-to-infinity를 해결하는 방법 중의 하나로는 poisoned reverse라는게 있다. 라우팅 정보를 되돌려 주기는 하되, 기존의 정보가 아니라 무한대의 값으로 전달해주어 경로가 사용될 수 없다고 인식하도록 만들어준다. 즉, 경로를 역행하여 값들이 수시로 변경되던 예시를 방지할 수 있다. Hierarchical Routing 네트워크의 스케일이 큰 경우는 계층화(hierarchical routing)를 시킨다. 이전 글 들에서 link state, distance vector 알고리즘들을 통해 라우터들을 연결시켰었다. 이 때 잠시 말했었던 부분이 있는데, 바로 하나의 네트워크 내부에서만 이러한 알고리즘을 쓰고 외부 네트워크들을 연결하는데에는 다른 알고리즘을 사용한다고 ..