Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- rxswift
- SWIFT
- ios
- UITextView
- HIG
- 리펙터링
- uitableview
- Observable
- Xcode
- Human interface guide
- 클린 코드
- clean architecture
- swift documentation
- swiftUI
- 스위프트
- 리펙토링
- collectionview
- map
- combine
- uiscrollview
- tableView
- 리팩토링
- RxCocoa
- ribs
- MVVM
- UICollectionView
- Clean Code
- 애니메이션
- Protocol
- Refactoring
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Clean Architecture] 4. 구조적 프로그래밍 (structured programming), 테스트 코드가 중요한 이유 본문
Clean Architecture/Clean Architecture 기초
[Clean Architecture] 4. 구조적 프로그래밍 (structured programming), 테스트 코드가 중요한 이유
jake-kim 2021. 3. 6. 03:03절차 지향 프로그래밍 (Procedural programming)
- 주로 goto 문장이 주를 이루는 프로그래밍
- 현재의 프로그래밍은 모두 `구조적 프로그래밍`
- 자바의 경우 break, goto문이 있지만 이 제어흐름을 아무 제약 없이 직접 전환될 수 있던 과거의 포트란과 코볼같은 언어와는 달리 goto문을 함수 안으로 한정시키는게 대부분
구조적 프로그래밍 (structured programming)
- 구조적 프로그래밍의 탄생: 수학적으로 접근 (순차 구문-열거법, 분기-열거법, 반복-귀납법)
- 기능적 분해: 구조적 프로그래밍을 통해 모듈을 증명 가능한 떠 작은 단위로 재귀적으로 분해가 가능 -> 기능적으로 분해 가능하다는 의미
- 문제 접근방법: 큰 문제 -> 고수즌의 기능들로 분해 -> 이들 각 기능은 저수준의 함수들로 분해 -> 끝없이 반복 가능 -> 분해된 기능들은 구조적 프로그래밍의 제한된 제어 구조를 이용하여 표현 가능
프로그래밍은 증명되지 않은채 존재
- 프로그램 관점에서 `유클리드 계층구조(순차구문, 분기, 반복)`를 각 증명하려 했지만, 결론은 증명되지 않음
- 무엇인가 입증할 때 사용하는 전략에 `유클리드 방식`도 있지만, `과학적 방법`을 이용
- 과학적 방법: 반증은 가능하지만 증명은 불가능한 것
- `F=ma가 옳다고 증명할 수는 없지만 이들 법칙을 시연할 수 있고 소수점 이하 많은 자리의 정확도를 측정할 수 있지만 `수학적으로 증명할 수 없음` - 과학적 방법의 증명 접근 방법: 내용이 사실임을 증명하는게 아닌 틀렸음을 증명하는 방식
- 수학은 증명 가능한 서술이 참임을 입증하는 원리인 반면, 과학은 증명 가능한 서술이 거짓임을 입증하는 원리 (=프로그래밍 접근방법)
테스트
- 프로그래밍은 수학적 접근이 아닌 과학적 접근
- 테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 순 없음
- 프로그램이 잘못되었음을 테스트를 통해 증명할 수 있지만, 프로그램이 맞다고 증명할 수 없음
- 프로그래밍의 핵심은 테스트 (TDD가 중요한 이유)
구조적 프로그래밍이 지금까지 가치 있는 이유
- 프로그래밍에서 반증 가능한 단위를 만들어 낼 수 있는 능력이 있기 때문
- 아무런 제약 없는 goto 문장은 지원하지 않기 때문
- 가장 작은 기능에서부터 가장 큰 컴포넌트에 이르기까지 모든 수준에서 software는 과학과 같음 -> 반증 가능성에 의해 주도
- software architecture는 모듈, 컴포넌트, 서비스가 쉽게 반증 가능하도록 (=테스트하기 쉽도록) 만들기 노력해야함
'Clean Architecture > Clean Architecture 기초' 카테고리의 다른 글
[Clean Architecture] 6. 함수형 프로그래밍 (0) | 2021.03.24 |
---|---|
[Clean Architecture] 5. 객체 지향 프로그래밍 (Object-Oriented Programming), 의존성 역전 (0) | 2021.03.12 |
[Clean Architecture] 3. 패러다임 개요 (구조적, 객체지향, 함수형) (0) | 2021.03.05 |
[Clean Architecture] 2. 두 가지 가치(behavior, architecture) (0) | 2021.02.27 |
[Clean Architecture] 1. 설계(design)와 아키텍처(architecture)란? (0) | 2021.02.25 |
Comments