반응형

전체 글 36

객체지향 프로그래밍 원칙 - SOLID 원칙

SOLID 원칙 #객체지향프로그래밍 객체지향 5대 원칙(SOLID) SRP(단일 책임 원칙) OCP(개방-폐쇄 원칙) LSP(리스코프 치환 원칙) DIP(의존 역전 원칙) ISP(인터페이스 분리 원칙) 앞 자를 따서 SOLID 원칙 이라고 부른다. Single Responsiblity Principle (단일 책임 원칙) 한 클래스는 하나의 책임만 가져야 한다. 새로운 요구사항과 변경에 잘 대응하기 위해서는 응집도는 높고 결합도는 낮게 구현하여야 한다. 하나의 클래스에서 많은 기능이 있다면 클래스 내부의 함수끼리 강한 결합을 발생할 가능성이 높아진다. Open-Closed Principle (개방-패쇄 원칙) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 변경되는 것이 무엇인지*에 ..

개발 2022.02.20

Swift - Combine의 Publisher 알아보기 Just, Future, Fail, Empty, Deferred, Sequence

Publisher #Combine #Publisher Just 가장 단순한 형태의 Publisher 입니다. 에러 타입은 항상 Never 입니다. Just((0...5)) .sink { value in print(value) // 0...5 } Future 일반적으로 Publisher의 처리를 sink 라는 구독을 형태로 많이 처리하게 되는데 이 때 클로저를 전달하는 과정에서 콜백 기반의 completion 핸들러를 사용하게 되는데 Futrue를 통하여 더욱 깔끔한 코드 작성이 가능해 집니다. let myFuture = Future { promise in promise(.success(10)) } myFuture.sink { value in print(value) // 10 } URLSeesion 이나 ..

ios/Combine 2022.02.08

Swift - Combine 요약 (Publisher, Operator 종류)

Combine이 가지고 있는 기능들을 정리해보았습니다. 앞으로 해당하는 글을 계속 쓰면서 업데이트 할 예정입니다. 업데이트를 하게되면 해당 설명 아래에 링크를 추가하겠습니다! Publisher 종류 Just: 위에서 본것과같이 가장 단순한 형태의 Publsiher로 에러타입으로 Never를 갖습니다. Promise: Just와 비슷하지만 Filter Type을 정의할 수 있습니다. Fail: 정의된 실패타입을 내보냅니다. Empty: 어떤 데이터도 발행하지 않는 퍼블리셔로 주로 에러처리나 옵셔널값을 처리할때 사용됩니다. Sequence: 데이터를 순차적으로 발행하는 Publisher로 (1…10).Publisher로 이에 해당합니다. ObservableObjectPublisher: SwiftUI에서 사용..

ios/Combine 2022.02.04

SwiftUI에서 UIkit, StoryBoard 사용하기

SwiftUI에서 UIkit 사용하기 SwiftUI에서 UIkit를 사용하기 위해서는 UIViewRepresentable을 채택하는 struct를 구현하면 됩니다. UIViewRepresentable을 채택하게 되면 필수로 구현해야 하는 makeUIView와 updateUIView가 있고 UIViewType을 원하는 UIkit의 View로 변경하면 됩니다. UIViewRepresentable // 구현 struct SwiftUIView: UIViewRepresentable { func makeUIView(context: Context) -> UIViewType { let view = UIViewType() return view } func updateUIView(_ view: UIViewType, con..

ios/swiftUI 2022.02.04

[Swift] 백준 11047 - 동전 0

