test Code (with TCA)
·
iOS
TCA의 테스트코드 적용을 살펴보기 전에 먼저 TestCode에 대해 생각해보고 가려한다. 어디까지 짜야하고 어디까지 커버리지를 올려야하는가..에 관한 얘기가 될수 있을거같다.먼저 Unit Test와 UITest가 있다. Unit test : 특정함수, 메소드 동작 테스트(로직테스트) => 전체프로그램을 빌드하는대신 유닛단위로 빌드해 시간절약UI test : UI and UI actionUnit test1. import XCTest( Test는 XC framework를 기반으로 이루어져 있음)2. class 는 XCTestCase를  상속받음. 3. setUpwithError() 테스트 각각의 항목이 실행될 때 테스트. 테스크 클래스가 갖고있는 각각메소드가 실행될때 이게 한번씩 실행4. 위와 반대로 테스..
Swift Performance-wwdc24
·
iOS
https://www.youtube.com/watch?v=nb3bRQa0iGQ&t=3s 1. Swift에서 말하는 성능이란?WWDC 2024에서 Apple의 John McCall이 발표한 "Explore Swift performance" 세션을 보면서 정말 많은 것을 배웠습니다.성능이라는 게 단순히 "빠르다/느리다"로 나눌 수 있는 게 아니더라고요.성능은 다차원적이고 상황적입니다. 여러 측면에서 성능을 평가할 수 있어요:지연 시간: 작업이 시작되고 완료될 때까지 걸리는 시간에너지 소모: 앱이 배터리를 얼마나 효율적으로 사용하는지메모리 사용: 앱이 얼마나 많은 메모리를 점유하고 어떻게 관리하는지보통 성능 문제를 조사할 때는 거시적인 관점에서 시작합니다. Instruments 같은 도구로 측정하고, 대부분은..
매크로(Macros)
·
iOS
잉? 나는 따로 구조체에서 Init을 선언해주지 않았는데 뜨네?이게모지? memberwise initialization이는 컴파일러가 자동으로 init메서드를 생성해주기 때문이다.그렇다면 만약 WhatisMacro에 어떤 프로퍼티도 추가해주고 야 이것도 자동 컴파일러가 하게 해줘!🍎음...비효율적인데? 물론 swift compiler는 오픈소스야 잠만. 우리회의해보자...🧑🏼‍💻어? 그럼 일일이 너네랑 회의해야해? 확장성 딸리네?그래서 나온놈이 매크로다! 🧑🏼‍💻얘가 원하는데로 컴파일러를 수정하지 않고 Swift Package로 배포하는 방법!개발자가 원하는 방식으로 코드를 자동 생성할 수 있도록 돕는다. 매크로란?Swift 매크로는 컴파일러가 소스코드를 자동으로 생성하거나 확장할 수 있도록..
초기화(initialization.. 편의? 지정?)
·
iOS
https://bbiguduk.gitbook.io/swift/language-guide-1/initialization 초기화 (Initialization) | Swift타입의 저장된 프로퍼티에 초기값을 설정하고 초기 설정을 수행합니다. 초기화 (Initialization) 는 인스턴스의 클래스, 구조체, 또는 열거형을 사용하기 위해 준비하는 단계입니다. 이 단계에는 인bbiguduk.gitbook.io여기들어가면 어마어마하ㄷ..분량이... 그만큼 초기화가 swift에서 중요하다.Swift는 모든 저장된 프로퍼티가 초기값을 받을 수 있도록 클래스 타입에 대해 2가지의 초기화 구문을 정의한다. => 바로 지정된 초기화와 편의 초기화라는 친구들이다.지정된 초기화(designated Initializer)해당 ..
Function(1급시민 , inout & 클로저✨)
·
iOS
Swift의 함수는 1급 타입(First Class-type)이다근데 1급타입이 몬데 ? 아래의 3가지를 만족하면된다.아래의 3개가 1급시민의 조건이고 그것을 충족하는 객체가 1급객체이다.변수와 상수에 함수가 저장될수 있다. 아래에서 보면 increment라는 변수에 함수를 할당해주었다. 그러면 저 변수는 함수 그자체그런데 주의 할게 동일한 이름의 함수가 오버로딩 되어있을때는 타입추론이 안되고 타입 명시를 해주어야함.함수가 다른 함수를 값으로 반환할 수 있다.func makeIncrementer() -> ((Int) -> Int) { var answer = 1 func addOne(number: Int) -> Int { return answer + number } return..
Assertions && Preconditions
·
iOS
Swift기본을 다지기 위해 공부하던중 역설과 전제조건....뭐야 왜이렇게 입에 안달라붙고 한국어가 어렵냐..하며 찾아봤다... - Runtime시 발생하는 조건 - 불값이 true면 코드가 진행되고 false면..? 종료시킬수 있음 - 역설은 개발과정에서의 실수를 찾는데 도움을 주고 전제조건은 프로덕션문제 감지하는데 도움을 준다. => 유효하지 않은 조건이 발생하지 않도록 코드를 디자인하기 위해 사용한다. 뭐가다른데? 역설은 오직 디버그 빌드에서만 체크(프로덕션에서는 영향을 안주기에 개발단계에서 많이 해도 상관없다) 전제조건은 디버그와 프로덕션 빌드에서 체크 출시할때 엄청 크리티컬한거 예를들면 어? 이 함수 저번 버전인데 우리 업데이트했는데? 그래서 안바꾸면 API통신 안될텐데.? 프로덕션하고 디버그 ..
LLVM? Swift가 컴파일되는 과정 Swift 기초
·
iOS
Swift를 처음 배울 때 "왜 컴파일 언어지?"라는 의문이 들었어요. 플레이그라운드에서 실시간으로 결과가 나오니까 스크립트 언어 같아 보이거든요 🤔스크립트 언어는 한 줄씩 읽어가며 바로 실행합니다. Python이나 JavaScript처럼요. 번역 속도는 빠르지만 매번 실행할 때마다 한 줄씩 해석해야 해서 실행 속도가 느려요. 그리고 실행해봐야 오류를 발견할 수 있죠.반면 컴파일 언어는 소스코드를 미리 기계어로 번역해둡니다. 컴파일 과정이 필요하지만, 한 번 컴파일하면 빠르게 실행되고 컴파일 타임에 오류를 잡을 수 있어요.Swift가 컴파일 언어인 이유는 성능과 안전성 때문입니다. iOS 앱은 부드러운 60fps를 유지해야 하고, 메모리도 효율적으로 관리해야 하거든요.전통적인 컴파일러의 한계와 현대적 ..
KeyChain & 암호화
·
iOS
UserDefaults의 치명적 보안 약점iOS개발자로서 데이터를 안전하게 관리하는 것은 필수적인 역량입니다. UserDefault는 설정같이 가벼운 데이터를 저장하는데 적합했지만 비밀번호같은 민감한 데이터를 저장하면 보안 위협이 큽니다.왜UserDefault는 위험할까?UserDefault는 key -value 형태로 데이터를 저장하여 plist 파일로 즉 샌드백스 내에 존재합니다. 즉 앱이 삭제되면 데이터도 사라지는데 .UserDefaults는 암호화되지 않아있음. 예를들어 탈옥된 디바이스에서 중요 정보를 빼갈 수 있는거져 // 이렇게 저장하면...UserDefaults.standard.set("super_secret_token_12345", forKey: "auth_token")실제로는 이런 곳에 ..
Combine(2)- Operator
·
iOS/반응형프로그래밍
Operatorpublisher가 방출하는 데이터 스트림을 가공하거나 제어하는 강력한 도구1. Map: publisher의 모든 요소를 변환하여 새로운 스트림으로 방출Map과 ForEach차이- 반복을 하는 것은 똑같지만 ForEach는 여기서 부터 여기까지 반복을하겟다 명시라면 map은 바꾸겟다라는 명시. 물론 ForEach에서 변환할수 있다= 이것자체가 Map . 다른사람이 봤을때 Map이 있으면 아~ 바꾸려나 보다~~ 이해할수 있다. 2. tryMap : Map과 같지만 클로저 오류발생시키면 Publish 종료3. compactMap: nil을 제외하고 nil이 아닌것만 publish4. replaceNil : nil들을 내가 원하는 element로 변환5. scan: 아래와 같이 더한다. 누적 ..