[iOS / Swift] 객체지향 프로그래밍(OOP), 함수형 프로그래밍 (FP)
2024. 11. 6. 17:27
반응형
객체지향 프로그래밍 (OOP)
OOP는 데이터와 기능을 객체라는 단위로 묶어 처리하는 방식임.
Swift에서 OOP는 주로 클래스, 구조체, 프로토콜을 통해 구현됨. OOP의 주요 특징은 다음과 같음.
- 캡슐화 : 객체 내부의 데이터를 외부에서 접근하지 못하게 보호하는 개념임. Swift에서는 private, fileprivate, internal 같은 접근 제어자를 통해 캡슐화를 지원함
- 상속 : 기존 클래스나 구조체를 기반으로 새로운 클래스나 구조체를 생성할 수 있음. Swift에서 클래스는 상속이 가능하지만, 구조체는 상속이 불가능함. 대신 Swift는 프로토콜을 통해 상속처럼 동작하는 기능을 구현할 수 있음.
- 다형성 : 상속받은 자식 클래스나 객체가 부모 클래스의 속성이나 메서드를 재정의할 수 있음. Swift에서 override 키워드를 사용해 다형성을 구현할 수 있음.
- 추상화 : 복잡한 시스템을 단순화하여 필요한 인터페이스만 외부에 노출하는 개념임. Swift에서는 프로토콜을 사용해 인터페이스만 정의하고 구현은 구체적인 객체에서 하도록 할 수 있음.
위 코드이미지를 보면 OOP의 특징을 볼 수 있음.
- 캡슐화 : name 속성을 private로 설정하여 외부에서 직접 접근할 수 없게 했음.
- 추상화 : speak 메서드를 통해 Animal이 어떤 소리를 낼지 외부에서 사용할 수 있게 했음.
- 상속 : Dog 클래스가 Animal 클래스를 상속받아 기능을 확장했음.
- 다형성 : Dog 클래스에서 speak 메서드를 재정의(override)하여 Dog에 맞는 행동을 구현했음.
더보기
추가 정리
• private: 같은 파일 내의 해당 클래스/구조체 안에서만 접근 가능.
• fileprivate: 같은 파일 내에서는 어디서든 접근 가능하지만, 다른 파일에서는 접근 불가능.
• internal: 기본 접근 수준이며, 모듈 내에서는 어디서나 접근 가능하지만, 모듈 밖에서는 접근 불가능. 대부분의 코드가 internal로 되어 있음.
• public: 모듈 외부에서도 접근 가능하지만, 상속이나 오버라이드는 불가능.
• open: public과 비슷하지만, 모듈 외부에서도 상속이나 오버라이드가 가능.
함수형 프로그래밍 (FP)
FP는 순수 함수와 불변성을 기반으로 상태 변화를 최소화하고, 함수를 일급 객체로 취급하는 프로그래밍 패러다임임.
Swift에서는 map, filter, reudce 같은 고차 함수와 클로저를 통해 FP 스타일의 코딩을 지원함. 주요 개념은 다음과 같음.
- 순수 함수 : 같은 입력이 들어오면 항상 같은 출력을 반환하며, 함수 외부의 상태를 변경하지 않는 함수임. Swift에서 순수 함수를 사용하면 테스트와 디버깅이 쉬워지고, 코드의 예측 가능성이 높아짐.
- 불변성 : 상태 변화 없이 데이터가 불변하도록 설계하는 것을 의미함. Swift에서는 let 키워드를 통해 상수를 선엄함으로써 불변성을 보장할 수 있음. 불변성이 FP에서 중요한 이유는 프로그램의 예측 가능성과 안정성을 높여주기 때문임.
- 고차 함수 : 함수를 매개변수로 받거나 반환값으로 사용할 수 있는 함수임. Swift의 map, filter, reudce 같은 함수들이 대표적인 예시임. 이를 통해 데이터 변환을 명확하고 간결하게 표현할 수 있음
- 일급 객체로서의 함수 : Swift에서는 함수가 변수에 저장될 수 있고, 다른 함수의 매개변수로 전달되거나 함수의 반환값으로 사용할 수 있음. 이를 통해 FP의 다양한 패턴을 구현할 수 있음.
위 코드 이미지를 보면 FP의 특징을 볼 수 있음.
- 순수 함수 : square 함수는 같은 입력을 넣으면 항상 같은 결과를 반환하고, 외부 상태에 영향을 주지 않으므로 순수 함수임.
- 고차 함수 : map, filter, reudce는 각각 FP에서 데이터를 변환하는데 사용되는 고차 함수임. 데이터를 변환하거나 필터링하는 작업을 간결하게 표현할 수 있음.
- 불변성 : numbers 배열 자체는 변하지 않고, 새로운 배열이나 값을 생성해 사용하는 방식임. Swift에서는 let으로 상수를 선언해서 불변성을 보장할 수 있음.
OOP와 FP 혼합 예시 코드를 보겠음. 먼저 설명하자면 동물 목록에서 특정 동물만 찾아서 동물 이름을 출력하는 코드임.
위 코드 이미지에도 주석으로 달아놓았지만, 짧게 다시 설명하자면
- Animal 클래스는 객체지향적으로 동물의 속성을 표현하고, isFavorite 메서드를 통해 조건을 정의함.
- filter와 map을 이용해 함수형 스타일로 조건에 맞는 동물 이름을 추출함.
반응형
'Swift 언어 > Swift 문법 정리' 카테고리의 다른 글
[iOS / Swift] 숫자와 참거짓 (0) | 2024.12.03 |
---|---|
[iOS / Swift] 변수와 상수 (2) | 2024.11.28 |
[iOS / Swift] 구조체 (Struct) (0) | 2024.10.15 |
[iOS / Swift] 클래스(Class) (0) | 2024.10.14 |
[iOS / Swift] 옵셔널(Optional) (3) | 2024.10.11 |