[Effective C#] 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라

2024. 8. 6. 09:00·독서/Effective C#
목차
  1. 한정자?
  2. New 한정자?
  3. New 한정자의 단점
  4. 그러면 언제 사용하는가?


한정자?

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#] 할당 구문보다 멤버 초기화 구문이 좋다  00 2024.08.08
[Effective C#] .NET 리소스 관리에 대한 이해  00 2024.08.07
[Effective C#] 박싱과 언박싱을 최소화하라  00 2024.08.05
[Effective C#] 이벤트 호출 시에는 null 조건 연산자를 사용하라  00 2024.08.03
[Effective C#] 델리게이트를 이용하여 콜백을 표현하라  00 2024.08.02
  1. 한정자?
  2. New 한정자?
  3. New 한정자의 단점
  4. 그러면 언제 사용하는가?
'독서/Effective C#' 카테고리의 다른 글
  • [Effective C#] 할당 구문보다 멤버 초기화 구문이 좋다
  • [Effective C#] .NET 리소스 관리에 대한 이해
  • [Effective C#] 박싱과 언박싱을 최소화하라
  • [Effective C#] 이벤트 호출 시에는 null 조건 연산자를 사용하라
태역
태역
  • 태역
    RYULAB
    태역
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 언어
        • C
        • C++
        • C#
      • 엔진, 프레임워크
        • Unity
        • Unreal
        • Electron
      • 공부
        • 디자인 패턴
        • 수학
        • CS
        • Git
        • 알고리즘
        • 자료구조
      • 코테
        • 프로그래머스
        • 백준
      • 독서 N
        • Effective C#
        • CLR via C#
        • 뇌를 자극하는 윈도우즈 시스템 프로그래밍
        • 오브젝트
        • CSAPP
        • OSTEP
        • 이득우의 게임 수학 N
      • 프로젝트
        • Unity
      • 개발 일지
        • 퓨처리티
        • 골든타임
      • 활동
        • 게임잼 후기
        • 게임제작동아리 브릿지
        • 크래프톤 정글
        • 기타
      • 기타
  • 블로그 메뉴

    • 링크

    • 공지사항

      • 2024 04 17
    • 인기 글

    • 태그

      인프런 #인프런강의후기 #게임개발 #게임개발강의 #인강후기 #강의후기 #게임개발자 #인프런강의
      오블완
      티스토리챌린지
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    태역
    [Effective C#] 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.