.NET API(Application Programing Interface)
C#이 사용할 수 있는 API 집합체인 닷넷(닷넷 프레임워크와 닷넷 코어)에는 굉장히 많은 API들이 있습니다.
이번에는 .NET에 내장된 여러가지 유용한 클래스들을 찾고 사용할 수 있는 방법에 대해 설명합니다.
> // .NET API Browser: https://learn.microsoft.com/en-us/dotnet/api/
.NET API 탐색기
Microsoft는 .NET API 탐색기를 제공하여 웹에서 모든 API에 대한 검색을 제공합니다. 다음 경로에서 .NET API 탐색기를 실행할 수 있습니다.
그림: .NET API 탐색기
Reference Source
.NET의 공개된 소스 코드를 보려면 Microsoft의 Reference Source 사이트를 참고하면 됩니다.
클래스, 구조체, 열거형, 네임스페이스
닷넷에서 제공하는 대부분의 API는 클래스입니다. 이에 추가해서 구조체, 열거형이 있고 이러한 클래스, 구조체, 열거형을 특정 이름으로 묶어서 관리해주는 네임스페이스가 있습니다.
클래스(Class)
Console
클래스, String
클래스와 같이 우리가 사용하는 거의 대부분이 클래스입니다. 클래스에 대해서는 계속해서 알아보겠습니다.
구조체(Struct)
DateTime
구조체, TimeSpan
구조체 형태로 표현되며 클래스와 거의 동일하게 사용됩니다.
열거형(Enumeration)
Color
열거형 등이 있으며 특정 목록을 관리할 때 편리함을 제공합니다.
네임스페이스(Namespace)
System
네임스페이스처럼 많은 양의 클래스와 구조체 그리고 열거형 등을 묶어 관리합니다.
Math 클래스
닷넷에서 제공하는 수학 관련 내장 클래스인 Math
클래스에는 다음과 같은 기능들을 제공합니다. 더 많은 기능들은 Microsoft Learn 온라인 설명서를 참고하세요.
Math.E
: 자연 로그 상수 값 출력Math.PI
: 원주율 출력Math.Abs()
: 절댓값 출력Math.Max()
: 최댓값 출력Math.Min()
: 최솟값 출력Math.Pow()
: 거듭제곱 출력Math.Ceiling()
메서드: 지정된 10진수보다 크거나 같은 정수 값 반환- Decimal 환경에서는
Decimal.Ceiling()
형태로 사용 가능
- Decimal 환경에서는
Math.Floor()
메서드: 지정된 10진수보다 작거나 같은 최대 정수 값 반환- Decimal 환경에서는
Decimal.Floor()
형태로 사용 가능
- Decimal 환경에서는
C# 응용 프로그램을 제작할 때 자주 사용되는 수학 관련 메서드의 기능을 알아보겠습니다. 원본 소스는 MathDemo.cs 파일에 있습니다. C# Interactive를 실행하고 아래 내용을 단계별로 실행해 보세요.
Math.E
를 통해서 자연 로그 상수를 출력할 수 있고, Math.PI
를 통해서 원주율을 출력할 수 있습니다.
> $"자연 로그: {Math.E}"
"자연 로그: 2.71828182845905"
> $"원주율(PI): {Math.PI}"
"원주율(PI): 3.14159265358979"
Math.Abs()
로 절댓값을 구합니다.
> $"-10의 절댓값: {Math.Abs(-10)}"
"-10의 절댓값: 10"
Math
클래스의 Max()
메서드와 Min()
메서드를 통해서 두 수 중에서 큰 값과 작은 값을 구할 수 있습니다.
> Math.Max(3, 5)
5
> Math.Min(3, 5)
3
Math.Pow()
메서드는 거듭 제곱을 구할 때 사용됩니다.
> $"거듭제곱: 2의 10제곱: {Math.Pow(2, 10)}"
"거듭제곱: 2의 10제곱: 1024"
Math.Round()
메서드로 특정 자리에서 반올림할 수 있습니다.
> $"3.15를 소수점 둘째자리에서 반올림: {Math.Round(3.15, 1)}"
"3.15를 소수점 둘째자리에서 반올림: 3.2"
추가로, Math
클래스의 Round()
, Ceiling()
, Floor()
메서드를 사용하면 반올림, 올림, 내림을 쉽게 구할 수 있습니다.
> Math.Round(1.1F)
1
> Math.Ceiling(1.1F)
2
> Math.Floor(1.1F)
1
다음 코드와 같이 Math
클래스의 Sqrt()
함수(메서드)는 9라는 값을 매개 변수로 입력하면 무조건 3을 반환하는 함수입니다. 이러한 함수는 몇 번을 실행해도 매개 변수가 동일하다면 동일한 결과를 반환하기에 순수 함수(Pure Function)라고 합니다.
> Math.Sqrt(9)
3
> Math.Sqrt(9)
3
참고로, 앞으로 배울 랜덤값을 반환하는 Random
클래스의 Next()
메서드는 비순수 함수(Impure Function)라고 합니다. 매개 변수가 없이 매번 실행할 때마다 서로 다른 값이 나오는 비순수 함수입니다.
> (new Random()).Next()
1552527668
> (new Random()).Next()
700201841
이번 예제를 통해서 알아본 기능들 외에 Math
클래스의 멤버를 인텔리센스에 의해서 알아보면 더 많은 멤버가 나타납니다. 이러한 내용들은 Microsoft Learn 사이트를 통해서 추가로 살펴보면 좋습니다.
Math
클래스와 using static
구문 함께 사용하기
Console
클래스와 마찬가지로 Math
클래스도 using static
구문을 사용하여 줄여서 표현할 수 있습니다.
이번에는 using static
지시문을 사용해보겠습니다.
코드: UsingStaticClassesDemo.cs
using System;
using static System.Console;
using static System.Math;
class UsingStaticClassesDemo
{
static void Main()
{
//[1] 기본 사용 방식
WriteLine(Math.Pow(2, 10));
//[2] using static 지시문에 의한 줄임 표현
WriteLine(Pow(2, 10));
WriteLine(Max(3, 5));
}
}
1024
1024
5
여러 번 Console
클래스와 Math
클래스를 사용한다면 using static
구문을 통해서 생략하여 코드를 간결하게 유지할 수 있습니다.
클래스 또는 메서드 이름을 문자열로 가져오기: nameof
연산자
프로그래밍에서 클래스 또는 메서드 이름 자체를 문자열로 사용할 필요가 있습니다. 이때에는 nameof
연산자를 사용하여 문자열로 가져올 수 있습니다. nameof
연산자는 특정 변수, 메서드, 속성에 대한 이름 자체를 문자열로 가져올 때 사용됩니다.
Console
클래스 또는 WriteLine
메서드를 nameof()
연산자로 묶으면 문자열로 반환해줍니다.
> nameof(System)
"System"
> nameof(Console)
"Console"
> nameof(Console.WriteLine)
"WriteLine"
사실, nameof
연산자는 C# 공부할 때에는 왜 필요한지 큰 느낌이 없습니다. 나중에 ASP.NET Core 프로젝트 등에서 이 연산자를 만나게되면 "아 이렇게 사용하면 편리하겠구나!"의 느낌을 그때 가서 얻으셔도 충분합니다.
장 요약
닷넷에서 제공하는 API는 너무나도 많습니다. 하지만, .NET API 탐색기를 사용하면 필요한 API에 대한 도움말을 얻을 수 있습니다. 그리고 이 강의를 통한 C#의 학습이 유용한 이유는 흩어져 있는 API를 학습 난이도에 맞게 순서를 정해서 단계별로 학습하게 도와주기 때문입니다. 자, 계속해서 수많은 API들을 학습해나가겠습니다.
.NET API 유튜브 실시간 강의 데모 코드
> //[1] System.Math Class
> // Static Member
> Math.PI
3.1415926535897931
>
> Math.Max(5, 3)
5
>
> Math.Abs(-10)
10
>
> //[2] System.Random Class
> // Instance Member
> Random random = new Random();
> random.Next(1, 11)
4
> random.Next(1, 11)
3
> Random dice = new Random();
> dice.Next(1, 7)
1
> dice.Next(1, 7)
3
> var dice = new Random();
> dice.Next(1, 7)
6
>