변수에 같은 이름을 사용하면 이름 사이에 충돌이 발생하게 됩니다. 이러한 것을 이름 재사용이라 부르면 다음과 같은 종류가 있습니다.
- 오버로딩(Overloading)
- 오버라이딩(Overriding)
- 섀도잉(Shadowing)
- 하이딩(Hiding)
하나씩 알아보도록 하겠습니다.
[섀도잉]
Class Program
{
public static int number = 01;
static void Main(string[] args)
{
int number = 20;
Console.WrtieLine(number);
}
}
/*
[실행 결과]
20
*/
C언어 기반의 프로그래밍 언어의 대부분은 변수 이름이 겹칠 때 자신과 가장 가까운 변수를 사용하게 되어 있습니다.
이렇게 특정한 영역에서 이름이 겹쳐서 다른 변수를 가리는 것을 섀도잉(Shadowing)이라 표현합니다.
[하이딩]
부모 클래스와 자식 클래스 사이 동일한 이름으로 멤버를 만들면 하이딩(Hiding)이라 표현합니다.
변수 하이딩과 메서드 하이딩에 대해 알아보도록 하겠습니다.
<변수 하이딩>
class Program
{
class Parent
{
public int variable = 123;
}
class Child : Parent
{
public string variable = "shadowing";
}
static void Main(string[] args)
{
Child child = new Child();
Console.WriteLine(child.variable);
}
}
/*
[실행 결과]
shadowing
*/
이전과 마찬가지로 자신과 가장 가까운 것을 사용하게 됩니다. 이렇게 하이딩을 사용하게되면 정상적인 상속을 막을 수 있게 됩니다.
여기서 만약 부모의 int 자료형을 사용하고 싶다면 부모로 자료형을 변환하고 사용하면 됩니다.
static void Main(string[] args)
{
Child child = new Child();
Console.WriteLIne(((Parent) child).variable);
}
<메서드 하이딩>
class Program
{
class Parent
{
public void Method()
{
Console.WriteLine("부모의 메서드");
}
}
class Child : Parent
{
public void Method()
{
Console.WriteLine("자식의 메서드");
}
}
static void Main(string[] args)
{
Child child = new Child();
child.Method();
((Parent)child).Method();
}
}
이런 식으로 코드를 작성하면 정상적으로 작동합니다. 하지만 개발 환경을 보면 'Child.Method()는 상속된 Parent.Method() 멤버를 숨깁니다. 숨기려면 new 키워드를 사용하십시오' 라는 문구가 뜹니다.
이 말은 Method() 메서드가 하이딩 되었다는 말입니다.
다음 장에서 살펴보도록 하겠습니다.
'C# > 클래스와 객체지향' 카테고리의 다른 글
C# 클래스와 객체지향 - 17. 상속과 오버라이딩 제한 (0) | 2024.05.29 |
---|---|
C# 클래스와 객체지향 - 16. 하이딩과 오버라이딩 (0) | 2024.05.29 |
C# 클래스와 객체지향 - 14. 상속의 생성자 (0) | 2024.05.28 |
C# 클래스와 객체지향 - 13. 클래스 자료형 변환 (1) | 2024.05.28 |
C# 클래스와 객체지향 - 12. 클래스(키워드) (0) | 2024.05.28 |