WooKoo Blog

물과 같이

전체 글 123

[iOS] - Unit Test 기본 개념 공부하기

많은 개발자분들께서 테스트 코드를 작성이 중요하고 작성을 하고 있다는 것을 알게되었습니다. TDD 에 대하여 장단점을 논하면서 쓰자 쓰지말자 논쟁도 많았구요. 그러나 정말 중요한 것은 테스터블한 코드를 작성하는 것과 핵심 로직에 테스트 코드가 있다면 분명 없는 것보다 좋은 것은 분명한 진리인 것 같습니다. 뭐 불평불만하기 전에 테스트 코드 작성을 할 줄은 알아야 된다고 생각해서 공부를 해보려고하나 많이 어려운 분야인 것 같아요. 그래서 테스트 코드라는 것에 대한 기초 개념이나 입문에 필요한 내용 위주로 글을 작성해보려고합니다. 테스트 코드란 무엇일까요? 말 그대로 내가 개발한 코드에 대해서 의도대로 동작하는지 확인 할 수 있는 코드를 말합니다. 이로써 소프트웨어의 품질이나 안정성을 확인 할 수 있는 것이..

개발/개발 2022.11.18

[Swift] - Array의 Count 함수는 과연 속도 차이가 있을까?

오늘 회사에서 컬렉션 뷰의 스크롤 위치를 최하단으로 내리는 것에 의견을 나누었다. 하나의 방식은 indexPath 를 바인딩한 Array의 count -1 을해서 마지막 셀로 이동하는 것과 contentHeight 를 구해서 setContent 로 지정된 contentHeight 로 가는 방안이었다. 방식의 차이 말고 무슨 차이가 있을까 고민하다가 count 는 아이템 갯수를 세아려해서 더 느리지않을까? 라는 의구심하고 아니다 갯수는 안세아릴꺼다 메모리에 갯수자체가 이미 들어있을꺼다. 의견이 있었고 과연 배열의 갯수가 크면 count 의 속도 차이가 있을까?? 사실 count 의 동작 원리는 찾아보기 어려웠다. 그래서 그냥 속도 차이라도 ?? 정말 있는지 테스트 해보았다. 어레이에 999999개 를 센 ..

개발/개발 2022.11.01

[iOS] - SkeletonView 를 RxDataSources 에 적용해보기

안녕하세요 ! 회사에서 컬렉션뷰 혹은 테이블뷰에 스켈레톤뷰를 적용해야해서 어떻게 할까 인터넷을 검색해보았습니다. https://github.com/Juanpe/SkeletonView GitHub - Juanpe/SkeletonView: ☠️ An elegant way to show users that something is happening and also prepare them to which con ☠️ An elegant way to show users that something is happening and also prepare them to which contents they are awaiting - GitHub - Juanpe/SkeletonView: ☠️ An elegant way to ..

개발/개발 2022.10.31

[SwiftUI] - SwiftUI Button Hide 버튼 숨기기

클릭한 버튼 비활성화 시에는 Button() .disabled($is) 숨길 때에는 이런식으로 비활성화 할 수 있지만 hidden은 그런게 없어서 당황ㅅ... opacity 를 조절해서 숨긴 것처럼 할 수 있는 방법이 있다. @State var isState: Bool = false Button() .opacity(isState ? 0 : 1) 이런식으로 스유는 처리를 하나보네요! 레퍼런스입니다. https://stackoverflow.com/questions/56490250/dynamically-hiding-view-in-swiftui

개발/개발 2022.10.11

[iOS] - Carthage 따라하기

안녕하세요 오늘은 iOS 앱 중에 Carthage라는 의존성 관리 도구가 있는데 이걸 사용해보려고해요 요즘은 SPM을 많이들 사용하실텐데 지원 안하는 라이브러리들이 있어서 Pod을 써볼까했지만 Carthage 경험이 없어서 이 참에 한번 해보려고합니다. 근데 cocoapod보다 약간 불편하다고 하더군요 ! 한번 해보면서 느껴보겠습니다. 1. Homebrew 설치! https://brew.sh/index_ko Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 홈브루 설치해주시고! 2. Carthage 설치 >> brew install carthage 만약 오류가 나신다면 ? m1 맥북이 나오면서 홈브루 위치가 잘못설치되면 오류가 나는 경..

개발/개발 2022.08.20

[iOS] - Responder Chain

