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
- 동적언어
- multiline
- 함수형프로그래밍
- replacingOccurrences
- client-side-rendering
- SWIFT
- JavaScript
- 17681
- switch구문
- 약타입언어
- 약타입
- 프로그래머스
- reactnative android
- ReactNative
- textinput
- 스위프트
- Server-Side-Rendering
- ios
- 옵셔널
- beforePopState
- 데이터타입함수
- DelayInput
- 중첩함수
- 72410
- lineending
- next.js
- reactnavigation
- 비반환함수
- 리액트네이티브
- 나를부르는숲
Archives
- Today
- Total
으니의 개발로그
[Swift] Swift로 알아보는 객체지향 프로그래밍과 함수형 프로그래밍 본문
Swift로 알아보는 객체지향 프로그래밍과 함수형 프로그래밍
이 글은 Swift 프로그래밍 책과 위키백과를 읽고 요약한 내용입니다.
객체지향
객체지향 프로그래밍(OOP : Object-Oriented Programming)
객체 지향 프로그래밍 : 컴퓨터 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍 패러다임의 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것이다. 각각의 개체는 메시지를 주고받고, 데이터를 처리할 수 있다.
장점
- 프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있기에 대규모 소프트웨어 개발에 많이 사용
- 프로그래밍을 더 쉽게 배울 수 있음
- 소프트웨어 개발과 유지보수를 간편하게 함
- 직관적으로 코드를 분석할 수 있음
- 클래스에 하나의 문제 해결을 위한 데이터와 메서드를 모아놓은 방식으로 응집력을 강화하고, 클래스간에 독립적으로 디자인해 결합력을 약하게 할 수 있음
단점
- 지나친 프로그램의 객체화 경향 때문에 오히려 실제 세계를 그대로 반영하지 못한다는 비판을 받기도 함
특징
- 자료 추상화 : 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것
- 상속 : 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능 (다중 상속 : 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능)
- 다형성 : 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가 각각의 클래스에서 다른 기능을 하는 것)이나 오버로드(같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것)을 의미
- 동적 바인딩 : 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념
차용 언어
- Smalltalk, Objective-C, C++, C#, Java, Python, Ruby, Swift 등
기본 구성 요소
- 클래스(Class) : 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성과 행위를 정의한 것으로 객체지향 프로그램의 기본 사용자 정의 데이터 타입이라고 할 수 있다. 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인하여야 한다.
- 객체(Object) : 클래스의 인스턴스(실제로 메모리에 할당된 것)이다. 객체는 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 할 수 있다.
- 메서드(Method) 또는 메시지(Message) : 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에 명령을 내리는 메시지라고 할 수 있다. 객체 간의 통신은 메시지를 통해 이루어진다.
스위프트에서 객체지향 프로그래밍을 사용
class SomeClass {
var someProperty: Any = 1
func someMethod() {
// some task...
}
}
let myInstance: SomeClass = SomeClass()
// SomeClass라는 이름의 클래스의 이니셜라이저를 호출하여
// myInstance라는 이름의 상수에 할당한다.
// 클래스의 이니셜라이저를 통해 메모리에 할당되고 초기화한 객체를 인스턴스라고 부른다.
myInstance.someProperty = 100 // 인스턴스의 프로퍼티에 값을 할당할 수도 있고
print(myInstance.someProperty) // 값을 가져올 수도 있다.
myInstance.someMethod() // 인스턴스의 메서드를 호출하여 작업을 수행하도록 할 수 있다.
함수형
함수형 프로그래밍
함수형 프로그래밍(functional programming) : 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임
장점
- 대규모 병렬처리가 굉장히 쉽다
특징
- 함수의 응용을 강조
- 함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하므로 인수 x에 같은 값을 넣고 함수 f를 호출하면 항상 f(x)라는 결과가 나옴
명령형 프로그래밍과 함수형 프로그래밍의 비교
// doSomething 함수와 doAnotherThing 함수를 모두 처리하고 싶은 경우
// 명령형 프로그래밍
func doSomething() {
print("do something")
}
func doAnotherThing() {
print("do another thing")
}
func excuteAll() {
doSomething()
doAnotherThing()
}
excuteAll()
// 함수형 프로그래밍
func doSomething() {
print("do something")
}
func doAnotherThing() {
print("do another thing")
}
func excute(tasks: [() -> Void]) {
for task in tasks {
task()
}
}
excute(tasks: [doSomething, doAnotherThing])
// 두 수의 합을 구하고 싶은 경우
// 명령형 프로그래밍
func sum(first: Int, second: Int) -> Int {
return first + second
}
sum(first: 10, second: 5)
// 함수형 프로그래밍
func sum(first: Int) -> ((Int) -> Int) {
return { second in first + second }
}
sum(first: 10)(5)
'Swift > 책 정리' 카테고리의 다른 글
[Swift] String 타입의 다양한 기능 (0) | 2021.01.06 |
---|---|
[Swift] 데이터 타입(Data Type, 자료형) (0) | 2021.01.05 |
[Swift] 변수와 상수 (0) | 2021.01.04 |
[Swift] 주석 (0) | 2021.01.03 |
[Swift] 콘솔 로그(Console Log) / print() 함수와 dump() 함수 (0) | 2021.01.02 |