다음을 통해 공유


연습: 첫 번째 F# 프로그램

Visual Studio 2010에는 F#이라는 새 프로그래밍 언어가 포함되어 있습니다. F#은 다중 패러다임 언어로서 함수형 프로그래밍과 기존의 개체 지향 프로그래밍 및 .NET 개념을 지원합니다. 다음 예제에서는 이 언어의 기능 및 구문 일부를 소개합니다. 예제에서는 단순한 변수를 선언하는 방법, 함수를 작성 및 테스트하는 방법, 튜플과 목록을 만드는 방법, 클래스를 정의하고 사용하는 방법을 보여 줍니다.

참고

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

새 콘솔 응용 프로그램을 만들려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  2. 템플릿 범주 창에서 Visual F#을 볼 수 없으면 다른 언어를 클릭한 다음 **Visual F#**을 클릭합니다. 중앙에 템플릿 창이 나타나고 이 창에 F# 템플릿이 나열됩니다.

  3. 위쪽에 템플릿 창에서 .NET Framework 4 대상 프레임워크 상자에서 나타나는지 확인합니다 찾습니다.

  4. 템플릿 목록에서 F# 응용 프로그램을 클릭합니다.

  5. 이름 필드에 프로젝트 이름을 입력합니다.

  6. 확인을 클릭합니다.

    솔루션 탐색기에 새 프로젝트가 나타납니다.

let 키워드를 사용하여 식별자를 선언하고 사용하려면

  • 다음 코드를 복사하여 Program.fs에 붙여 넣습니다. 식별자 anInt, aString 및 anIntSquared를 각각 값에 바인딩하게 됩니다.

    let anInt = 5
    let aString = "Hello"
    // Perform a simple calculation and bind anIntSquared to the result.
    let anIntSquared = anInt * anInt
    

    참고

    클래식 보기에서는 코드를 볼 수 없으면 머리글 항목 제목 아래에 언어 필터 F # 포함하도록 설정되어 있는지 확인하십시오.

F# 대화형 창에서 결과를 보려면

  1. 이전 절차에서 let을 선택합니다.

  2. 선택한 영역을 마우스 오른쪽 단추로 클릭한 다음 Interactive로 보내기를 클릭합니다. 또는 Alt+Enter를 눌러도 됩니다.

  3. F# Interactive 창이 열리고 let 식을 해석한 결과가 다음 줄과 같이 표시됩니다. 형식은 지정된 값으로부터 유추됩니다.

    val anInt : int = 5

    val aString : string = "Hello"

    val anIntSquared : int = 25

명령 프롬프트 창에서 결과를 보려면

  1. 다음 줄을 Program.fs에 추가합니다.

    System.Console.WriteLine(anInt)
    System.Console.WriteLine(aString)
    System.Console.WriteLine(anIntSquared)
    
  2. Ctrl+F5를 눌러 코드를 실행합니다. 다음 값을 포함하는 명령 프롬프트 창이 나타납니다.

    5

    Hello

    25

    이전 WriteLine 문의 식별자 이름인 anInt, aString 및 anIntSquared에 마우스 포인터를 놓으면 유추된 값을 확인할 수 있습니다.

함수를 정의 및 실행하려면

  1. let 식을 사용하여 다음 코드와 같이 제곱 값을 계산하는 함수를 정의합니다. 이 함수는 하나의 매개 변수 n을 가지며 n으로 전달된 인수의 제곱을 반환합니다.

    let square n = n * n
    // Call the function to calculate the square of anInt, which has the value 5.
    let result = square anInt
    // Display the result.
    System.Console.WriteLine(result)
    
  2. Ctrl+F5를 눌러 코드를 실행합니다. 결과로 25가 표시됩니다.

  3. 재귀적 함수에는 let rec 식이 필요합니다. 다음 예제에서는 매개 변수 n의 계승을 계산하는 함수를 정의합니다.

    let rec factorial n = 
        if n = 0 
        then 1 
        else n * factorial (n - 1)
    System.Console.WriteLine(factorial anInt)
    
  4. Ctrl+F5를 눌러 함수를 실행합니다. 결과로 5의 계승인 120이 표시됩니다.

