분류 전체보기

    [Swift] 타입과 다형성

    다형성 하나의 객체(인스턴스)가 여러가지 타입의 형태로 표현될 수 있음을 의미. 클래스의 상속으로 수직적으로 구현될 수 있음 값 타입의 경우 프로토콜의 채택으로 구현될 수 있음. class Person { var id = 0 var name = "이름" var email = "abc@gmail.com" func walk() { print("사람이 걷는다") } } class Student: Person { // id // name // email var studentId = 1 override func walk() { //재정의 메서드, walk() -1 print("학생이 걷는다")//원래는 사람이 걷는다인데 "학생이 걷는다"로 수정함 } func study() {//재정의 메서드, study() -1..

    [iOS] 다크모드 대응하기

    다크모드 다크모드는 iOS 13.0 업데이트에 등장했다. 지금은 프로젝트를 생성하면 다크모드를 지원하는게 기본 설정이다. 다크모드 지원여부는 개발자가 프로젝트 설정에서 선택할 수 있다. 프로젝트에서 다크모드를 잘 대응하기 위해선 라이트모드와 다크모드에서 각각 사용될 수 있도록 색상, 이미지, 아이콘등 요소에 관리가 필요하다. UIColor중 system이 붙은 색상들은 다크모드를 자동으로 지원한다. SystemBackgroundColor는 라이트모드에서 흰색, 다크모드에서 검정색으로 표현된다. 1. ColorAssets으로 대응 Color Assets을 추가할 때 Appearance에서 None이 아닌 Any, Dark를 선택해준다. 다크모드일 경우 Dark에 설정한 색이 표시된다. light모드일 경우..

    [Swift] defer문

    defer 사전적 의미: 미루다, 연기하다 자신의 실행을 함수 맨 마지막으로 미루는 클로저 보통 함수 내부안에서 작성되며 작성된 위치와 상관없이 함수 종료 직전에 실행된다. 예시 func test1() { print("TEST #1") defer { print("TEST #2") } print("TEST #3") } test1() 이렇게 defer문을 사용하면? 쉽게 예측할 수 있다. 결과와 같듯이 2가 마지막에 출력된다. defer문 내부에 작성된 클로저는 함수 실행 종료 직전에 실행되기 때문이다. defer문이 실행되지 않는 경우 1. defer를 읽기 전에 함수가 종료(return)되는 경우 func test2() { print("TEST #1") return defer { print("TEST #..

    [iOS] FlexLayout과 PinLayout 사용 방법

    https://github.com/layoutBox/FlexLayout GitHub - layoutBox/FlexLayout: FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementati FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementation. Concise, intuitive & chainable syntax. - GitHub - layoutBox/FlexLayout: FlexLayout adds a ni... github.com FlexLayout UIStackVie..

    [iOS] Modul

    모듈 프로그램의 기능을 독립적으로 분리한 것을 모듈이라고 한다(Naver) 쉽게 특정 기능별로 나누어진 프로그램 덩어리 수 많은 코드를 짠다고 할 때 모든 코드를 1개의 파일에 작성할 경우 몇만줄의 코드를 일일히 읽기란 본인이 작성한 코드여도 힘들며, 다른 개발자가 작성했다면 더욱 힘들것이다. 그로인해 유지보수성과 재사용성이 매우 감소한다. 이를 방지하기위해 효율적이고 재사용 가능하도록 코드를 작성하려고 개발자는 노력해야한다. 이때 유용한게 모듈화이다. 모듈화가 잘 되어있다면 내가 아니라 다른사람이 내가 만들어 놓은 기능을 필요로 할 때에도 사용될 수 있다. 즉, 다른 프로그램의 부품으로도 사용이 가능해진다. 모듈화의 장점 1. 빌드 속도 감소. XCode는 빌드시 빌드 결과를 폴더에 저장해놓고 해당 폴..

    POP와 OOP의 차이

    프로토콜지향 프로그래밍 POP(Protocol Oriented Programming) 프로토콜 중심의 프로그래밍으로 확장을 통한 수평 구조로 타입을 확장하는 방식으로 다형성을 구현한다 프로토콜에 정의된 인터페이스를 직접 구현하기 때문에 필요치 않은 프로퍼티나 메서드를 구현하지 않을 수 있다. 참조, 값타입을 모두 지원하며 상속의 경우 하나의 슈퍼클래스를 상속할 수 있지만 프로토콜의 경우 다양한 프로토콜을 채택할 수 있다. 객체지향 프로그래밍 OOP(Obeject Oriented Programming) 객체 중심 프로그래밍으로서 슈퍼클래스의 상속을 통하여 수직구조로 타입을 확장하는 방식의 다형성 구현한다. 객체 지향적으로 아래에서 부터 위로 접근하는 상향식 접근 구조이다. 함수나 생성자, 연산자를 오버로드..

    Singleton 패턴을 활용하는 경우

    Singleton 싱글톤 패턴은 특정 용도의 객체를 하나 생성해서 여러 상황에 공용으로 사용하고 싶을 때 사용하는 방법이다. 인스턴스가 하나만 존재하는 것을 보장하게되며, 주로 환경설정, 네트워크객체, 로그인 정보 등을 특정 용도로 생성해둔 객체에 넣어두고 필요할 때 접근한다. 인스턴스가 하나만 존재하는것을 보장하므로 메모리 낭비를 방지할 수 있고 데이터를 공유할 수 있다는 장점이 있다. class Singleton { static let shared = Singleton() let value = 3 private init(){} } Singleton.shared.value static을 활용해 인스턴스를 저장할 타입 프로퍼티를 생성. init을 호출해 또 다른 인스턴스를 생성하는것을 막는다. 메모리가 ..

    [iOS - UIKit] StackView를 알아보자

    https://developer.apple.com/documentation/uikit/uistackview UIStackView | Apple Developer Documentation A streamlined interface for laying out a collection of views in either a column or a row. developer.apple.com UI StackView + 애플 개발자문서. 행 또는 열에 View들의 묶음을 배치할 수 있는 간소화된 인터페이스이다. 공식 문서의 설명 [개요] StackView는 AutoLayout의 힘을 활용하여 사용자 인터페이스를 작성할 수 있게 해주며, 기기의 방향, 화면의 크기, 사용가능한 공간의 변경에 동적으로 적을할 수 있는 인터..

    [RxSwift] CollectionView또는 TableView 셀의 UIImageView or UIButton 클릭 이벤트 처리

    UITableViewCell의 ImageView 클릭이벤트 처리 Cell에서 ImageView의 탭제스처 감지 후 옵저버블로 방출 ViewController에서는 옵저버블 구독 후, ViewModel로 전달 ViewModel은 이벤트를 받아 처리하고, 필요한 데이터 업데이트 수행 방법 1. ViewController에서 바로 ViewModel로 전달 Cell import UIKit import RxSwift import RxCocoa class MyTableViewCell: UITableViewCell { @IBOutlet weak var myImageView: UIImageView! private var disposeBag = DisposeBag() private var indexPath: IndexP..

    [iOS] Moya(Network)

    https://github.com/Moya/Moya GitHub - Moya/Moya: Network abstraction layer written in Swift. Network abstraction layer written in Swift. Contribute to Moya/Moya development by creating an account on GitHub. github.com Networking은 앱에서 거의 필수적인 요소다. Networking을 위해 개발자는 흔히 APIManager 또는 NetworkModel로 불리는 네트워크 모듈을 설계한다. 이런 상황에 API추가가 쉽고 변경이 용이한 네트워크 모듈을 개발하는것은 중요하다. 네트워크 통신을 위해 URLSession을 사용할 수 있다. ..