반응형
728x170
이번엔 약간 처음볼 수도 있는 은닉, hiding에 대해서 알아보려고 한다.
알아보자
바로 무엇인지 정의해보자
자식의 멤버 와 부모의 멤버 간의 서로 메서드를 가리는 것을 의미한다.
-> 여기선 부모클래스의 메서드가 숨겨진다.
**오버라이딩, Overriding을 생각하면서 약간 조금 다르다고 생각하면 될 것 같다.
상속, 다형성에서 중복된 내용이지만 다시 따로 개념을 꺼내서 다룰 뿐이다.
즉, 부모 타입으로 자식 객체를 생성하는 경우가 잦은데
자식 메서드를 쓰고 싶어도 괜히 부모클래스의 메서드가 실행되니까
이런 기능을 이용하는 것이다.
자식 클래스에서 부모 클래스에서 정의된 이름이 같은 메서드가 정의되면서 부모 메서드를 숨기게 된다.
**사실 new 안써도 부모 메서드와 자식 메서드의 이름이 겹치면 자동으로 작동되지만 구분해야지.
**오버라이딩과의 가장 큰 차이점은 덮어쓰기처럼 아예 바뀌는 것이 아니라 언제든 다시 불러올 수 있다는 것이다.
예를 보면
using UnityEngine;
using System.Collections;
public class Humanoid
{
//부모 클래스의 Yell
public void Yell()
{
Debug.Log ("Humanoid version of the Yell() method");
}
}
그 아래 자식 클래스
using UnityEngine;
using System.Collections;
public class Enemy : Humanoid
{
//이렇게 선언할 경우 Humanoid의 Yell이 숨겨진다.
new public void Yell()
{
Debug.Log ("Enemy version of the Yell() method");
}
}
또 그 아래의 자식클래스
using UnityEngine;
using System.Collections;
public class Orc : Enemy
{
//또 이렇게 선언하면 Enemy의 Yell이 숨겨진다.
new public void Yell()
{
Debug.Log ("Orc version of the Yell() method");
}
}
??? 그럼 다숨겨지면 안 숨겨진.. Orc의 Yell만 실행된다는 건가??
그게 아니라.
using UnityEngine;
using System.Collections;
public class WarBand : MonoBehaviour
{
void Start ()
{
Humanoid human = new Humanoid(); // 부모 타입으로 부모 객체선언
Humanoid enemy = new Enemy(); //부모 타입으로 자식 객체선언
Humanoid orc = new Orc(); //부모 타입으로 자식 객체선언
//Notice how each Humanoid variable contains
//a reference to a different class in the
//inheritance hierarchy, yet each of them
//calls the Humanoid Yell() method.
human.Yell();
enemy.Yell();
orc.Yell();
}
}
만약 오버라이딩이었다면 Orc의 Yell만 실행되었을 것이지만
여기서는 타입에 따라 숨겨져있는 메서드를 부를 수 있다는 점에서
오버라이딩과 다르다.
참고링크
728x90
반응형
그리드형
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
Interface, 인터페이스 [Unity] (0) | 2021.03.28 |
---|---|
Overriding, 덮어쓰기, 오버라이딩 [Unity] (0) | 2021.03.27 |
Script lifecycle, 이벤트 함수의 실행 순서 [Unity] (0) | 2021.03.27 |
Polymorphism, 다형성 [Unity] (0) | 2021.03.26 |
상속, Inheritance, C# [Unity] (0) | 2021.03.25 |