함수형 프로그래밍이라는 패러다임이 있습니다.
스위프트에서 지원하는 패러다임 중 하나로 순수 함수, 고차함수, 불변성, 함수 합성이라는 특징을 갖고 있습니다.
첫 번째 특징인 순수 함수는 동일한 입력에 동일한 출력을 보장합니다.
즉 입력에만 의존하고 외부의 어떤 상태나 조건에 따라 바뀌지 않습니다.
addOne
은 동일한 입력에 동일한 출력을 보장합니다.
그러나 addRandomNum
은 입력이 동일하더라도 외부의 타입 메서드를 활용했고, 동일한 출력을 보장할 수 없습니다.
사이드 이펙트란 외부의 상태를 변경하는 등 외부로 영향을 끼치는 것을 말합니다.
순수 함수는 이러한 사이드 이펙트가 없습니다.
changeStr
는 함수 외부에 존재하는 hello
를 변화시키며 사이드 이펙트를 발생시켰습니다.
getHi
는 "hi"
를 반환시켜 다시 hello에 넣는 방식으로 불변성을 유지하고 사이드이펙트를 없앴습니다.
순수 함수의 특징으로 인해 코드의 예측 가능성이 높아집니다.
또 외부에 의존하지 않으므로 테스트와 디버깅이 용이합니다.
외부 상태를 변경하지 않고 공유 상태 없이 독립적인 실행이 가능하니 병렬처리에 적합합니다.
의존성이 없으니 재사용이 쉽고 다른 함수와 쉽게 합성할 수 있습니다.
즉 안정성, 유지보수성, 재사용성이 높게 유지됩니다.
잠깐 언급된 사이드 이펙트는 반드시 나쁜 것이 아닙니다.
실제로 프로그래밍을 하게 된다면 반드시 발생하게 됩니다.
예를 들어 파일에서 Data를 읽거나 저장할 때, 네트워크를 요청하거나 이벤트를 처리하고 UI를 업데이트 하는 등 다양한 상황에서 필수적으로 발생합니다.
사이드 이펙트는 어떻게 막을지가 아니라 어떻게 관리할지를 고민해야 합니다.
관리에 대한 방법으론 순수함수로 로직을 관리하고 사이드 이펙트는 꼭 필요한 부분만 분리시켜 작성하기, 불변성 - Immutable 상태와 단방향 데이터 흐름을 유지하기 등을 신경쓰는 것이 좋습니다.