Unit Type

Unit Type

unit 형은 구체적인 값이 없다는 사실 자체를 나타내는 형이에요. 값이 하나뿐이라서, 딱히 쓸 값이 없을 때 그 자리를 채워 주는 자리표시자 역할을 하죠. 다른 언어를 먼저 배운 분이라면 "값이 없는 함수의 반환형"이라는 느낌이 먼저 떠오를 텐데, F#에서 이 역할을 맡는 게 바로 unit이에요.

출처

본문

문법 (Syntax)

// The value of the unit type.
()

unit 형의 값은 이렇게 토큰 () 하나로 나타내요.

설명 (Remarks)

F#에서는 모든 식이 반드시 어떤 값으로 평가돼야 해요. 그런데 결과적으로 쓰일 만한 값이 없는 식도 있겠죠. 그런 식에는 unit 형의 값이 사용돼요. 조금 익숙하게 말하면, unit 형은 C#이나 C++ 같은 언어의 void 형과 비슷하다고 보면 돼요.

unit 형은 값이 딱 하나뿐이고, 그 값을 가리키는 게 바로 토큰 ()예요.

unit 값은 F# 프로그래밍에서 문법상 값이 필요한 자리인데 굳이 값이 필요 없거나 원하지 않을 때 그 자리를 채워 주는 데 자주 쓰여요. 대표적인 예시가 printf 함수의 반환값이에요.

printf가 하는 중요한 일은 어차피 함수 안에서(출력하는 과정에서) 일어나니까, 함수가 실제 값을 돌려줄 필요가 없어요. 그래서 반환값이 unit 형이 되는 거예요.

그리고 어떤 구조들은 unit 값을 기대하기도 해요. 예를 들어 do 바인딩이나 모듈 최상위에 있는 코드는 unit 값으로 평가되기를 기대해요.

만약 do 바인딩이나 모듈 최상위 코드가, 쓰이지도 않는 unit 값이 아닌 다른 결과를 만들어 내면 컴파일러가 경고를 알려줘요. 다음 예시를 볼게요.

let function1 x y = x + y
// The next line results in a compiler warning.
function1 10 20
// Changing the code to one of the following eliminates the warning.
// Use this when you do want the return value.
let result = function1 10 20
// Use this if you are only calling the function for its side effects,
// and do not want the return value.
function1 10 20 |> ignore

이 경고는 함수형 프로그래밍의 특징이에요. 그래서 다른 .NET 언어에서는 나타나지 않는 경고죠.

순수 함수형 프로그램에서는 함수에 부수 효과(side effect)가 없다 보니, 함수 호출의 결과값이 곧 함수가 남긴 유일한 결과예요. 그래서 그 결과를 그냥 무시해 버리면, 어쩌면 프로그래밍 실수가 아닐까 의심해 볼 만한 거예요.

물론 F# 자체는 순수 함수형 언어는 아니에요. 그래도 가능하면 함수형 프로그래밍 스타일을 따르는 게 좋은 습관이에요.

더 알아보기