목록 및 튜플 같은 컬렉션을 만들려면

  1. 값을 집계하는 방법 중 하나는 다음 코드와 같이 튜플을 사용하는 것입니다.

    let turnChoices = ("right", "left")
    System.Console.WriteLine(turnChoices)
    // Output: (right, left)
    
    let intAndSquare = (anInt, square anInt)
    System.Console.WriteLine(intAndSquare)
    // Output: (5,25)
    
  2. 값을 집계하는 다른 방법으로는 다음 코드와 같이 목록을 사용하는 것이 있습니다.

    // List of best friends.
    let bffs = [ "Susan"; "Kerry"; "Linda"; "Maria" ] 
    

    "cons" 연산자(::)를 사용하여 목록에 새로운 친구를 추가합니다. 이 연산은 bffs의 값을 변경하지 않습니다. bffs의 값은 변하지 않으며 변경할 수 없습니다.

    // Bind newBffs to a new list that has "Katie" as its first element.
    let newBffs = "Katie" :: bffs
    

    목록을 표시하려면 printfn을 사용합니다. printfn 함수는 구조화된 값에 포함된 개별 요소를 보여 줍니다.

    printfn "%A" bffs
    // Output: ["Susan"; "Kerry"; "Linda"; "Maria"]
    printfn "%A" newBffs
    // Output: ["Katie"; "Susan"; "Kerry"; "Linda"; "Maria"]
    
  3. 결과를 보려면 Ctrl+F5를 누르거나 코드 섹션을 선택한 다음 Alt+Enter를 누르면 됩니다.

클래스를 만들고 사용하려면

  1. 다음 코드에서는 Name 및 Age라는 두 가지 속성이 있는 Person 클래스를 만듭니다. Name은 읽기 전용 속성입니다. 함수형 프로그래밍에서 사용되는 대부분의 값과 마찬가지로 이 속성의 값 역시 변하지 않습니다. 가변 값이 필요한 경우 F#에서 이 값을 만들 수 있지만 이 경우 값이 변할 수 있음을 명시적으로 정의해야 합니다. 다음 클래스 정의에서 Age의 값은 변할 수 있는 지역 변수 internalAge에 저장됩니다. internalAge 값은 변경될 수 있습니다.

    // The declaration creates a constructor that takes two values, name and age.
    type Person(name:string, age:int) =
        // A Person object's age can be changed. The mutable keyword in the
        // declaration makes that possible.
        let mutable internalAge = age
    
        // Declare a second constructor that takes only one argument, a name.
        // This constructor calls the constructor that requires two arguments,
        // sending 0 as the value for age.
        new(name:string) = Person(name, 0)
    
        // A read-only property.
        member this.Name = name
        // A read/write property.
        member this.Age
            with get() = internalAge
            and set(value) = internalAge <- value
    
        // Instance methods.
        // Increment the person's age.
        member this.HasABirthday () = internalAge <- internalAge + 1
    
        // Check current age against some threshold.
        member this.IsOfAge targetAge = internalAge >= targetAge
    
        // Display the person's name and age.
        override this.ToString () = 
            "Name:  " + name + "\n" + "Age:   " + (string)internalAge
    
    
  2. 클래스를 테스트하려면 다음 코드와 같이 Person 개체를 두 개 선언하고, 필요에 맞게 변경하고, 결과를 표시합니다.

    // The following let expressions are not part of the Person class. Make sure
    // they begin at the left margin.
    let person1 = Person("John", 43)
    let person2 = Person("Mary")
    
    // Send a new value for Mary's mutable property, Age.
    person2.Age <- 15
    // Add a year to John's age.
    person1.HasABirthday()
    
    // Display results.
    System.Console.WriteLine(person1.ToString())
    System.Console.WriteLine(person2.ToString())
    // Is Mary old enough to vote?
    System.Console.WriteLine(person2.IsOfAge(18))
    

    다음 줄이 표시됩니다.

    Name: John

    Age: 44

    Name: Mary

    Age: 15

    False

F# 자습서의 다른 예제를 보려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  2. 템플릿 범주 창에서 Visual F#을 볼 수 없으면 다른 언어를 클릭한 다음 **Visual F#**을 클릭합니다. 중앙에 템플릿 창이 나타나고 이 창에 F# 템플릿이 나열됩니다.

  3. 위쪽에 템플릿 창에서 .NET Framework 4 대상 프레임워크 상자에서 나타나는지 확인합니다 찾습니다.

  4. 템플릿 목록에서 F# 자습서를 클릭합니다.

  5. 확인을 클릭합니다.

  6. 솔루션 탐색기에 자습서가 나타납니다.

다음 단계

함수형 프로그래밍에 대한 자세한 내용과 추가 예제를 보려면 함수를 고급 값으로 상승(F#)을 참조하십시오. 튜플, 목록, let 식, 함수 정의, 클래스, 멤버 및 기타 여러 항목에 대한 자세한 내용은 F# 언어 참조를 참조하십시오.

참고 항목

개념

Visual F# 2010의 새로운 기능

함수를 고급 값으로 상승(F#)

기타 리소스

Visual F#

F# 언어 참조