본문 바로가기

Tech

(55)
<FOOCA> 출시 회고 약 2개월 만의 게시글입니다! 방장이 게시글에서 자주 멘탈이 나가더니 iOS, Swift를 버리고 도망친건 아닌가.. 개발을 버린것이 아닌가... 놀랍게도 앱을 출시하고 왔습니다! https://apps.apple.com/app/fooca/id6443597628 사용자가 음식을 먹었을 때 같이 간 사람, 날씨, 제목, 사진 등을 입력하면 카드로 저장되고 지도에 방문한 위치가 핀으로 찍힙니다 핀을 누르면 등록했던 카드가 나옵니다 캘린더를 활용하여 특정 날짜의 카드를 볼 수 있습니다 날씨와 같이 간 사람들로 등록된 카드가 분류됩니다 회고 09.13 ~ 10. 03 3주 간 개발을 하고 출시를 하면서 많은 일들이 있었다 1. 기획 처음 기획을 할 때 데이터 설계 과정에서 Realm, API, Map, Cale..
[iOS]Day45 - Generic 아이디어가 나오지 않는다 주말에는 좀 나왔으면 하는 바램이다 Generic 타입에 유연하게 대응하기 위해 사용한다 Generic으로 구현한 타입과 기능은 재사용이 쉽고 코드의 중복을 줄일 수 있기 때문에 깔끔한 표현이 가능하다 *T : TypeParameter 제네릭에서는 일반적으로 TypeParameter에 T, U, K 사용하며 플레이스 홀더와 같은 역할을 한다 *타입의 종류는 알려주지 않지만 제네릭으로 이루어진 함수를 사용할 때 T에 들어가야하는 타입은 모두 같아야 한다 제네릭은 위처럼 2개의 파라미터 사용도 가능하다 *Type Constraints 타입에 제약조건을 줄 수 있다 Numeric 프로토콜을 채택하지 않으면 제네릭 함수를 사용하지 못한다 Numeric 프로토콜을 채택했다면 함수를 사용..
[iOS]Day45 - TypeCasting 멍하니 보다 벌써 한주가 끝나가는 중이다 오늘도 달려보자 TypeCasting 인스턴스 타입을 확인하거나 자신의 인스턴스 타입을 다른 타입의 인스턴스인 것 처럼 사용할 때 활용되는 개념 타입 캐스팅 했을 때 실제 인스턴스 타입은 메모리에 남아있다 is는 어떤 클래스의 인스턴스 타입인지 어떤 데이터 타입인지 확인 가능하다 is 예시를 보면 부모는 자식을 포함하지만 자식은 다른 자식을 포함하지 않는 관계를 볼 수 있다 *DownCasting 부모 클래스 타입을 자식 클래스 타입으로 다운캐스팅 하는 것을 의미 as? 는 옵셔널 반환 타입 다운캐스팅 성공시 인스턴스 반환, 실패할 경우 nil 반환 as! 옵셔널 반환을 하지 않는다 다운캐스팅 성공시 인스턴스 반환, 실패할 경우 런타입 오류 발생 as? 의 경우 ..
[iOS] Day44 - Storyboard 없이 코드로 UI 설정해보기(Feat. Snapkit) 이 스냅이 아니다 SnapKit이다 오늘도 달려보자 UIWithoutStoryboard Snapkit을 활용하기 전 코드로 레이아웃을 설정하는 과정을 알아보자 1. 뷰객체 프로퍼티 선언 클래스의 인스턴스 선언을 해준다 2. 루트뷰에 추가를 해주자 이 과정이 없으면 시각적으로 드러나지 않는다 쉽게 말하면 Storyboard에서 +버튼을 통해 라이브러리에 접근 후 필요한 기능을 가져오는 과정이라 생각하면 편하다 3. 크기와 위치 및 속성을 정의 해주자 여기서 디바이스 마다 절대적인 수치가 다르기 때문에 비율로 잡기는 어렵다 (해보니까 어려웠다) 디바이스 마다 절대적인 수치가 다르기 때문에 어려워져서 새로운 기능등이 등장한다 NSLayoutConstraints 방식이 등장했는데 이런식으로 코드를 짜고 중요한 ..
[iOS]Day43 - UIPageViewController 책 넘기는 기능 궁금했었는데 알아보자 UIPageViewController UIPageController은 User가 보는 페이지가 몇번째 페이지인지 알 수 있게 해주는 기능이다 Storyboard에 pageViewController 한개와 viewController 3개를 설정해주자 우리는 PageViewControllerList라는 배열에 설정해 둔 ViewController 3개를 담고 pageViewController에 첫번째 부분을 설정해 준다 왜 viewDidLoad에서 createPageViewController 호출 후에 configurePageViewController을 호출해야 할까? -> 첫번째 부분을 configurePageViewController에서 명시해주는데 페이지를 만들어지..
[iOS]Day43 - Custom FrameWork 코드가 줄어드는 경험을 하는 중이다 뭔가 되는 것 같은 기분이다 배울수록 퍼즐이 점점 맞춰지는 느낌 Custom FrameWork 멀쩡한 파일 두고 굳이 하나 더 만들어서 관리해? 처음부터 완벽한 프로젝트고 수정할 필요가 없다면 상관이 없지만 유지보수는 필수다 프레임워크는 결합도는 낮게 응집도는 높게 구성할 수 있다 *응집도(Cohension) - 모듈 내부에서 하나의 목적을 가지고 연관되어 있는 정도 응집도가 높으면 목적은 같고 연관되어 있는 파일로 각각 존재해서 유지보수 시 수정할 곳 만 수정하면 다른 파일에 수정된 내용이 반영이 된다 -> Framework 사용의 경우 *결합도(Coupling) - 서로 다른 모듈과 모듈의 의존도 결합도가 높다면 거미줄 처럼 모든 파일이 다 연관되어 있어서 유지보수..
[iOS]Day43 - Access Control 눈 떠보니 화욜이더라.. 휴일은 코딩과 함께 사라졌다 오늘도 달려보자 Access Control 소스 파일 및 모듈의 코드에서 코드의 일부에 대한 접근을 제한하고자 할 때 사용한다 코드의 세부적인 구현, 상세 내용을 숨길 수 있고 코드의 불필요한 외부 노출을 명시적으로 제한, 은닉화의 특성을 구현 가능 접근 제어자는 모듈과 소스 코드 기준으로 접든 수준을 판단 *모듈(Module) import를 통해 프로젝트에서 사용할 수 있는 형태의 코드 묶음 단위 프로젝트도 하나의 모듈이다! 프레임워크 하나를 하나의 모듈로 볼 수 있음 open, public을 통해 프로젝트에 접근 가능 *소스 파일 프로젝트 내에서 코드 제어를 할 경우 internal, fileprivate, private로 소스 파일에 대한 코드 ..
[iOS]Day39 - Authorization - Camera 단체 사진 하나 정도는 찍어두자 오늘은 app에서 중요한 카메라 겔러리 동영상 달려보자 Privacy 설정 infoPlist에서 동영상, 갤러리, 카메라에 접근할 수 있도록 설정해주자 * 카메라, 갤러리 - 가지고 오기, 저장 마이크 - 카메라를 촬영하고 싶다하면 camera usage, 마이크 권한도 허용 *갤러리 권한 - 가지고만 오고 싶다면 권한이 필요 없음 - 갤러리에 사진 저장하고 싶다면 권한 필요 - 사용자가 사진을 가지고 오고 명확하게 갤러리를 여는게 명확 - 사진 가지고 오는건 권한이 필요 없기 때문에 몇개만 허용해도 다 가져올 수 있음 - 가지고 오는 것만이면 권한 필요 없는거 아님? 정해진 범위 벗어나면 addition use description 사용 YPImagePicker 카메라 ..
[iOS]Day38 - Privacy 보안 강국의 애플.. privacy 지켜주자 Authorization 아이폰을 써 본 경험이 있다면 App 실행 시 왜 이렇게 권한을 허용을 해야하는게 많아? 라는 생각을 한번쯤 해봤을 것이다 권한은 사용방법을 공개해서 사용자와 신뢰를 구축하는 것이다. info.plist에서 information Property List -> App Transport Security Settings 하위에서 권한 설정이 가능하다 (Privacy로 검색하면 검색하기 편하다) MapAuthorization infoPlist에서 위치 권한에 대하여 설정 해주었다 MapView - Map은 지도이기 때문에 위치 권한과는 상관 없다 - 단, 지도에 위치를 표기하고 싶다면 위치 권한을 설정 해주어야한다 - 중심과 범위를 지정 해주..
[iOS]Day37 - AwakeFromNib, PrepareForReuse 일어나라 두한아 아니 멍청아.. 오늘은 awakeFrombed 아니 nib 이전 게시물을 보면 AwakeFromNib과 PrepareForReuse가 있었다 한번 알아보자 PrepareForReuse 이전 게시물 Pagenation 쪽을 보면 빠르게 스크롤을 내릴 때 화면이 안보이는 상황이나 전혀 상관없는 이미지가 들어오는 경우가 있다 셀에 configure 되는 내용은 다르지만 셀 자체는 재사용되기 때문에 content와 무관한 요소들 Alpha, editing 까지 재사용 될 수 있다 prepareForReuse() 호출 시점을 잘 보자 스크롤을 빠르게 내릴 때 올바른 이미지가 들어가지 않는 문제도 prepareForReuse를 통해 해결이 가능하다 import UIKit class MovieCard..