
한정자?
C#을 사용하고 있어도 한정자라는 단어가 어색할 수 있다. 일단 나는 어색했다. 한정자에 대해서 검색을 해봤는데 내가 알고 있는 다른 지식 중 하나였다. 한정자는 public, private, protected, internal, 등과 같은 키워드를 의미한다. 내가 접근 지시자라고 부르는 것들이다.
기타 한정자로 static, readonly, const, virtual, override, abstract, sealed, 등이 있다. 전부 사용을 해봤던 것들이지만 항상 단어로만 부르기 때문에 이 친구들을 묶어서 한정자라고 부르는 것을 처음 알았다.
New 한정자?
이번 게시글에서 작성할 New 한정자는 기본 클래스에서 상속된 멤버를 명시적으로 숨길 때 사용된다. 상속된 멤버를 숨기고 자식의 멤버로 대체할 수 있다. Base 클래스에서 재정의 가능하게 선언되지 않은 멤버를 수정하고 싶을 경우 New 한정자를 통해서 수정이 가능한 것이다.
// MS Docs
public class BaseC
{
public static int x = 55;
public static int y = 22;
}
public class DerivedC : BaseC
{
// Hide field 'x'.
new public static int x = 100;
static void Main()
{
// Display the new value of x:
Console.WriteLine(x);
// Display the hidden value of x:
Console.WriteLine(BaseC.x);
// Display the unhidden member y:
Console.WriteLine(y);
}
}
New 한정자의 단점
New 한정자를 잘못 사용한다면 본래 설계자가 의도한 방향과 다르게 사용될 수 있다. A 메서드를 통해서 기대하는 효과가 있었는데 A 메서드를 New 한정자를 통해서 수정해버린다면 기대하는 효과의 방향이 달라질 수 있는 것이다.
라이브러리를 사용한다면 재정의 가능한 함수는 설계자의 의도를 나타낸다. 설계자는 해당 부분을 수정할 것을 예상하고 있으며 파생 클래스에서 기본 클래스의 메서드 동작 방식을 변경하더라도 라이브러리의 기능에 문제가 없을 것을 보장하는 것이다. 하지만, New 한정자는 그런 것들을 무시하게 된다.
그러면 언제 사용하는가?
사용하고 있는 라이브러리에 기능이 추가되면서 기존 메서드와 명칭이 겹친다면 사용하는 것을 생각해보는 것을 권장한다고 한다.
'독서 > Effective C#' 카테고리의 다른 글
[Effective C#] 할당 구문보다 멤버 초기화 구문이 좋다 | 2024.08.08 |
---|---|
[Effective C#] .NET 리소스 관리에 대한 이해 | 2024.08.07 |
[Effective C#] 박싱과 언박싱을 최소화하라 | 2024.08.05 |
[Effective C#] 이벤트 호출 시에는 null 조건 연산자를 사용하라 | 2024.08.03 |
[Effective C#] 델리게이트를 이용하여 콜백을 표현하라 | 2024.08.02 |