[내일 배움 캠프 3주차] Child가 Parent처럼 받기 - 생성자

하얀요니콘·2025년 7월 18일
0

오늘도 Child가 Parent에서 받는 그런것을 설명한다. 빠르고 간단하지만 일단 방법부터 공유하도록 한다.

Parent를 새로운 Child처럼 만들기

다음 구조를 보자

Class Player
{
	//parameters
    Player() {};
    //methods
}

Class Mage : Player
{
	//additionalParameters
    Mage() {};
    //methods
}

다음과 같은 상황이 있다고 생각하자. 만약 이 상황에서 Player가 전직을 해서 Mage가 되었다고 생각해보자. 그러면 Mage를 생성할때 어떻게 해주어야 할까? 가장 간단하게 Player의 모든 인자를 복사 해주면 된다.

Mage(Player p)
{
	this.hp = p.hp
    this.mp = p.mp
    //.... 벌써 귀찮다
}

다음과 같은 생성자를 만들어 줄 수 있을것이지만, 파라미터를 하나하나 복사하려니 시간이 너무 오래 걸린다. 만약 Mage뿐 아니라 Warrior이나 Rouge같은걸로 전직 한다고 매번 생각하면 일이 복잡해진다.

우리는 저번 시간에 base를 배웠다. 놀랍게도 생성자도 이에 활용 가능하다. 우선 Player로 돌아가 새로운 생성자를 만들어 주자.

Player(Player p)
{
	this.hp = p.hp;
    this.mp = p.mp;
    //....
}

플래이어를 생성하기 위해 플레이어를 받아 데이터를 복사해주는 생성자이다. 자 이걸 이제 어떻게 활용하는지 보면, 전에 했던 방식과는 약간 다르게 구현이 된다.

Mage(Player p) : base(p)
{
	//additional parameter
}

자 우선 base(p)라는것이 Mage의 생성자 뒤에 붙었다. 이게 무엇인고 하니, 내부에서 선언이 일단 안되기는 하지만..

base, 즉 우리의 parent클래스인 Player의 생성자중 Player을 인자로 받는 Player(Player p)를 호출 해 주겠다는 것이다. 그러면 Mage도 결국 Player 이기 때문에 Player에 해당되는 내용들은 전부 Player(Player p) 의 생성자 연산처럼 진행이 놀랍게도 가능하다!
이제 내부에 추가 사항이나 변동 사항이 있다면 이 점들만 수정을 해 주면 된다.

물론 Player내부에서 일일이 복사를 해 줘야하는것은 맞지만, Warrior이나 Rouge같이 직업이 늘어나도 base(p) 한번만 달아주면 모두 간단히 생성을 할 수 있다.

profile
코딩공부용

0개의 댓글