명시적 입력 vs 암묵적 입력

happiyoung_·2024년 8월 26일

Intro

프로그램이 복잡하고 기능이 많아질수록 함수를 만들고 구현해내는 건 중요하다. 함수를 실행할때는 크게 두가지 종류의 입력이 있다.

명시적입력

함수의 매개변수를 통해 직접 전달되는 입력

예를 들어, add(x, y) 같은 함수가 있을때 x와 y는 명시적 입력이다.

암묵적 입력

함수에 명시적으로 전달되진않지만 함수의 동작에 영향을 미치는 입력

외부 시스템 호출시 사용

외부 시스템을 호출하는 webClient.get(...) 같은 메서드는 함수의 매개변수 외에도 네트워크 상태 같은 시스템 바깥의 상태도 추가적인 입력이 될 수 있다.
즉, 네트워크 연결이 정상이면 함수 실행이 성공하겠지만 네트워크 연결이 끊어져서 실패할 수도 있음을 의미한다.
이러한 입력들은 메시지를 건네는 시점에는 알 수 없는 입력 이라 암묵적 입력이다.

전역변수나 인스턴스 변수인 경우

암묵적 입력은 함수가 전역변수나 클래스의 인스턴스 변수를 참조할때 자주 나타난다.

명시적입력과 암묵적입력의 특징

암묵적입력은 시스템의 복잡도 를 높이는 요인 중 하나이다.
그래서 시스템에서 암묵적 입력을 최대한 줄이기 위해 노력해야한다.

그렇다면 모든 입출력이 명시적이면서 같은 입력에 대해 항상 같은 출력만 주는 함수가 있다면?

이러한 함수는 불변한 함수라고 볼 수 있으며, 불변성을 지닌 함수를 순수함수라고 부르게 된다.
하스켈에서 배웠던 함수형 프로그래밍의 장점이 순수하다는 거였단걸 떠올리면 좋을 것 같다.
이렇게 불변성에 집중하여 객체를 만들고 함수를 만드는 방식의 프로그래밍을 함수형 프로그래밍이라 한다.

Outro

대학교 2학년과 3학년동안 하스켈이라는 언어를 배워오면서 함수의 순수함 불변성이 무엇인지 아리송해서 막연하게 외웠던 기억이 있다. 하지만 명시적 입력과 암묵적 입력이라는 함수의 특징을 공부하면서 순수 함수라는 것이 무엇인지 정확하게 깨달았고 하스켈에서 함수를 다뤘던 것이 불변성과 관련이 있었구나를 알게 되었다.

profile
해삐한 다영의 컴퓨터와 친해지기 프로젝트 🥰

0개의 댓글