오늘은 Responder Chain 에 대해서 정리해보려고합니다. Responder에 대해서 먼저 알아야겠죠? Responder는 이벤트를 핸들링 및 이벤트에 반응 할 수 있는 객체입니다. UIResponder에서 상속된 클래스의 인스턴스들이죠 저희가 개발하면서 자주 사용하는 UIApplication, UIViewController, UIView(UIButton, UITextField 등) 모든 사용자가 이벤트를 발생시키는 것들은 responder 객체에 보냅니다. 예시를 하나 들어볼게요 한 화면에 뷰가 있고 그 안에 서브 뷰로 텍스트 필드가 있다고 가정합시다. 사용자가 텍스트필드를 탭하면 이에 반응하며 키보드가 올라오죠?? 가장 처음으로 이벤트가 발생한 텍스트 필드! 그것이 바로 first respon..

개발/개발 2022.08.04

[iOS] - Project & Target 개념

iOS 앱에서 프로젝트와 타겟의 개념과 차이에 대해서 알아보도록해요! 모듈화를 하기 앞서 개념을 확실히하고 가는게 좋을 것 같아서 정리해봅니다! Project 모든 파일, 리소스, 정보를 위한 저장소 프로젝트는 프로젝트 내 모든 타겟들을 포함하고 기본 빌드 설정을 정의 Target 빌드 할 하나의 제품 및 프로젝트의 빌드 설정을 상속하고 오버라이드 할 수 있음 타겟을 빌드하기위해 다른 타겟이 필요하다면 의존을하고 있음 별도의 Info.plish가 존재 Target MemberShip을 반드시 체크해야 타겟끼리의 파일을 찾을 수 있음 막상 특징들을 알아보니 많지 않네요 그냥 말그대로 하나의 프로젝트에서 여러개의 프러덕트인 타겟들을 나눌 수 있고 나눠진 타겟들끼리도 의존할 수 있다는게 핵심인 것 같네요!

개발/개발 2022.08.03

[개발] - 세마포어와 뮤텍스

세마포어와 뮤텍스라는 말을 들어보신 적이 있으신가요?? 모바일 환경뿐만아니라 최근 개발 패러다임을 보면 동시성 프로그래밍 패러다임에 있는데 공유 자원을 안전하게 사용하기 위해서는 상호배제 (접근을 막는 것) 방법이 필요합니다. 뮤텍스와 세마포어는 이를 위한 동기화 도구로 각각 다른 방식으로 제공합니다. 이에대해서 한번 알아보도록 해보죠! 세마포어 어떤 자원을 이용할 때 하나의 값을 이용해 사용할 때는 -1 사용이 끝나면 +1 을 하여 상호배제 시킨다. 값이 0일 경우에는 값이 존재 할 때까지 대기한다. 즉 공유 자원에 접근 할 수 있는 프로세스 및 스레드의 값(카운트)을하여 상호 배제 방법 뮤텍스 어떤 자원을 이용하기 위해서는 유일한 Key Object가 필요하며 이를 가진 프로세스 혹은 스레드만 자원을..

개발/개발 2022.07.26

[SwiftUI] - TabView 어떻게 만들지?

안녕하세요 오늘은 SwiftUI의 TabView에 대해서 간단하게 정리해볼거에요 UIKit 에서는 TabbarViewcontroller 를 사용해서 탭바를 만들었는데요 SwiftUI에서는 TabView라는 이름으로 하나의 뷰처럼 이용할 수 있어요 바로 알아볼께요 먼저 탭바를 선택했을 때 사용할 selection을 하나 만들어주죠 @State private var selection = 1 그 후에 아래와 같은 형태로 만들어주면됩니다. TabView(selection: $selection) { Text("홈") .tabItem { Text("홈탭") }.tag(1) Text("두번 째 탭") .tabItem { Text("둘탭") }.tag(2) Text("셋탭") .tabItem { Text("셋탭") }..

개발/개발 2022.07.26

[iOS] - iOS 에서 딥링크가 뭘까? (Firebase 기반으로)

딥링크란 무엇일까요 ??? 어떤 주소를 입력하면 해당 주소에따라 앱이 실행되거나 이동시키는 기능을 수행하는 것을 이야기합니다. 앱이 설치가 되어있으면 해당 화면으로 이동시키는데 만약 앱이 설치가 안되어있다면 앱 스토어로 이동 후 설치 후에 특정 화면으로 바로 이동시키도록 하는 것을 지연된 딥링크라고도 부르기도합니다. 딥링크는 방식에 따라 크게 3가지로 분류합니다. 1. URI Scheme 방식 : 앱에 URI Scheme를 등록하여 분석하여 특정 화면으로 이동 2. App Link : Android 도메인 주소를 이용한 딥링크 3. Universal Link : iOS 도메인 주소를 이용한 딥링크 오늘은 iOS Universal Link에 대해서 알아보도록 하겠습니다. 시작 전 URI Scheme 방식의..

개발/개발 2022.07.25