안녕하세요.

 

일단 지난시간에 짜놓은 코드를 봅시다.

 

블루슬라임 클래스는 슬라임 클래스의 어택 함수를 상속받아서 소유하고 있습니다. 인간의 체력을 10감소시킵니다. 

그런데 블루슬라임은 체력회복 스킬도 있으니 좀 밸런스가 맞지 않는다는 느낌이 들어서 어택 함수를 좀 약하게 수정하고 싶습니다. 그렇다고 해서 슬라임 클래스의 어택함수를 수정하게 되면 모든 종류의 슬라임이 영향을 받게 되는 문제가 생깁니다. 다른 종류의 슬라임에는 영향이 안가고 블루슬라임만 공격력을 낮추고 싶을 땐 어떻게 하면 될까요?

 

아래를 보시죠.

 

답은 간단합니다. 블루슬라임 클래스에다가도 어택 함수를 만들어주고 적절한 내용을 적어주면 되는거죠. (인간의 체력을 8 감소시키도록 했습니다)

 

이처럼 자식 클래스 속에 부모 클래스로부터 상속받은 함수를 일부러 적어서 내용을 바꾸는 것을 오버라이드라고 합니다. 이렇게 되면 해당함수를 실행했을때 자식 클래스의 함수가 실행됩니다.(어택 함수 실행시 체력 8 감소) 오버라이드된 함수가 더 우선인거죠. (오버라이드의 사전적 의미를 찾아보면 "우선하다"라는 뜻이 있습니다.)

 

오버라이드... 우선하다... 잘 안외워지신다구요? '오버라이드는 오버라이트(over write. 덮어쓰기) 같은 거다' 는 어떤가요? 부모 클래스의 함수를 자식 클래스의 함수가 덮어쓰는거죠.

 

47행의 행번호 왼쪽에 초록색 삼각형 보이시나요? 오버라이드된 함수라는 표시입니다.

 

 

오버라이드된 함수는 위의 47행 처럼 함수문장 위에 @오버라이드 라고 적어주는게 좋습니다. 오버라이드 되었다는 것을 좀 더 명확하게 알 수 있죠. 그리고 한가지 순기능이 더 있는데 예를들면,

 

 

위에 처럼 실수로 attack의 t를 하나 빼먹은채로 함수를 만들었다고 칩시다. 이렇게 되면 블루슬라임은 attack 함수도 가지고 있고 atack함수도 가지고 있는 상태가 됩니다. 개발자는 메인함수에서 bs1.attack(h1)라고 적었는데 인간의 체력이 10 깎이는 걸 보고 혼란속에 빠지게 되는 상황이 벌어질 수 있습니다.

 

 

하지만 위에처럼 @오버라이드 라고 해놓으면 함수 이름이 잘못되었을 때 에러라고 표시를 해줍니다. 부모 클래스에 atack이라는 함수가 없으므로 오버라이드 할 수 없다는 에러죠.

감사합니다.

+ Recent posts