전체 글
-
Swift를 사용해서 Cordova Custom Plugin 만들기 (1)iOS 2023. 5. 25. 03:13
Cordova 프로젝트에서 iOS 플랫폼의 메서드를 호출하고, 문자열을 수신하여 출력하기 위해서 간단한 Cordova Custom Plugin을 만들어보겠습니다. 플러그인 컴포넌트를 만들어내기 위해서, plugman을 설치해야 합니다. plugman은 플러그인 생성과 구성 및 관리를 도와주는 command line tool입니다. $ npm install -g plugman Create plugin using plugman $ plugman create --name CordovaSamplePluginSwift --plugin_id com.yeolmok.samplepluginswift --plugin_version 0.0.1 create 메서드는 플러그인의 뼈대를 만들어주는 메서드입니다. plugin.xm..
-
Swift Package에 GitHub Actions 사용하기iOS 2023. 5. 5. 16:08
GitHub Actions는 빌드, 테스트, 배포 파이프라인을 자동화할 수 있는 CI/CD(continuous integration & continuous delivery) 플랫폼입니다. 이 글의 아래에서는 GitHub Actions를 사용해서 간단한 Swift Package에 CI를 적용해보려고 합니다. 쉽게 말해서, 깃허브 저장소에 새로운 내용을 push 할 때, 트리거 되어 실행되는 스크립트를 작성해보겠습니다. GitHub Actions의 컴포넌트로는 다음과 같은 것들이 있습니다. Workflow Event Job Action Runner Workflows Workflow는 하나 이상의 job으로 구성되어 그것들을 수행하는 자동화 프로세스입니다. YAML 파일(형식: *.yml)에 정의되어 이벤트가..
-
깃허브 액세스 토큰 업데이트기록/Default 2023. 2. 4. 11:25
(1) Github 웹 Settings -> Developer settings -> Tokens에서 토큰 재생성 (2) 토큰 복사 후 터미널 On (3) 토큰이 유효하지 않아 문제가 발생한 Repository 폴더에서 remote 연결 해제 git remote remove (name) // git remote remove origin (4) 다시 연결 git remote add (name) (url) // git remote add origin https:// ... (Repository 주소) (5) Username(Github 계정) & Password(Personal access token) 입력
-
Class와 Performance in SwiftiOS 2023. 2. 2. 14:16
Reducing Dynamic Dispatch Swift는 기본적으로 Objective-C처럼 동적인(dynamic) 언어입니다. 하지만 Objective-C와 달리 Swift에서는 프로그래머가 필요에 따라 dynamism을 제거하거나 줄여서 런타임 성능을 향상시킬 수 있습니다. Dynamic Dispatch 클래스는 프로퍼티와 메서드에 접근하기 위해 기본적으로 동적 디스패치를 사용합니다. 따라서 아래와 같은 코드에서 동적 디스패치를 통해 a.aProperty, a.doSomething(), 그리고 a.doSomethingElse()에 접근합니다. class A { var aProperty: [Int] func doSomething() { ... } dynamic doSomethingEles() { ....
-
UIButton 커스텀(Image & Title)iOS 2023. 2. 1. 20:08
lazy var okButton: UIButton = { let button = UIButton(type: .custom) button.translatesAutoresizingMaskIntoConstraints = false button.layer.cornerRadius = 8 button.backgroundColor = .systemGreen button.setTitle("OK", for: .normal) // Title button.titleLabel?.font = .systemFont(ofSize: 20) button.setImage(UIImage(systemName: "checkmark.circle"), for: .normal) // Image button.addTarget(self, action..
-
의존성 역전 원칙(Dependency Inversion Principle)기록/OOP 2023. 1. 31. 15:45
SOLID의 의존성 역전 원칙(Dependency inversion principle)은 소프트웨어 모듈을 느슨하게 결합하기 위한 방법론입니다. 의존성 역전 원칙에는 이렇게 기술되어 있습니다. (1) high-level 모듈은 low-level 모듈로부터 import하지 않아야 하며 abstraction에 의존해야 한다. 쉽게 말해서 high-level 모듈은 low-level 모듈의 존재조차 몰라야 한다. (2) Abstraction은 detail에 의존하지 않아야 한다. Detail(구체 클래스(타입) 등 구현부)이 abstraction에 의존해야 한다. 일반적으로 의존성 관계는 high-level의 정책 모듈에서 정책과 비즈니스 로직을 가지고 (종속되어) 구체적으로 구현되는 low-level로 흐릅..
-
인터페이스 분리 원칙(Interface Segregation Principle)기록/OOP 2023. 1. 31. 00:50
SOLID의 인터페이스 분리 원칙(Interface segregation principle)은 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않아야 함을 말합니다. 그러기 위해서는 큰 인터페이스를 분리해서 사용하는 기능만 제공하도록 설계해야 합니다. 사용하지 않지만, 의존성을 가지고 있다면 인터페이스가 변경되었을 때 사용하지도 않는데 수정이 필요합니다. 조금 더 나아가서, 모델이 비대할 때 모델과 뷰 사이에 뷰 모델과 뷰 모델이 채택하는 프로토콜을 두고 꼭 필요한 메서드와 정보만 제공하는 것도 예시가 될 수 있을 것 같습니다. 또한 iOS에서 실제로 잘 지켜진 사례는 UITableView 관련 프로토콜이 있습니다. 데이터와 셀을 제공하는 UITableViewDataSource와, 사용자와의 상호작용..
-
리스코프 치환 원칙(Liscov Substitution Principle)기록/OOP 2023. 1. 30. 12:49
SOLID의 리스코프 치환 원칙(Liscov substitution principle)은 자료형 S가 자료형 T의 서브 타입이라면 프로그램 속성의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 치환할 수 있어야 함을 말합니다. 부모 클래스의 기능을 확장해서 사용하기 위해 상속하는 경우가 많은데, 무턱대고 상속하다가 자식 클래스가 부모 클래스가 정의해놓은 동작을 수행하지 못하거나, 뒤에서 나올 MeleeMinion의 speak() 메서드처럼 에러를 던지는 등, 퇴화한다면 상속이 제대로 되지 않고 있다는 의미입니다. 이런 상황에서 자료형 T의 객체를 자료형 S의 객체로 치환하게 되면, 올바르게 작업을 수행하지 않게 됩니다. 리스코프 치환 원칙은 상속 개념에 있어서 중요한 원칙이며, 상속할 때 리스코프 치..