본문 바로가기
뉴렉처 과정 기록 (Backend)/JAVA

03/31 JAVA 상속(IS A, Override)

by yeonee3219 2021. 3. 31.

 

 

 

복습

 

 

 

 

 

 

 

현재 LottoConsole이 lotto를 has a 한 상태

 

 

print() 함수를 분리한 이유 ? -> print는 콘솔용 함수이기 때문에?

 

 

 

 

 

어제 배웠던 상속

 

 

 

 

 

 

 

 

 

새로운 함수 등장 -> 프레임의 역할을 갖는다

 

 

 

 

true 인자받고 run할 경우 오른쪽 사진과 같은 윈도우 프레임 창 나온다

프레임 창 끄려면 강제종료 해줘야 함!!

 

 

 

 

 

 

 

 

 

 

 

 

Is A 상속

 

 

 

 

Lotto 클래스를 다시 사용할 때, 조금 고쳐써야 하는 일이 생긴다면

 

1. 새로 만들어서 새로만든걸 고쳐쓰거나

2. 기존의 것을 가져와서 조금 수정해서 고쳐쓰는 방법

 

 

고쳐쓸 때도 Lotto를 이용하여 고쳐 쓰는 관계 (Is A) <-> 그대로 가져와서 쓰는 부품과 제품 관계 (Has A)

 

 

동일한 부품을 만드는데 기존의 부품이 쓸만하다면 그걸 가져와서 고쳐쓰면 -> Is A 관계

 

 

 

 

 

 

 

 

예시로 좀 더 살펴보자

 

아이언봇을 만들려고 한다

 

Has A 

 

아이언봇을 만들 때 필요한 부품들이 그대로 있다면 그것을 그대로 has A 상속받아서 제품을 만들 수 있다

 

 

 

그런데 몸통 부품을 구할 수 없다면!

 

비슷한 부품을 찾게 되었을 경우 -> 부품이 아닌 틀로 사용해서 필요한 것으로 만들면 돼!

 

 

 

몸통 부분의 틀을 구해 가운데 소켓?을 부착해서 만들 수 있다 -> is a 상속했다

 

 

 

 

 

 

 

 

만약에 소켓만 없고 다 완성이 되어있는 로보트가 있다면?

 

틀을 가져다가 고쳐서 쓰는 상속 관계

 

로보트를 틀로 이용해서 소켓만 부착해 아이언봇 완성할 수 있다 -> is a 상속만을 이용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

다시 로또로 돌아가서...

 

 

 

 

 

 

 

상속.IS_A 에서는 기존의 Lotto 클래스가 (기본으로) 필요한데.. 역정렬이 가능한 함수가 있으면 좋겠다!

 

 

 

 

 

Lotto2에서 필요한 Lotto 틀을 extends 하기! -> 메인에서 Lotto틀에 있는 함수를 사용할 수 있게 된 것을 알수 있다

 

 

 

 

 

 

역정렬 기능 추가

 

 

 

기존의 정렬기능을 수정 -> Override메소드라 한다

 

 

 

 

 

 

 

 

 

-> 그렇담 메모리 상에서 어떻게 생성되는가, 생성자는 어떻게 생성되는가?

 

 

 

 

 

 

 

 

 

 

성적데이터 가지고 상속 이용해보자

 

Exam 클래스에 있는 세가지 과목 말고 컴퓨터 과목이 더 필요하다 (Exam 손대지 말고 새로 만들어보기)

 

 

 

 

 

 

일단 Exam을 is a 상속받는 NewExam 생성

 

 

 

 

NewExam 클래스에 컴퓨터 과목 추가해주자

 

 

30이 나온다

왜?  현재 total() 함수에는 컴퓨터과목이 추가되지 않았으므로 30이 나오는게 당연

 

 

 

 

 

 

 

 

 

 

super 는 상속받고 있는 부모에 대한 객체명

 

 

여러가지 용어들을 사용하게 된다 -> 용어를 외울필요는 없고 그 의미만 알고 식별만 되면 되겠다

 

 

 

부모 이전의 상속관계 (부모의 부모) 는 신경쓰지 않는다 -> super와 this 뿐

 

 

 

 

 

 

 

 

슈퍼의 생성자가 호출된 것 / 오른쪽 사진의 super()는 명시적으로 생성자 호출해본 것 -> super()가 없어도 묵시적으로 실행해줬다고 볼 수 있겠다

 

생성자는 맨 처음에만 한번만 호출 될 수 있어야 한다 

따라서 바로 위 사진처럼 순서가 뒤바껴 사용할 수 없다

 

 

 

 

 

 

 

 

컨트롤 스페이스 누르면 오버라이드 가능한 부모의 함수들을 볼 수 있다

 

 

 

자 그렇다면,

부모의 total 함수 오버라이드 해서 고쳐보자

 

 

 

부모의 total() 함수에 컴퓨터 과목도 함께 추가하도록 오버라이드 해주었다 -> 값이 잘 나옴

 

 

 

 

평균도 4로 나눠야 함! 고쳐보기

 

 

total()과 avg()함수를 Override 해주었다

 

 

 

 

 

 

 

 

 

다음시간

-> 생성자 오버로드