[Swift] Generic, Protocol을 이용한 Extension Wrapping
·
Swift/개념 & 응용
Extension Wrapping Extension Wrapping은 유명 라이브러리에서 자주 보이는 구조입니다. (참고로 Extension Wrapping은 정식 명칭이 아니라 제가 임의로 정한 이름입니다.) 대표적으로 Kingfisher, RxSwift가 있습니다. imageView.kf.setImage(with: url) Kingfisher 메서드를 사용할 때 UIImageView가 아니라 kf를 이용해 메서드를 호출하죠? 바로 그게 Extension Wrapping입니다. Extension으로 구현한 Kingfisher 메서드를 UIView에서 직접 호출하지 않고, KingfisherWrapper로 호출하는 것입니다. Extension Wrapping 장점 Extension Wrapping은 안정..
[천안시 맛집] 호시 리뷰 / 탄탄멘 맛집 / 라멘 맛집 / 연어덮밥 맛집
·
🐱 정주는 쉬는 중 :]/맛집
기본 정보 가게 이름 호시 위치 충남 천안시 서북구 나사렛대길 18-1 1층 호시 메뉴 & 가격 비탄멘(비빔탄탄멘) 10,000원 돈코츠라멘 10,000원 탄탄멘 10,000원 사케동 16,000원 메뉴판 & 가게 내부 먼저 메뉴판입니다. 라멘과 사케동이 유명한 집이에요. 매번 포장만 하다가 처음으로 가게 방문을 해봤는데요. 이번 방문에서는 비탄멘(비빔탄탄멘)을 먹었습니다. 그래서 사진도 비탄멘 밖에 없어요 ㅎ... 양해 부탁드립니다. 라멘 느낌이 풀풀 나는 앞접시와 숟가락이에요. 젓가락은 특이하게 나무 젓가락을 쓰시네요. 위생 때문일까요? 싸구려 젓가락이 아니라 고급 나무 젓가락이라 나름 좋았답니다. 가게 내부는 아담해요. 자리는 좀 협소한데요. 4인 테이블 1개, 2인 테이블 5개정도 됩니다. 단체 ..
[Swift] Failable Initializer (실패 가능한 초기화)
·
Swift/개념 & 응용
Failable Initializer Failable 초기화는 실패가 가능한 초기화입니다. 클래스, 구조체, 열거형에서 실패 가능한 초기화를 정의할 수 있습니다. Failable 초기화 예시 실패가 가능한 초기화는 특정 조건에서만 객체가 생성되어야 할 때 유용합니다. class Time { var hour: Int var minute: Int } 예를 들어, Time 클래스는 hour와 minute 변수가 있습니다. hour의 범위는 1~12여야 하고, minute은 0~59여야 합니다. 이외의 숫자가 들어오면 객체가 생성되지 않도록 하고 싶을 때 Failable 초기화를 사용할 수 있습니다. class Time { var hour: Int var minute: Int init?(hour: Int, mi..
[Swift] memberwise 초기화, convenience 초기화
·
Swift/개념 & 응용
서론 Swift에서 구조체와 클래스는 많은 차이가 있고, 초기화도 그중 하나입니다. 구조체는 멤버와이즈(memberwise) 초기화를, 클래스는 편의(convenience) 초기화를 가지고 있죠. 초기화에 대해 할 말은 굉장히 많지만, 이번 포스팅에서는 멤버와이즈(memberwise) 초기화와 convenience 초기화에 집중해서 알아보겠습니다. 초기화(Initializer) 초기화란 구조체, 열거형, 클래스의 인스턴스를 생성하는 것입니다. 초기화의 역할은 모든 프로퍼티를 기본값으로 초기화하는 것입니다. 만약 초기화가 끝나는 시점에 모든 프로퍼티가 기본값을 가지고 있지 않다면 초기화가 실패됩니다. (여기서 언급한 초기화의 역할은 아래에서도 꾸준히 언급되므로 알아두시면 좋겠습니다.) Default Ini..
[강남구 맛집] 우동명가 기리야마 본진 우동 리뷰 / 우동 맛집 / 자루우동 맛집 / 뎀푸라 맛집
·
🐱 정주는 쉬는 중 :]/맛집
기본 정보 가게 이름 우동명가기리야마본진우동 위치 서울 강남구 강남대로84길 23 한라클래식 지하1층 메뉴 & 가격 뎀푸라.자루우동 콤보 16,000원 (네이버플레이스 기준) 서론 오랜만에 서울에 가서 방문한 우동 집입니다. 원래는 포스팅할 계획이 없었어서 사진이 정말 없는데요 ㅎㅎ; 정말 맛있었던 집이라 적은 사진으로도 포스팅을 남기고 싶어서 이렇게 글을 씁니다. 최근 방문도 아니고 6월인가 7월 방문이기도 해요 ㅎㅎ; 참고로 점심시간에는 웨이팅이 다소 길었습니다. 하지만 좌석 수가 많아서 회전율이 높아서 기다린 시간은 그리 길지 않았답니다. 뎀푸라.자루우동 콤보 저는 뎀푸라.자루우동 콤보를 주문했습니다. 자루우동은 저렇게 면과 소스가 따로 나오는데요. 소스를 마가 담긴 그릇에 부어서 면을 찍어먹는 음..
[회고] 네이버 부스트캠프 웹・모바일 8기 챌린지 4주 차 회고 (+ 멤버십 합격)
·
경험 회고/네이버 부스트캠프 웹・모바일 8기
서론 (문제가 되는 내용은 댓글로 알려주시면 즉시 수정, 삭제하겠습니다.) 벌써 네이버 부스트캠프 웹・모바일 8기 챌린지가 끝났습니다. 4주라는 시간은 길지만, 체감 시간은 정말 짧았네요. 할 거 없이 살던 일주일과 부스트캠프에서 몰입했던 한 달의 체감시간이 같은 거 같아요 ㅎㅎ 이번 포스팅에서는 4주차 회고를 진행하고, 멤버십 결과가 나오면 결과와 함께 네이버 부스트캠프 웹・모바일 8기 챌린지 수료 후기를 작성하겠습니다. (멤버십이 8월 28일부터 시작이니 아마 21일 전후로 나오지 않을까 싶네요 ㅎ) +) 멤버십에 합격했습니다. 아쉽게도 멤버십에 가지 못하는 동료분이 계셔서 마음이 편치는 않습니다. 현업에서 만날 날을 기다리면서 멤버십도 열심히 해보겠습니다. 고민의 깊이 4주차 과제에서는 고민의 깊이..
[Xcode] XCTest 성능 측정 (Command Line 환경)
·
iOS/Xcode
서론 최근 XCTest를 이용해 성능 측정을 해보았습니다. 직접 해보기 전에는 그저 결과를 보여주는 용도구나~ 생각했었는데 직접 사용해보니 훨씬 더 자세한 내용을 제공해주었습니다. 이번 포스팅에서는 XCTest를 이용해 성능 측정하는 방법을 간단하게 알아보겠습니다. Command Line에서 XCTest 사용 먼저 Command Line에서 XCTest를 사용하는 법을 알아보겠습니다. Xcdoe 14.3 기준입니다. 1. 프로젝트 파일을 열어줍니다. 2. 하단의 + 버튼을 누릅니다. 3. Unit Testing Bundle을 선택합니다. 4. Product Name을 입력하여 생성합니다. 참고로 Product Name은 프로젝트 이름Tests 가 일반적입니다. 5. 생성 완료 (git 표시는 무시해주세요..
[회고] 네이버 부스트캠프 웹・모바일 8기 챌린지 3주 차 회고
·
경험 회고/네이버 부스트캠프 웹・모바일 8기
서론 네이버 부스트캠프 웹모바일 8기를 시작한지 벌써 3주가 지났네요. 시간은 항상 빨리 가는 거 같습니다. 최근에 악귀라는 드라마를 보고 있는데 1시간짜리 악귀는 20분처럼 느껴지고, 12시간 챌린지는 3시간처럼 느껴지네요. 근소하게 챌린지가 더 시간이 빨리 가는군요 ㅋㅋ 이번 주차는 반성거리가 더 많습니다. 네이버 부스트캠프 웹・모바일 8기 챌린지 3주차 회고에서는 반성점에 대해 말하고, 3주차부터 바뀌었던 챌린지 일정에 대한 후기도 말해보겠습니다. 코드 리뷰 반성 이번 코드 리뷰에서는 다른 팀원에게 큰 도움이 안 되었다고 느꼈습니다. 이전처럼 다른 팀원의 코드를 분석해서 좋은 점, 개선했으면 좋을 점, 궁금한 점에 대해 고민했습니다. 그렇지만 이전과는 다르게 의견의 퀄리티가 많이 낮았다고 생각합니다..
[Xcode] Thread Sanitizer - Race Condition 디버깅
·
iOS/Xcode
서론 최근 Xcode의 Thread Sanitizer 기능에 대해 알게 되었습니다. 직접 사용해보니 흥미로워서 공유 목적으로 포스팅 작성합니다. 그리고 혹시 Sanitizer라는 영단어를 들어보셨나요? 전 이번에 처음 들어봤는데요. 소독제, 살균제라는 뜻이더라고요. Thread를 소독해주는 기능(?)이라는 표현 같습니다 ㅋㅋ Race Condition TSan(Thread Sanitizer)는 런타임에 Race Condition을 탐지해 줍니다. 그래서 일단 Race Condition이 무엇인지 간단하게 살펴보도록 하겠습니다. Race Condition이란 현재 작업 이외의 또다른 작업의 타이밍(작업순서)에 따라 결과가 달라져 여러 결과를 만들어낼 수 있는 상황을 말합니다. 생김새가 비슷한 단어로는 Da..
[Swift] 꼬리 재귀(Tail Recursion)와 꼬리 재귀 최적화
·
Swift/개념 & 응용
꼬리 재귀(Tail Recursion) 꼬리 재귀란 재귀의 결과를 바로 반환하는 재귀 형태입니다. 말로 들으면 무슨 말인가 이해가 안 될 것이므로 코드로 알아보겠습니다. 아래 함수들은 단순히 1 ~ n까지의 합을 구하는 역할입니다. 먼저 일반 재귀 형태를 먼저 보겠습니다. func recursion(_ num: Int) -> Int { if num == 0 { return num } return num + recursion(num - 1) } 파라미터로 num을 전달 받고 num + recursion 결과를 반환합니다. 이 메서드 안에는 num + recursion 이라는 연산이 존재합니다. 연산이 존재하면 연산을 위한 값을 스택에 저장해야하기 때문에 재귀를 할 때마다 스택에 메모리 할당이 발생합니다. ..
유정주