using 키워드에는 널리 알려진 네임스페이스에서 정의된 형식을 가져오는 기능 이외에도 다양한 기능이 존재합니다. 공식 문서를 살펴보며 간단하게 살펴보겠습니다.
1. 개체가 삭제될 끝에서 범위를 지정 /* docs.microsoft.com/ko-kr/dotnet/api/system.idisposable?view=net-5.0 */
1) 이 인터페이스의 주요 용도는 관리되지 않는 리소스를 해제하는 것입니다.
2) 가비지 수집기는 창 핸들 또는 열린 파일 및 스트림과 같은 관리 되지 않는 리소스에 대해 알지 못합니다.
3) 따라서 가비지 수집기와 함께 관리 되지 않는 리소스를 명시적으로 해제합니다.
한번 더 설명하면 C#에서는 가비지 콜렉터가 작동하는데 항상 만능은 아닙니다. 따라서 명시적으로 리소스를 해제해야 할 때 using 키워드를 사용하여 IDisposable을 적용할 수 있습니다.
void ReadData() {
using(BinaryReader binaryReader = new BinaryReader(new FileStream(src, FileMode.Open))) {
int intNum = binaryReader.ReadInt32();
float floatNum = binaryReader.ReadSingle();
string stringData = binaryReader.ReadString();
bool boolData = binaryReader.ReadBoolean();
/* binaryReader.Close()가 자동 호출 */
}
}
위의 코드와 같이 using 문을 사용하면 자칫 실수하고 넘어갈 수도 있는 binaryReader의 리소스를 자동으로 해제할 수 있습니다.
2. 네임스페이스의 별칭 제작
간단하게 기존 네임 스페이스의 별칭을 제작하여 사용할 수 있는 기능입니다.
using PD = PersonalData;
class PersonalData
{
…….
}
위의 코드와 같이 using 문을 사용하면 PersonalData 대신 PD로도 클래스에 접근이 가능합니다.
3. using static 지시문 /* docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/using-static */
1) 일반적으로 정적 멤버를 호출하기 위해 멤버의 이름과 함께 형식 이름을 사용합니다.
2) 이러한 정적 멤버의 호출이 반복되는 경우 코드가 복잡하고 난해해질 수 있습니다.
3) 이때, using static 키워드를 사용하면 깔끔한 코드를 생성할 수 있습니다.
using System;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * Math.PI; }
}
public double Area
{
get { return Math.PI * Math.Pow(Radius, 2); }
}
}
-----------------------------------------------------
using System;
using static System.Math;
public class Circle
{
public Circle(double radius)
{
Radius = radius;
}
public double Radius { get; set; }
public double Diameter
{
get { return 2 * Radius; }
}
public double Circumference
{
get { return 2 * Radius * PI; }
}
public double Area
{
get { return PI * Pow(Radius, 2); }
}
}
위의 코드와 같이 반복적인 형식 이름의 접근이 사라졌습니다. 하지만 다중으로 using static 키워드를 사용했을 경우 각 클래스에서 같은 이름의 멤버들이 존재할 수도 있으므로 주위가 필요합니다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] String 문자열과 StringBuilder 오버헤드 계산 (0) | 2022.04.09 |
---|---|
[C#] 기본 데이터 형식 (0) | 2022.04.09 |
[C#] 직렬화(Serialization) (0) | 2021.04.02 |
[C#] Environment.CurrentDirectory와 Directory.GetCurrentDirectory의 차이 (0) | 2021.04.02 |
[C#, LINQ] 내부 조인과 외부 조인 (0) | 2021.03.31 |