안녕하세요.


이번 시간 진도를 나가기 전에 예를 한가지 들겠습니다.


부모가 있고 자식이 있습니다. 부모는 자식에게 집안의 문화, 가치관, 밥상예절, 지식을 물려줍니다(상속해줍니다). 권력이 있는 집안이라면 권력도 물려줍니다. 자식은 자라면서 그러한 물려받는 것 외에 자신만의 것을 습득하여 부모보다 더 나은 사람이 됩니다.


갑자기 이런 예를 든 이유는 3탄에서 기존의 '슬라임'클래스를 물려받은(상속받은) '블루슬라임'클래스를 만들어볼 것이기 때문입니다. 슬라임 클래스가 부모의 위치고 블루슬라임 클래스가 자식의 위치입니다. 자식 클래스는 부모 클래스의 변수와 메서드를 상속받아서 기본적으로 가지고 있습니다. 거기다가 추가적으로 자신만의 변수나 메서드를 가질 수 있습니다. (상속의 예로, 돈 같은 물질이 아니라 무형 자산을 예로 든 이유는 물질은 부모가 자식에게 상속해주는 순간 부모는 그것을 잃게 되기 때문입니다. 부모 클래스가 자식 클래스에게 변수와 메서드를 상속해 주는 것은 그것을 '복사'해주는 것이기 때문에 무형 자산을 예로 드는게 더 적합해 보입니다. 그리고 현실세계의 상속은 부모가 사망시에 일어나지만 클래스의 경우에는 사망과는 무관합니다.)


블루슬라임 클래스를 만들기 전에 간단한 거 하나 만들어보고 진행합시다.




자, 지난시간에 만들었던 horse 클래스를 살짝 수정했습니다. 이름 변수를 가지고 있고, 생성자는 받아온 이름을 이름 변수에 넣는 내용이고, 달리는 함수가 있네요.


이제 이 클래스를 부모로 하여 자식 클래스를 만들어보겠습니다. 부모-자식이라고 해서 두 클래스 사이에 혈연관계가 있어야 될 필요는 없습니다. 사실, 부모-자식 보다는 오리지날-확장이 더 어울리는 경우가 많습니다. 아래를 보시죠.




여태까지는 java파일 하나에 클래스 하나씩 만들어줬는데 사실은 여러 클래스를 만들어줄 수 있습니다. (단, 두번째 클래스부터는 앞에 public이 붙으면 안됩니다)


빨간테두리를 보시면 유니콘 클래스가 코딩되어 있습니다.


21행부터 보시죠.



class 자식 클래스 extends 부모 클래스



이런 형태입니다. extend의 뜻은 확장인데 자식 클래스는 부모 클래스에다가 변수나 메서드를 추가하여 클래스를 확장시킨다는 의미에서 확장입니다. 영어를 해석하면 '클래스 유니콘은 확장한다 말을' 이렇게 되겠네요.


25-27행은 생성자군요. 생성자는 상속이 되지 않기 때문에 적어줘야 합니다. 근데 생성자 내용이 name = n 이 아니네요?!



super(n)



새로운 단어가 등장했네요. 사실, 자식 클래스의 생성자는 무조건 부모 클래스의 생성자를 호출해야된다는 법칙이 있습니다. 


지난시간에 같은 클래스 내의 다른 생성자 호출할때 this()를 썼었죠? 부모 클래스의 생성자를 호출할때는 super()를 사용합니다.


자식 입장에서 부모님은 슈퍼맨처럼 보이잖아요?ㅎ


인수에다가 이름을 넣어주면 최종적으로 name 변수에 들어갑니다.



자, 여기서 퀴즈 하나 내겠습니다. 유니콘 클래스가 가지고 있는 변수와 함수를 모두 열거해보세요~


fp 변수와 생성자 함수와 비행 함수 밖에 없다구요? 노노. 눈에 보이진 않지만 부모로부터 상속받은 name 변수와 달리기 함수도 갖고 있습니다^^




정말 그렇죠? ㅎ


다음 시간에는 블루슬라임 클래스를 만들어보겠습니다.


감사합니다.

+ Recent posts