본문 바로가기

iOS/Swift74

Swift) map map map은 배열 내부의 값을 하나씩 돌며 특정한 타입, 특정한 것으로mapping한다고 생각하면 간단하다. 그리고 그 결과를 배열의 상태로 반환한다. let name = ["Jiseong","Allie","Asan","Zoe"] print(name.map { $0 + " Hi" }) // print ["Jiseong Hi", "Allie Hi", "Asan Hi", "Zoe Hi"] 타입도 변경할 수 있다. let number = [1, 2, 3, 4, 5] print(number.map { Double($0) }) // print [1.0, 2.0, 3.0, 4.0, 5.0] flatMap let mapped = number.map{ Array(repeating: $0, count: $0) } /.. 2022. 2. 12.
Swift) DoubleStack - Queue DoubleStack을 이용한 Queue Queue를 하나의 Array로 만든다면, 첫번째 요소를 제거하려 removeFirst()를 호출할텐데 공식문서를 보면 시간복잡도가 O(n) 인 모습을 볼수 있다. 이는 첫번째 요소가 빠지고 그 뒤의 요소들이 앞으로 당겨지는 과정에서 발생하는 비용으로 인한 것이다. 그래서 그러한 단점을 보완한 DoubleStack 즉, Array 2개를 이용해 단점을 보완한다 하나의 Array에 먼저 enqueue 하여 요소를 넣어주고 dequeue할 때 다른 Array에 reversed()를 이용하여 넣어준다면 첫번째 배열의 첫번째 요소가 두번째 배열에선 마지막 요소가 되기에 dequeue하여 요소를 뺄 때 첫번째 요소를 뺴서 뒤의 요소들이 앞으로 당겨지는 비용이 쓰이지 않게 .. 2022. 2. 12.
Swift) TDD TDD TDD란 Test - Driven - Development 의 약자로 "테스트 주도 개발" 이라고 한다. TDD와 Unit Test는 다르다. Unit Test는 기능 개발을 진행한 후, 기능단위의 테스트 코드를 작성해 함수, 메소드의 기능을 개발자의 의도대로 테스트하는 것이다. TDD와 달리 테스트 코드를 꼭 먼저 작성할 필요도 없고, 리펙토링도 포함하지 않는다. 순수하게 테스트 코드만 작성하는 것을 의미한다. 하지만 TDD의 경우 말 그대로 "테스트 주도 개발" 이다. 테스트를 주도적으로 하는 개발.. 말이 좀 어렵게 느껴질 수도 있다. 말그대로 받아들이면 된다. 기능 개발을 위한 코드를 먼저 작성했던 일반적인 방법과 달리, 테스트를 위한 코드를 먼저 작성한 후, 그 코드에 맞게, 테스트에 통.. 2022. 2. 12.
Swift) UIViewController Life Cycle UIViewController Life Cycle OverView UIViewController의 Life Cycle을 공부해보려 합니다. ViewController는 모든 IOS App의 중추적인 역할을 합니다. App이 실행되는 동안 ViewController가 만들어지고, 사라지며, 특정 화면을 띄우고 내리는 작업을 수행합니다. 이런 과정들은 사용자 액션이나 특정 이벤트에 의해 메소드가 호출됨으로써 진행되게 됩니다. 아래는 위에서 말한 ViewController의 LifeCycle 메소드 입니다. loadView() viewDidLoad() viewDidUnload() viewWillAppear(_ animated: Bool) viewDidAppear(_ animated: Bool) viewWill.. 2022. 2. 12.
Swift) MVC MVC 애플의 MVC를 알아보기 전, 전통적인 MVC에 대해 먼저 알아보겠습니다. Traditional MVC 이전 글에서 다룬 Distribution(역할 분배)가 전통적인 MVC에선 적용이 되지않은 모습입니다. 위의 다이어그램을 통해 전통적인 MVC는 Model, View, Controller가 서로 의존하고 있음을 알 수 있습니다. View는 사용자 액션을 Controller에게 전달하고, Controller는 이에 따른 업데이트를 Model에게 요청합니다. 그 후 Model은 값을 업데이트한 후 값의 변화를 View에게 알립니다. 이렇게 연결된 M, V, C는 서로의 존재를 잘 알고있고, 상호간의 의존성이 높습니다. 즉, 독립성이 현저히 떨어져 각각의 재사용성이 떨어집니다. 독립성이 떨어졌다고 재.. 2022. 2. 12.
왜 디자인 패턴을 중요시 여기는가? 왜 디자인 패턴을 중요시 여기는가? 아직 디자인 패턴에 대해 문외한이지만 디자인 패턴을 하나하나 공부해보기 전에 "왜 디자인패턴을 중요시 여기는건가?" 라는 것을 공부하는 것이 맞다고 생각하였습니다. 그래서 여러 곳을 참고하던중 좋은 블로그를 발견하여 정리해보려합니다. 디자인 패턴이 프로그램을 작성할 때 필요한 이유와, 적용 후 효과들을 먼저 알아보고자 합니다. 여러 디자인 패턴이 있지만, 꼭 디자인 패턴에 맞게 코드를 짜지않았다고, 프로그램이 동작을 하지않거나, 제기능을 하지 못하는 것은 아닙니다. 하지만 이같은 프로그램은 가독성이 현저히 떨어지고, 디버깅과 테스팅, 유지보수 등에 많은 비용이 필요할 것입니다. 그렇다면 좋은 구조의 특징은 무엇일까요? Balanced distribution 각 객체들의.. 2022. 2. 12.