일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- collectionview
- Protocol
- 스위프트
- RxCocoa
- 리팩토링
- uitableview
- 리펙토링
- Observable
- HIG
- Xcode
- MVVM
- Clean Code
- swiftUI
- Refactoring
- 클린 코드
- SWIFT
- ribs
- 애니메이션
- UITextView
- uiscrollview
- combine
- ios
- rxswift
- 리펙터링
- UICollectionView
- clean architecture
- swift documentation
- map
- tableView
- Human interface guide
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[swift] 15. 객체지향 vs 함수형 본문
1. 정의
1) 객체지향언어 :
- 데이터를 객체로 취급하고 처리 요청을 받은 객체가 자기 안에 있는 기능을 가지고 처리 - 추상화, 캡슐화, 상속, 다형성
- 데이터를 기록하는 것을 강조
2) 함수형언어 :
- 최소한의 기능 : 데이터를 함수형(인풋과 아웃풋)으로 표현
- 불변성 목적 : 변경 가능한 상태를 최대한 제거 하려는 성격(같은 입력에는 항상 같은 출력)
즉 객체지향은 상태를 기록하여 바꾸는 것을 강조, 함수형은 상태를 기록하지 않고 함수의 응용을 강조(대부분 람다 함수를 이용)
2. 비교
1) 함수형 언어는 side effet를 제거
(* side effect : 반환값 이외에 호출된 함수 밖에서 관찰할 수 있는 애플리케이션 상태 변화.. 콘솔로그 띄우기)
즉, 프로그램을 더욱 쉽게 이해하고 더 쉽게 테스트 하기 위함, 즉 함수 자체는 최소한의 기능을 넣고 AOP와 같은 것처럼 분리하여 확인하는게 좋다는 취지
2) 객체지향언어에서는 일급객체, 함수형언어에서는 일급함수
3) 객체지향은 상호작용하는 객체들의 집합, 함수형은 상태 값을 지니지 않는 함수 값들의 연속
* 일급 객체 : 다른 객체들에 적용 가능한 연산들(매개변수 넘기기, 변수 대입)을 모두 지원하는 객체
* 일급 함수 : 함수를 객체로 보는 관점
3. 코드로 비교하는 객체지향 vs 함수형
게임에서 마린이란 캐릭터가 뮤탈에게 데미지를 받음
객체지향 -> "수정" 마린 객체 상태가 존재하며 이 객체의 HP프로퍼티를 감소
함수형 -> "대체" HP가 적은 마린을 새로 생성하여 이 리턴된 값을 사용
1) 객체지향
- balance라는 프로퍼티 고정 (상태저장)
- credit()은 출금, debit()은 입금 메소드
2) 함수형
- 출금(credit)과 입금(debit)할 때 기존의 객체의 상태를 바꾸는 것이 아닌 새로운 객체를 반환하여 이것을 사용
4. 장단점 비교
1) 추상화 관점 - 함수형 승
- 함수형은 높은 추상화(개발자가 문제 해결에만 집중 할수 있게끔함), 단 높은 추상화로 인해 구체적으로 함수 내부에 어려움
- 객체 지향도 캡슐화와 같이 추상화를 할 수 있지만 함수형에 비해서 낮은 추상화
* 추상화가 높은 것의 의미 : 복잡한 것을 단순화하는 것 (또한 높은 추상화 수준을 위해 접근 제한자를 사용하여 복잡함을 줄이기 위해 private으로 선언하기도 함)
2) 재사용성 - 함수형 승
- 함수형은 함수 단위의 코드 재사용이 더욱 쉬워짐 (더 작게 쪼개어 생각 가능)
- 객체지향은 기본이 객체(=변수 + 메소드)라서 개발자 입장에서는 변수와 메소드를 동시에 고려해야 함
3) Multi core & Concurrency - 균등
- 병렬처리는 변경 불가능한 데이터에서 Thread-safe제공 -> 함수형이 좋음 (단, 오래된 데이터를 사용할 수 있다는 단점)
- 객체 지향은 데이터를 변경 가능하므로 최신 데이터를 사용할 수 있다는 장점 (단, Data Consistency유지하는 것이 어려운 단점)
* 변경 불가능 데이터의 이점 : Thread들은 잠금(Lock), 동기화(Synchronize)작업이 중요함. 데이터가 변경되면 잠금, 동기화 문제를 따로 해결해야함
4) 간결성 - 함수형 승
함수는 side effect를 제거하는것이 원칙이므로, 함수는 같은 입력은 항상 같은 출력이 나오게끔함. 때문에 더욱 간결
5. 떠도는 단어
*순수함수(pure function) : Side Effect가 없는 함수(함수 실행이 외부에 영향을 끼치지 않는 함수)
-> Thread safe, concurrency
*고계함수(higher-order function) : 함수 자체도 '값'으로 취급
*익명함수(anonymous fuction) : 이름이 없는 함수(람다식을 통한 구현)
* 번외) 코딩테스트는 객체지향? 함수형?
코딩테스트는 절차형에 근접
'swift 5 문법' 카테고리의 다른 글
[swift] 17. 연산자 재정의 (0) | 2020.09.27 |
---|---|
[swift] 16. 고차 함수(Higher-order function) (0) | 2020.05.24 |
[swift] 14. 접근 제한자(private, fileprivate, internal, public, open) (0) | 2020.04.18 |
[swift] 13. 초기화(init, convenience init, required init, override init) (0) | 2020.04.17 |
[swift] 12. 예외 처리 (throws, throw, do - try - catch) (3) | 2020.03.29 |