본문 바로가기

분류 전체보기184

[Swift] 객체를 생성하고 의존성을 관리하는 법 init, property, method 이전 포스팅에서 의존성(Dependency)이 무엇인지, 의존성 주입(Dependency Injection)이 무엇인지 알아 봤습니다! 오늘은 의존성 주입하는 여러 방법을 포스팅하려고 해요. 개발할 때 객체를 생성하고, 그 객체가 필요로 하는 데이터나 객체를 넘겨 주는 것에 대해서는 다들 경험하셨을 것이기 때문에 읽어 보시면 감이 잡힐 테지만 그래도 DI를 보고 오시면 이해가 더 쉽게 잘 될 거에요! DI에 대해 알아보려면 이 글을 참고해 주세요! iOS 앱을 만들때 우선 개발 일정에 맞추어 작동이 되도록 구현하는 것도 중요하겠지만, 프로젝트가 커지고 그에 따라 화면이 많아지면서 처리해야 할 데이터와 의존관계도 많아집니다. 이때 어떻게 하면 좀더 효과적으로 의존관계를 정의하고 유지보수 측면에서 유리하게 .. 2022. 5. 5.
[Swift] 의존성 주입 왜 필요할까? DI 알아보기 처음 Swift로 iOS 앱을 개발할 때만 해도 구현에 초점을 두었지 어떻게 구현할 것인가에 대한 고민은 하지 못했던거 같아요! 이제 어느덧 언어가 익숙해 지고 사용자 측면을 고려하면서 유지보수 용이성, 앱 아키텍처에 대해 자연스럽게 고민하게 되더라구요! 이번 포스팅에서는 Swift 언어보다는 Spring 프레임워크에서 주로 다루는 내용인 DI에 대해 이야기 해보려 합니다~ DI나 loC가 의존성을 어떻게 주입할 것이냐에 대한 것이기 때문에 딱 어느 프레임워크에서만 사용된다가 아니라서 Swift로 어떻게 의존성을 주입할 수 있을지, 의존성은 무엇인지 알아봅시다. 의존성이란? 의존성에 대해 이해하기 위해 예제 코드 하나를 살펴 보겠습니다~ class Zoo { let animal: Bear init() {.. 2022. 4. 29.
[Swift] insetBy 알아보기 insetBy(dx:dy) Core Graphic의 CGRect의 인스턴스 메소드 offset이 point라면 inset은 사이즈가 있는 공간. 안쪽으로 마진을 줌 중앙점을 기준으로 dx, dy 값을 통해 조정된, 원본 직사각형 보다 더 크거나 더 작은 사각형을 반환 Parameters dx x 좌표 값 원본 직사각형 보다 크게 만들려면 음수를, 더 작게 만들려면 양수를 지정함 dy y 좌표 값 원본 직사각형 보다 크게 만들려면 음수를, 더 작게 만들려면 양수를 지정함 예시 newView.bounds = originalView.bounds.insetBy(dx: 20, dy: 0) inset by 전 : (0.0, 0.0, 100.0, 40.0) inset by 후 : (20.0, 0.0, 60.0, 40.. 2022. 4. 23.
[iOS/Swift] xib를 이용한 Custom UIView 만들기 UIViewController, UITableViewCell, UICollectionViewCell, UICollectionReusableView 등을 상속 받는 subclass 파일을 생성할 때 xib를 함께 만들 수 있지만 아쉽게도 UIView는 파일 생성시 함께 xib를 만들어 줄 수 없습니당 우선은 UIView의 Subclass인 CommonTextField를 생성해 주겠습니다 새 파일을 추가하고 Class 명을 입력한 후 Subclass는 UIView로 상속 받으면 됩니다 Next를 눌러서 진행해 줍니다. 이제 xib 파일을 생성해 줍니다 새로운 파일을 추가하고 User Interface 섹션에서 보이는 View를 선택해 주면 xib 파일을 추가할 수 있습니다 저는 이전에 생성한 UIView 를.. 2022. 4. 10.
[iOS/Swift] 몇 초 후에 코드 실행하기 DispatchQueue asyncAfter DispatchQueue 클래스에 있는 public func asyncAfter(deadline: DispatchTime, execute: DispatchWorkItem) 을 사용해 줍니다 deadline은 DispatchTime을 받는데 .now() 를 사용하면 현재 시간을 반환 받을 수 있습니다. execute에는 deadline 이후에 실행되는 코드를 클로저로 전달하면 됩니다 3초 후에 execute의 코드를 실행하고자 할 때 아래와 같이 적어주면 됩니당 DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: { // 실행할 코드 작성 }) 예시 DispatchQueue.main.asyncAfter(deadline: .now() + 3, exec.. 2022. 3. 19.
[iOS/Swift] custom font 지정하고 UIFont 사용해보기 시스템 폰트가 아닌 원하는 글꼴을 iOS 프로젝트에 진행하는 방법을 포스팅해보려고 해요! 갑자기 이유없이 크래쉬 나는 이유도 알아봅시당 우선 원하는 글꼴을 다운로드 받아 주세요 저는 주로 "눈누" 라는 사이트를 사용해요 상업용으로 사용할 수 있는 폰트를 모아놓은 사이트여서 쉽게 원하는 글꼴을 찾아 다운로드 받을 수 있어요 https://noonnu.cc/ 눈누 상업용 무료한글폰트 사이트 noonnu.cc 원하는 폰트를 선택하고 상세 페이지에서 라이선스 요약표를 꼭 확인해 보세욤 주로 폰트를 받을 때 두 가지 확장자가 있을 거에요! .otf Open Type Font .ttf Tru Type Font xCode는 두가지 확장자 모두 지원합니당 폰트를 다운로드 받으면 주로 zip 파일로 다운로드 될거에요 더.. 2022. 3. 19.
[Github Desktop] 로그아웃, 로그인 하는 방법 we couldn't find that repository. Check that you are logged in 깃에서 새로운 repository를 생성하고 깃허브 데스크 탑에서 작업하려 하는데 갑자기 이런 에러 메시지가 떴다 ㅠㅠ We couldn't find that repository. Check that you are logged in, the network is accessible, and the URL or repository alias are spelled correctly 처음에 이유를 몰라서 당황했는데 알고 보니 private repository 생성 계정과 깃허브 데스크탑에 로그인한 계정이 달랐던 것! 근데 이놈의 맥 깃허브 데스크탑 앱에 아무리 찾아봐도 로그아웃, 로그인 하는 기능이 안보여서 찾아본 결과 control + , 컨트롤과 쉼표를 같이 눌러주면 아래 이미지와 같이 Preferences.. 2022. 3. 14.
드디어 몬터레이 업그레이드 했다 그간 맡아 하던 프로젝트가 있어서 몬터레이 업데이트를 망설였는데, 프로젝트도 마무리 되어 2차로 넘어갔다! 오늘 드디어 몬터레이로 업데이트하고 xCode도 업데이트 했다. 다행히 뭐 충돌 난다거나 갑자기 빌드가 안된다거나 그런것도 없고 오히려 디자인적으로 유려해진(느낌적인 느낌) 기분이라 좋당! 키보드를 황축에서 저적으로 바꿨는데 키압이 좀 느껴지는 편이라 손목이 조금 피로한거 같다. 그래도 다각다각한 느낌이 너무 좋다. 키감은 좋고 스테빌도 잘 잡혀 있지만 통울림인지 스프링음인지 뭔가 거슬리는 소리가 난다. 중저가도 아니고 브랜드 키보드를 산터라 속상하다.. 다만 스페이스 칠때마다 엄청난 쾌감이....ㅎㅎㅎㅎ 간이윤활하는 동영상 보고 도저히 못하겠어서 두꺼운 장패드를 알아봐야겠다... 2022. 2. 20.
[Swift] PHPhotoLibraryChangeObserver 와 LimitedAccessAlert 이전 포스팅에 이어서 PHPhotoLibraryChnageObserver에 대해서 포스팅 하겠습니다~ PHPhotoLibraryChnageObserver란? 이름에서 유추할 수 있듯이 PH / Photo Library / Chnage Observer 입니다. PhotoKit에서 제공하는 프로토콜로서 사용자의 라이브러리 변화를 감지하여 알려주는 역활을 합니다 이전 포스팅에서 확인해 봤을 때 PHAsset을 이용해서 사용자 라이브러리에 있는 사진이나 동영상을 가지고 오면 될 텐데 왜 옵저버 형태로 프로토콜을 제공해 주는 걸까요? 우선 사용자의 PHAsset을 가지고 오는 코드를 실행하면 let allPhotos = PHAsset.fetchAssets(with: phFetchOptions) 라이브러리의 객체들.. 2022. 2. 10.
[Swift] PhotoKit 사용해서 커스텀 앨범 만들기 - UICollectionViewController cell에 PHAsset 넣기 이전 글에서 PhotoKit을 사용할 때 권한을 얻어오고 사용자가 사용하기 쉽도록 대응해보았는데요 PHPhotoLibraryChnageObserver를 먼저 포스팅 해보고 싶었는데 아무래도 UICollectionViewController로 커스텀 앨범의 틀을 만든 후 진행하는 것이 좋을 것 같아 PHAsset에 대한 글 부터 적게 되었어욤 PHAsset 이란? 사용자가 사용하는 모바일 디바이스는 랩탑이나 컴퓨터에 비해 굉장히 한정적인 메모리를 가지고 있습니다 (요즘은 성능이 옛날에 비해 매우매우 좋아졌지만) 그러다 보니 이 메모리를 효율적으로 사용하는 것이 중요합니다. 커스텀 갤러리를 구현하고자 할 때 사용자 라이브러리에 있는 모든 사진을 긁어다가 앱에 저장하고 있다가 사용자가 UITableViewCon.. 2022. 2. 7.
[Swift] PhotoKit 사용해서 커스텀 앨범 만들기 - Permission 처리하기 PHPhotoLibrary의 authorizationStatus와 requestAuthorization 👋 SNS 앱이나 사진을 업로드하는 기능이 있는 앱이라면 사용자 갤러리에 접근하여 이미지를 가져오는 기능이 필요한데요, 사실 애플에서는 이미 이러한 기능을 쉽게 사용할 수 있도록 UIImagePickerController와 PHPickerViewController을 제공하고 있습니다. 두 클래스에 접근 권한 차이가 있지만 사용자가 사진을 선택하고 이 사진 정보를 받아 올 수 있죠! 👋 그러나 UI/UX가 기존 iOS에서 제공해주는 형태와 달라야 한다면 직접 갤러리를 구현해 주거나 오픈 소스 라이브러리를 사용할 수도 있습니다. 이미 OS에서 제공해 주는 것이 아닌 직접 구현을 해주게 되면 까다롭기는 합니다. 하지만 불가능한 것은 아니라서 이전에 커스텀 갤러리를 만들게 되었는데요, 이를 구현해 보면서 알게된.. 2022. 2. 5.
[iOS/xCode] 내부 파일 Bundle로 못 찾을 때 해결법 네트워킹을 할 경우 json 파일이나 데이터 파일을 api 로 호출해서 사용하지만 내부 테스트나 다른 상황에서 내부에 있는 파일을 사용할 때가 있는데요, 이때 파일 디렉토리에 정상적으로 들어 있으나 그 path를 bundle로 접근 못하여 nil을 뱉어 내는 경우 해결법입니다~ 우선 프로젝트를 클릭해 주세요 Target을 선택해 주시고 네비게이션에서 Build Phases를 클릭해 줍니다 여기에 Copy Bundle Resources 가 보이는데 이 항목을 눌러서 펼쳐주세요 + Build Phases 란? 작성한 코드가 실행가능한 바이너리로 변환하기 위한 빌드 단계 입니다 빌드 옵션이나 빌드시 수행되어야 하는 설정을 개발자가 직접 변경해 줄 수 있는 곳이 Build Phases 입니다 + 를 눌러서 Bu.. 2022. 1. 17.