ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 객체지향(7) - IS A 상속, 오버라이드
    JAVA 2021. 3. 17. 17:46

    안녕하세요~

    www.youtube.com/watch?v=cZ4MDXz0ipU&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=15

    이번 포스팅은 위의 강의를 바탕으로 정리한 내용입니다. 

     

     

     IS A 상속이란 무엇일까요

     

    복잡한 정의보다 위의 사진을 보면서 알아가 보도록 합시다!

     

    왼쪽과 같은 로봇을 만든다고 했을 때, has a 상속은 로봇의 부품을 가져다 쓰는 것을 말합니다.

    즉 has a 상속을 받아 머리 팔 다리 등을 가져올 수 있습니다.

     

    하지만 is a 상속을 받은 몸통은 왼쪽의 몸통과 다르게 몸통의 틀만 존재합니다.

     

    즉, is a 상속이란 어떤 일정한 틀을 불러오는 것이라고 말할 수 있습니다.

     

    is a 상속만 받고 끝나는 것이 아니라, 그 속에서 완성된 부품으로 될 수 있게 추가적인 작업을 해야 한다는 것이죠.

     

    is a 상속을 한다는 것은 그것과 흡사한 틀이 있다는 것이고, 틀이 크면 클 수록 생산성이 높아지게 됩니다.

     

    이제 구체적으로 어떻게 is a 상속을 할 수 있는지 알아보도록 합시다!

     

     

     

     

    Program파일에서 NewlecExam 클래스를 이용해 exam이란 객체를 생성해 줍니다.

     

     

    Exam 파일을 extends 했고, 불러와 줍니다.

     

     

     

    is a 상속을 받았으니, 기존 국어,영어,수학 점수 말고 다른 컴퓨터 점수를 입력 후 출력해보는 코딩을 해보겠습니다.

    com의 변수를 설정한 후에, getter,setter를 설정해 줍니다.

     

     

     

    위와 같이 국,영,수,컴 과목의 점수를 10점으로 설정하였지만 총합의 결과는 30이 뜹니다.

    이는 컴퓨터의 점수의 값이 계산이 안된 결괏값입니다.

     

    왜 이렇게 작동할까요? 

     

    왜냐면 Exam에서는 com을 포함하는 알고리즘이 없기 때문이죠!

     

    그렇다면 어떻게 해결해야 할까요?? 효율적인 방법을 같이 생각해봅시다..

     

     위에서 NewlecExam();   은 객체를 2개 생성해야 합니다.

     

    1번째로 Exam객체의 국, 영, 수

    2번째로  NewlecExam의 객체

    또한 super라고 하는 것은 상속받은 객체만을 선택할 수 있게 하는 것이라고 생각하면 되겠습니다.

    강의안

     

     

     

    그리고, 함수를 호출하는 과정은 아래와 같이 진행됩니다.

    강의안

    System.out.println(exam.total()); 에서 

     

    exam.total()을 처리하는 과정은  

    1. NewlecExam.total();를 먼저 처리한다. 

    2. Exam.total(); 를 2번 째로 처리한다.

     

    만약 1번이 비어있을 경우, 2번 과정으로 진행이 됩니다. 위에서 컴퓨터 과목을 추가하고 total값을 출력해도 com의 점수가 나오지 않았던 이유입니다.

     

    이때 오버라이드라는 개념이 나오게 됩니다.

    오버라이드 함수는 부모의 기능을 가리는 메서드입니다. 재정의하고, 잘못된 부분을 고칠 수 있는 특징이 있습니다.

     

     

    컨트롤 + 스페이스를 누른 후 toString()이라는 오버라이드 메서드를 만들어 봅시다!

     

     

    total()의 return값으로 

    super.total() + com;을 입력해 줍니다.

     

    여기서 주의할 점은 this.total() +com; 을 입력하면  this는 NewlecExam을 뜻하기 때문에 무한루프에 빠진다고 합니다.

    위의 개념에서 super는 부모 클래스를 의미한다고 했으니 super를 사용합시다!

     

    그 후, 평균값 또한 오버라이드 해야겠습니다. 왜냐면 total()의 값이 바뀌었고, 과목이 하나 추가되었기 때문입니다.

     

    완. 성

     

    마지막 테스트를 해보고 마무리하겠습니다

     

     

    이번 포스팅을 정리해 보겠습니다!

     

     

    1.IS A라는 것의 개념에 대해 배웠습니다.

    IS A 상속이란 사용자가 부품을 만들기 위해서, 부품과 비슷한 틀을 가지고 오는 것을 뜻합니다.

     

     

    2. super라는 개념을 배웠습니다

    super란 부모 클래스의 객체를 뜻합니다.

     

     

     

    3. 오버라이드 메서드에 대해 배웠습니다.

    오버라이드 메서드란 작성된 부모, 자식 클래스의 함수 중 우선순위가 자식 클래스이므로

    자식 클래스에서 메서드를 재정의하는 것을 뜻합니다.

     

     

     

     위의 3가지 개념은 꼭 알고 넘어가도록 합시다!

     

    (혹시 틀린 개념이 있으면 댓글로 알려주시면 감사하겠습니다ㅜㅜ)

    댓글

Designed by Tistory.