본문 바로가기

iOS82

Swift) Protocol(1) 프로토콜? 특정 기능, 역할을 하기 위한 프로퍼티, 메소드, 기타 요구사항 등의 청사진 프로토콜 준수, 채택 구조체, 클래스, 열거형은 프로토콜을 채택하여 특정 기능, 역할을 하기위한 프로토콜의 요구 사항을 실제로 구현할 수 있다. "청사진" 이라는 의미에 걸맞게 정의를 하고 설계도만 제공할 뿐 스스로 기능을 구현하지는 않는다. 구현은 프토토콜을 채택한 구조체, 클래스, 열거형에서 구현한다. 프로토콜 구문 protocol 프로토콜명 { //기능 정의 } 프로토콜을 채택하려면 사용자 정의 타입 뒤에 콜론을 붙이고 프로토콜명을 위치시킨다. 프로토콜이 여러개일 경우, 콤마로 나열할 수 있다. 클래스의 경우, 상속받은 superclass가 있다면 나열된 목록의 제일 앞에 위치시켜준다. struct 구조체명: 프.. 2022. 2. 13.
Swift) removeAll() vs [] 시간복잡도, 효율성을 따지다가 removeAll()과 []은 뭐가 다른건가 생각이 들었다. !!!!!!!!!!!!!!!!!!!! 근데 보면 default가 false이다. 만약 keepingCapacity로 true를 넘겨준다면 요소는 제거하지만, 메모리는 제거하지 않는다. 내 생각엔 이것 같다. true를 넘겨줘 메모리를 남겨둔다면 complexity가 O(n)인 것이고, 기본값 false이면 아닌 것 아니 아무리 생각해봐도 그냥 가차없이 다 지워버리는건데 차례대로 지우는 것도 아니고 검색을 하는 것도 아니고.. 그래서 의문을 가졌었다. 내가 내린 결론은 []를 저장해 빈 배열로 만들던, removeAll()을 쓰던 상관이 없다. 이다. 궁금한 분이 계시다면 밑글을 한번 읽어보는 것도 좋을 것 같다. .. 2022. 2. 13.
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.