21. 11. 09 Unit test, Double stack
Unit Test
: 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차. 모든 함수와 메서드에 대한 test case를 작성하는 절차를 말한다.
테스트를 한다는 것은 안정성을 보장하는 것!
- 유닛 테스트의 장점- 해당 메서드에 대해 독립적으로 테스트를 하기 때문에 빠른 리팩토링 반영과 빠른 테스트를 진행할 수 있다.
- 코드의 확장이나 리팩토링 시에서도 안정성을 확보한 채로 빠르게 대응할 수 있다.
 
- FIRST 원칙- Fast- test는 빠르게 동작할 수 있어야 한다.
- Independent / Isolated- 각각의 테스트는 서로 독립적이며 의존해서는 안된다.
- Repeatable- 테스트는 언제 어디서나 같은 결과가 반복되어야 한다. 통제가 어려운 부분에 대해서는 테스트를 위한 객체를 만들어주는 방법도 있다.
- Self-Validating- 테스트는 Bool을 이용하여 성공, 실패에 대해서 스스로 검증이 가능해야 한다.
- Timely- 이상적인 테스트는 실제 코드를 구현하기 직전에 구현해야 한다.
 
- XCTest → 유닛 테스트, 퍼포먼스 테스트, UI 테스트를 만들고 실행하는 프레임워크. 테스트에서 사용되는 코드들을 사용하기 위해서는 이 XCTest 프레임워크가 반드시 import 되어야 한다.
Double Stack
→ 두개의 스택으로 큐를 구현하는 아이디어! ( 스택은 배열로 구현 )
→ 더블 스택은 배열의 마지막 요소를 제거하는 연산 removeLast()은 재정렬이 필요하지 않으므로 시간복잡도가 O(1)임을 활용한 방법이다.

// 요런식으로 프로젝트에 적용해보았다
struct Queue<Element> {
    var enQueueElements: [Element] = []
    var deQueueElements: [Element] = []
    
    mutating func enQueueElement(_ element: Element) {
        enQueueElements.append(element)
    }
    
    mutating func deQueueFirstElement() throws -> Element? {
        if enQueueElements.isEmpty && deQueueElements.isEmpty {
            return nil
        }
        if deQueueElements.isEmpty {
            deQueueElements = enQueueElements.reversed()
            enQueueElements.removeAll()
        }
        return deQueueElements.removeLast()
    }
}수정 (21. 11. 24) 
아 그런데 나중에 알고보니 reversed()가 시간복잡도 O(n)이었다. 같은 이름의 메서드가 두개가 존재하는데, 무슨 차이가 있는지 공부해봐야겠다.
컴퓨터에는 trade off → 메모리를 많이쓰면 연산을 덜해도되는데, 연산을 많이 하면 메모리를 덜 쓸 수 있다.
Author And Source
이 문제에 관하여(21. 11. 09 Unit test, Double stack), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@allie/21.-11.-09-Unit-test-Double-stack저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)