Share via


가져오기 선언: open 키워드(F#)

가져오기 선언에서는 정규화된 이름을 사용하지 않고 해당 요소를 참조할 수 있는 모듈이나 네임스페이스를 지정합니다.

open module-or-namespace-name

설명

매번 정규화된 네임스페이스나 모듈 경로를 사용하여 코드를 참조하면 코드를 작성하고, 읽고, 유지 관리하기가 어려울 수 있습니다. 자주 사용되는 모듈과 네임스페이스에 대해 open 키워드를 대신 사용하면 해당 모듈이나 네임스페이스의 멤버를 참조할 때 정규화된 이름 대신 짧은 형식의 이름을 사용할 수 있습니다. 이 키워드는 C#의 using 키워드, Visual C++의 using namespace 및 Visual Basic의 Imports와 비슷합니다.

제공되는 모듈 또는 네임스페이스는 동일한 프로젝트에 있거나 참조 대상인 프로젝트 또는 어셈블리에 있어야 합니다. 모듈이나 네임스페이스의 위치가 이와 다르면 프로젝트에 대한 참조를 추가하거나 -reference 명령줄 옵션 또는 그 축약형인 -r 옵션을 사용할 수 있습니다. 자세한 내용은 컴파일러 옵션(F#)을 참조하십시오.

가져오기 선언을 사용하면 선언 뒤에 오는 코드에 이름을 사용할 수 있습니다. 이름을 사용할 수 있는 범위는 선언을 포함하는 네임스페이스, 모듈 또는 파일의 끝까지입니다.

여러 개의 가져오기 선언을 사용할 때는 각 선언을 개별 줄에 작성해야 합니다.

다음 코드에서는 open 키워드를 사용하여 코드를 간단하게 만드는 방법을 보여 줍니다.

// Without the import declaration, you must include the full
// path to .NET Framework namespaces such as System.IO.
let writeToFile1 filename (text: string) =
  let stream1 = new System.IO.FileStream(filename, System.IO.FileMode.Create)
  let writer = new System.IO.StreamWriter(stream1)
  writer.WriteLine(text)

// Open a .NET Framework namespace.
open System.IO

// Now you do not have to include the full paths.
let writeToFile2 filename (text: string) =
  let stream1 = new FileStream(filename, FileMode.Create)
  let writer = new StreamWriter(stream1)
  writer.WriteLine(text)

writeToFile2 "file1.txt" "Testing..."

열려 있는 여러 모듈이나 네임스페이스에 동일한 이름이 발견되어 모호성이 발생하더라도 F# 컴파일러에서는 오류나 경고를 발생시키지 않습니다. 모호성이 발생하면 F#에서는 더 최근에 열었던 모듈이나 네임스페이스에 참조 우선 순위를 부여합니다. 예를 들어 다음 코드에서 empty가 List 및 Seq 모듈에 둘 다 포함되어 있더라도 empty는 Seq.empty를 의미합니다.

open List
open Seq
printfn "%A" empty

따라서 이름이 같은 멤버를 포함하는 List나 Seq 같은 모듈 또는 네임스페이스를 열 때는 주의를 기울여야 합니다. 이 경우 정규화된 이름을 대신 사용하는 것도 좋은 방법이 될 수 있습니다. 가져오기 선언의 순서에 코드가 종속되는 상황은 발생하지 않도록 해야 합니다.

기본적으로 열리는 네임스페이스

일부 네임스페이스는 F# 코드에서 매우 자주 사용되므로 명시적 가져오기 선언이 없더라도 암시적으로 열립니다. 다음 표에는 기본적으로 열리는 네임스페이스가 나와 있습니다.

Namespace

설명

Microsoft.FSharp.Core

int 및 float 같은 기본 제공 형식에 대한 기본 F# 형식 정의를 포함합니다.

Microsoft.FSharp.Core.Operators

+ 및 * 같은 기본 산술 연산을 포함합니다.

Microsoft.FSharp.Collections

List 및 Array 같은 변경할 수 없는 컬렉션 클래스를 포함합니다.

Microsoft.FSharp.Control

지연 계산 및 비동기 워크플로 같은 제어 구문의 형식을 포함합니다.

Microsoft.FSharp.Text

printf 함수 같은 서식 지정된 IO의 함수를 포함합니다.

AutoOpen 특성

어셈블리에 AutoOpen 특성을 적용하면 어셈블리를 참조할 때 네임스페이스나 모듈이 자동으로 열리게 할 수 있습니다. 모듈에 AutoOpen 특성을 적용하여 부모 모듈 또는 네임스페이스를 열 때 해당 모듈이 자동으로 열리게 할 수도 있습니다. 자세한 내용은 Core.AutoOpenAttribute 클래스(F#)를 참조하십시오.

참고 항목

참조

네임스페이스(F#)

모듈(F#)

기타 리소스

F# 언어 참조