본문 바로가기

SWIFT19

[iOS] Swift API Key 암호화하기 나는 현재 개인 프로젝트에서 오픈 API를 사용해 데이터를 받아오는 과정을 진행 중이다! 근데 이제 API Key를 github에 올리면 문제가 되니까 암호화하는 방법을 다시금 찾아보고 적용하는데 분명 해봤는데 왜 이렇게 오래 걸리지... 뭐였지...? 이게 최선이었나? 하는 마음이 들어 정리하고자 한다! 😂 방법 1. static 변수 활용하기 하나의 파일을 만들어서 사용할 API Key를 static 변수로 묶어 전역적으로 사용하는 방법이다. class보다는 struct, enum을 활용해 사용한다. struct APIKey { static let aApiKey = "aksdlakdl1aksdla" static let bApiKey = "aksdlakdl1aksdla" } // 사용 시 APIKey... 2024. 3. 30.
Swift 제네릭(Generics) 문법 알아보기 제네릭 문법 형식에 관계없이, 한 번의 구현으로 모든 타입을 처리하여 타입에 유연한 함수를 작성하는 문법이다. 유지보수 및 재사용성이 증가하는 장점이 있다. 함수뿐만 아니라 구조체, 클래스, 열거형도 제네릭으로 일반화가 가능하다. 제네릭 문법이 필요한 이유 타입만 다르고 구현 내용이 동일한 경우, 제네릭이 없다면 타입마다 모든 경우를 다 정의해줘야 한다. 개발자의 일이 늘고, 유지보수 및 재사용성이 어렵게 만들기 때문이다. 제네릭 함수의 정의 func genericsFunc(array: [T]){ // code } 는 타입 파라미터라고 한다. 함수 내부에서 파라미터의 타입이나 리턴형으로 사용된다. 관습적으로 Type의 의미인 T를 사용하기도 하지만, 다른 문자를 사용해도 된다. (형식 이름이기 때문에 U.. 2023. 8. 11.
Swift 중첩 타입 (Nested Types) 중첩 타입 타입 내부에 타입을 선언하는 것 사용하는 이유 특정 타입 내에서만 사용 (하위 타입은 상위 타입과 관계가 있어, 상위 타입 없이는 의미가 없는 경우 범위를 명확히 한정지음) 타입 간의 연관성을 명확히 구분하고, 내부 구조를 디테일하게 설계할 수 있음 사용 시에는 중첩타입 전체를 쓰거나 타입이 명확히 정의되어 있는 경우 타입추론이 가능해 줄여서 사용 가능함 class AClass { struct BStruct { enum CEnum { case aCase case bCase struct DStruct { } } var name: CEnum } } let aClass:AClass = AClass() let bStruct:AClass.BStruct = AClass.BStruct(name: .bCas.. 2023. 8. 2.
Swift Method Dispatch 클래스와 프로토콜의 메서드가 실행되는 방식에 대한 이해 스위프트가 함수를 실행시키는 방법 컴파일 타임 : 소스코드가 기계어코드로 변환되는 시점 Direct Dispatch | Static Dispatch 컴파일 시점에 코드 자체에 함수의 메모리 주소 삽입 또는 함수의 명령 코드를 해당 위치에 코드를 심음 가장 빠름 (0.0 - 2.13ns) 밸류 타입(구조체/열거형)에 사용 상속과 다형성의 장점을 누릴 수 없음 런타임 : 사용자에 의해 앱이 실행되는 시점 Table Dispatch | Dynamic Dispatch 함수의 포인터를 배열 형태로 보관 후 실행 중간 (3.23ns) 클래스, 프로토콜 테이블에서 사용 Witness Table : 프로토콜 테이블 Virtual Table : 클래스 테이블 Mes.. 2023. 8. 1.
Swift 프로토콜(Protocols) 클래스와 상속의 단점 하나의 클래스만 상속이 가능함. 즉, 다중 상속 불가능 기본적인 상위클래스의 메모리 구조를 따라갈 수 밖에 없음 (필요하지 않은 속성과 메서드도 상속됨) 클래스(레퍼런스 타입)에서만 가능 프로토콜 위 클래스에만 가능한 상속의 여러 문제를 해결하기 위해 나온 문법 실생활에서는 자격증의 개념으로 이해하면 쉬움 구체적인 구현을 하지 않음, 요구사항을 정의함. 구체적인 구현은 프로토콜을 채택한 곳에서 구현 class에서는 상속도 프로토콜도 채택하고 싶은 경우 상속하고자 하는 상위클래스를 먼저쓰고 프로토콜을 적으면 됨 상속과 달리 프로토콜은 다중 채택이 가능함으로 ,로 구분해 적으면 됨 protocol CanFly { func fly() } struct Bird: CanFly { func f.. 2023. 8. 1.
Swift 타입캐스팅(Type Casting) is연산자 (type check operator) 타입에 대한 검사를 수행하는 연산자 A is B : B는 A의 인스턴스인지 타입 확인하는 것 as 연산자 Person() -> Student() -> Undergraduate() as? / as!(강제) : 다운캐스팅 as? / as!(강제) => 다운캐스팅 Undergraduate 인스턴스를 생성하는데, 아래 코드와 같이 상위 클래스 Person으로 타입을 지정해 선언했던 것의 타입을 Undergraduate 타입으로 바꾸는 것을 의미 let person: Person() = Undergraduate() if let newPerson = person as? Undergraduate { // } as : 업캐스팅 Bridging(브릿징) : 서로 호환되.. 2023. 7. 31.