import Foundation /* 동전 종류 N 가치의 합 K K원을 만드는데 필요한 동전 개수의 최솟값은? */ let firstInputItems = readLine()!.components(separatedBy: " ").map { Int($0)! } let kinds = firstInputItems[0] var sum = firstInputItems[1] var elements = [Int]() elements = Range(0 ... kinds - 1) .map { _ in Int(readLine()!)! } .reversed() var count = 0 elements .forEach { element in let value = sum / element if value > 0 { count..

Algorithm/BackJoon 2022.01.24

[Swift] 백준 swift로 알고리즘 문제 푸는법 - readline(), Xcode Swift로 커맨드 라인 입력값 받기

알고리즘 문제를 풀어보려고 하는데 문제를 풀어도 어떤식으로 제출을 해야 하는지에 대한 글입니다. 1. 문제 풀기 위한 Xcode 세팅 1. 먼저 xcode를 열어 new project를 만듭니다. 2. macOS에서 Commend Line Tool을 선택합니다. 3. main.swift 파일에서 문제를 푸시면 됩니다! Playground로 하지 않고 Command Line Tool로 하는 이유는 아래를 보면 알 수 있습니다. 2. 입력값을 받는 문제 문제중에 입력값을 받는 문제들이 있습니다. 이 입력값을 받기 위해 일반 Playground를 사용하지 않고 Command Line Tool을 사용합니다. 입력값을 받기 위해서는 readLine()을 호출하면 됩니다. 실행을 하게되면 먼저 1. Hello, W..

Algorithm/BackJoon 2022.01.23

[Swift] 백준 11399 - ATM

import Foundation let count = readLine() let insertPersonTimes = readLine() var personTimes = insertPersonTimes!.components(separatedBy: " ").map { Int($0)! } personTimes.sort() var sum = 0 for i in 0 ..< personTimes.count { sum += personTimes[i] * (personTimes.count - i) } print(sum) 2개의 입력값을 받는 문제입니다 사실 첫번째의 count는 안받아도 될거 같은데... ㅎㅎ ios 개발을 하면서 커맨드 라인으로 입력값을 받은 적이 없어 약간 해맸네요... Xcode Swift로 커맨..

Algorithm/BackJoon 2022.01.23

SwiftUI - Combine (3) Combine의 생명 주기(Life Cycle)

Back pressure Combine은 구독자가 데이터의 흐름을 제어하도록 설계되어 있습니다. 그래서 구독자는 파이프라인에서 처리가 발생하는 시기와 대상도 제어합니다. 구독자가 얼마나 많은 정보를 원하거나 수용할 수 있는지에 대한 정보를 제공함으로써 파이프라인 내에서 처리를 주도한다는 것을 의미합니다. 이러한 요청은 구성된 파이프라인을 통해 전파되며 각 Operator는 차례대로 데이터 요청을 수락하고 연결된 Publisher에게 정보를 요청합니다. 이 것을 백 프레셔 라고 불리는 Combine의 기능이라고 합니다! 파이프라인이 취소되면 해당 파이프라인은 다시 시작되지 않습니다. 취소된 파이프라인 대신 새로운 파이프라인을 만들어야 합니다. 생명주기(Life Cycle) 1. 구독자가 게시자에게 연결되면..

ios/Combine 2022.01.21

SwiftUI - Combine (2) 핵심 개념 (Publisher, Subscriber, Operator, Subject)

Publisher(게시자) 요청 시 데이터를 제공해줌 구독이 없는 경우 Publisher는 데이터를 제공하지 않음 두 가지 유형을 제공함(Outpt Type, Failure Type) Subscriber(구독자) 구독자는 데이터를 요청하고 Publisher가 제공한 데이터(및 오류)를 처리해야 함 입력에 대한 유형과 실패에 대한 유형 두 가지 연관된 유형 구독자는 데이터를 요청을 시작하고 수신하는 데이터의 양을 제어함 Subscriber가 없으면 게시가 아예 되지 않기 때문에 Subscriber는 작업을 주도하는 것으로 생각할 수 있습니다. Operator(연산자) 연산자는 Publisher Protocol과 Subscriber Protocol을 모두 채택하는 클래스 게시자 구독 및 모든 구독자에게 결과..

ios/Combine 2022.01.20
반응형