ios

    [잡담] SUWIKI 회고

    [잡담] SUWIKI 회고

    내 인생에서의 첫 프로젝트를 마무리했다. 사실상 개발을 1월부터 8월까지, 약 8개월이라는 시간을 이 프로젝트와 함께 했다. 프로젝트를 진행하면서 많은 것을 배웠고, 많은 것이 달라졌다. 계획 없이 이 프로젝트에 참여한 내가 참 다행이라는 생각을 요즘 한다. SUWIKI는 시간표와 강의평가가 묶여 있는, 학교 재학생들을 위한 앱이다. 프로젝트 구성원은 iOS는 1, AOS 2, 웹 3, 백 2로 구성되어있었고, 당연히 프로젝트도 처음이고 구성원도 혼자인 나는 많은 문제를 겪었었다. 그리고.. 솔직히 내가 잘했다고는 말을 못하겠다. 코드들이 엉망이고, 리펙토링 하기도 어려운 지경의 기능들도 존재하기 때문이다. 그리고 이런 식으로 기능을 구현해도 되는지.. 많은 부분에서 부족함을 느끼긴 했다. 하지만 처음부..

    [iOS] iOS 인터뷰 질문 - 5

    오늘도 돌아온 https://github.com/JeaSungLEE/iOSInterviewquestions 의 답변을 찾아보는 시간이다 ! 가보자고~~! Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하라 Delegate란? (공식문서) - 클래스 또는 구조체가 다른 유형의 인스턴스로 책임을 전달 또는 위임할 수 있도록 하는 디자인 패턴 - 이 디자인 패턴은 delegate라고 하는 위임(전달) 기능을 제공하도록 보장하는 프로토콜을 정의함으로써 실행됨. - 특정 액션에 응답하거나 해당 소스의 타입을 몰라도 외부 소스의 데이터를 검색할 수 있음. -> 객체 지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아닌, 처리해야 할 일 중 일부를 다른 객체에 넘기는..

    [iOS] iOS 인터뷰 질문 - 4

    알고리즘으로 범벅이 된 내 포스팅, 오랜만에 다시 https://github.com/JeaSungLEE/iOSInterviewquestions 의 질문들을 정리하는 시간을 보내보려 한다. Global DispatchQueue 의 QoS 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하라 QoS = Quality of Service QoS는 네트워크에서 사용하는 용어로 서비스의 중요도에 따라 중요한 서비스에 더 많은 자원을 할당하는 것, 또는 중요도를 뜻한다. QoS가 없다면 모든 서비스는 동일한 비율의 자원을 할당받게 된다. QoS는 작업들을 중요도에 따라 구분하여 급한 일에는 자원을 집중적으로 할당하여 빠르게 처리, 중요도가 낮은 일에는 자원이 모자랄 때 자원 할당을 덜해주는 등의 판단을 시스템이 ..

    [iOS] iOS 인터뷰 질문 - 3

    [iOS] iOS 인터뷰 질문 - 3

    오늘은 https://github.com/JeaSungLEE/iOSInterviewquestions 관련 포스팅 세 번째 시간이다. 굉장히 오랜만에 포스팅을 다시 재개하려고 한다 . . . Scene Delegate에 대해서 설명하라 는 내가 따로 블로그에 정리를 해두었기에 .. https://sozohoy.tistory.com/29 [iOS] SceneDelegate란 ? 오늘은 sceneDelegate에 대해서 정리해보겠다. SceneDelegate는 iOS 13에 AppDelegate의 일부 역할을 담당하게 되었고, 그 이유는 iPad-OS에 도입된 다중 창 지원 기능으로 인해 역할을 일부 분할하게 되었다 sozohoy.tistory.com UIApplication 객체의 컨트롤러 역할은 어디에 구..

    [iOS] SceneDelegate란 ?

    [iOS] SceneDelegate란 ?

    오늘은 sceneDelegate에 대해서 정리해보겠다. SceneDelegate는 iOS 13에 AppDelegate의 일부 역할을 담당하게 되었고, 그 이유는 iPad-OS에 도입된 다중 창 지원 기능으로 인해 역할을 일부 분할하게 되었다. iOS 13 이전과 이후의 Session Lifecycle은 위와 같이 변경되었다! 변경된 점 - window 개념 --> scene 개념으로 대체 - SceneDelegate에서 화면 (Windows 또는 Scenes)에 표시되는 내용을 처리하고 앱이 표시되는 방식을 관리 SceneDelegate 역할 ! - UI 및 데이터를 화면에 보이게 함 - Scene Session LifeCycle 이벤트 1. SceneDelegate에서 Scene Session이 생성되..

    [iOS] iOS 인터뷰 질문 - 2

    오늘은 https://github.com/JeaSungLEE/iOSInterviewquestions 관련 포스팅 두 번째 시간이다. 공부하면서 느낀 점은 처음 보거나 낯선 용어들이 많지만, 찾아보면 다 이해가 되고 겉핥기 식으로 알고 있는 내용들도 있어서 신기했다. 바로 시작해보겠다! 앱이 시작할 때 main.c에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? 앱 실행 과정(object-c) 1. 앱이 시작되면서 main() 함수가 실행 2. main() 함수는 UIApplcationMain() 함수를 실행 3. UIApplicationMain() 함수는 UIApplication 객체(앱의 본체)를 생성 4. UIApplication 객체는 info.plist 파일로부터 ..

    [iOS] iOS 인터뷰 질문 - 1

    https://github.com/JeaSungLEE/iOSInterviewquestions 를 참고하여, 다양한 질문들에 대한 답을 스스로 찾아보고, 메모해보는 습관을 길러야겠다 싶어 여유가 될 때마다 미리미리 정리하는 습관을 기르려고 한다. 이 포스팅을 읽는다면, 답만 찾아가지 말고 본인도 위의 깃허브 주소를 참고하여 따로 공부하도록 하면 본인에게 가장 좋을 것 같다 ! // 필수적이라고 생각되는 링크들은 글자 색을 그대로 두었으나, 글자색을 바꾼 링크들은 포스팅을 읽는 사람들이 개인적으로 찾아보면 좋겠다 싶어서 바꾸어 진행함. iOS Bounds와 Frame의 차이점은 ? Frame의 정의 - SuperView의 좌표 시스템 안에서 뷰의 위치와 크기를 나타냄. Bounds의 정의 - 뷰의 위치와 크..

    [Swift] 타입 캐스팅이란 ? (is, as)

    오늘은 타입 캐스팅이 무엇인가에 대해서 포스팅해보려고 한다. 항상 무의식적으로 타입 캐스팅을 쓰고 있는데, 뭔가 주입식으로 써야 한다!라고 어디선가 본 이유로 쓰는 것이지, 왜 쓰는 것인지 본질적으로 알고 있는 것은 아니라 판단하여 공식문서 및 다양한 블로그를 참고하여 글을 작성하려고 한다. 타입 캐스팅의 종류에는 is, as가 있다. 인스턴스의 타입을 확인하거나, 해당 인스턴스를 superclass / subclass로 취급하는 방법이다. Checking Type 공식문서 - is 연산자를 이용하면 특정 인스턴스의 타입을 확인할 수 있다. 내용이 빈약하기 때문에, 더 찾아보았다. - 표현식이 Type과 동일하거나, 표현식이 Type의 서브 클래스인 경우 --> True 반환 - 이외에는 false를 반..

    [iOS] swift Alamofire 토큰 재발급 구현 방법(adapt, retry, RequestIntercepter)

    본인은 개발을 시작한지 얼마 되지 않은 대학생이지만, 최근에 토큰 재발급하는 로직 관련해서 어려움을 크게 겪어 누군가 도움이 되었으면 하는 마음에 글을 포스팅해본다 😁 Alamofire에서는 자체적으로 RequestIntercepter라는 프로토콜을 제공하고, 그 안에는 adapt, retry 메소드가 정의 되어있다. 따라서 우리는 이 두개의 메소드를 잘 활용한 후, api 호출할 때 인터셉트로 넣어주면 토큰을 쉽게 재발급할 수 있다. 작동 순서 request() -> adapt() -> 토큰 만료 -> retry() 에서 RefreshToken을 넣은 후 다시 reqeust() -> adapt() -> 서버에서 확인 후 토큰 갱신 -> retry() // 로컬에 토큰 업데이트 -> request() -..

    [Swift] Swift 공식문서 정리 - 5(옵셔널 체이닝)

    옵셔널이란? 옵셔널이란 nil을 사용할 수 있는 Type을 옵셔널 타입이라고 부르며, nil을 가질 수 있는 값은 옵셔널 타입이다. 옵셔널 체이닝(Optional Chaining) class Person { var residence: Residence? } if let roomCount = john.residence?.numberOfRooms { print("John's residence has \(roomCount) room(s).") } else { print("Unable to retrieve the number of rooms.") } // Prints "Unable to retrieve the number of rooms." 강제 언래핑(Forced Wrapping) var name: Strin..