Christmas Pikachu 22/05/27 JAVA (class - 상속, 오버라이딩, 다형성)
Java

22/05/27 JAVA (class - 상속, 오버라이딩, 다형성)

ZI_CO 2022. 5. 29.

<상속>

상속이란?

 

쉽게 말해 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 된다.

 

상속을 하는 이유는 간단하다. 이미 마련되어 있던 클래스를 재사용해서 만들 수 있기 때문에 효율적이고, 개발 시간을 줄여주게 때문이다.

상속을 하더라도 자식 클래스가 부모의 모든 것들을 물려받는 것은 아니다.

  • 부모 클래스의 private 접근 제한을 갖는 필드 및 메소드 자식이 물려받을 수 없다. (priavate = 공유가 안됨)
  • 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다
    (default 접근 제한은 ‘같은 패키지에 있는 클래스’만 접근이 가능하게끔 하는 접근 제한자이기 때문입니다.)
  • 그 이외의 경우는 모두 상속의 대상이 됩니다.

<상위클래스> = 부모클래스

Animal이라는 상위클래스에 동물이 움직이는 글을 출력하는 move()라는 메소드가 있다. 이 메소드를 하위클래스가 상위클래스에 있는 메소드를 쓸수 있도록 상속을 시켜줄것이다.

<하위클래스> = 자식클래스

밑에있는건 Human이라는 클래스 즉 상위클래스를 상속받은 하위클래스이다

하위클래스로 상속을 받으려면 public class Human뒤에 한칸띄우고  Ctrl + 스페이스바를 눌러준다. 그러면 extends가 활성화를 시킬수있다 extends뒤에 부모클래스를 입력해주면 상위클래스를 상속받은 하위클래스가 된다.

 

하위클래스 안에서 그하위클래스명에 맞는 사용할 메소드들이 있을것이다  하지만 그메소드명이 상위클래스 메소드명과 같으면 쓸수가 없다 하지만 Override(오버라이딩)을 써서 상위클래스에 있는 메소드명을 쓸수가 있다.

 

오버라이딩(재정의)

오버라이딩(재정의)이란? 

부모클래스로부터 상속받은 하위클래스에서 메소드를 재정의해서 다시 사용하는 기법이다.

즉, 부모님에게 상속받은 물건을 내가 원하는대로 바꿔서(재정의) 다시 돌려준다.라고 생각하면 된다.

내가 원하는대로 꾸며서 돌려드린거기 때문에 부모님에게 받은것도 원상태도 아닌 재정의된 새로 생긴 물건인 것이다.

Human 클래스에서 ctrl + space를 누르면 아래와 같이 오버라이딩 표시(상위클래스에서 사용할 메소드명) 가 되는데 이를 누르면 오버라이딩을 할 수 있다.

 

 

그렇게 Override가된 메소드는 상위클래스에서 사용되는 메소드가아닌 하위클래스에서 쓰는 메소드가 되는것이다.

 

Override 사용할 때 주의할 점

오버라이딩과 오버로딩이 단어가 비슷해서 반대로 생각해서 착각하는경우가 많아 완전히 다른 의미이다.

오버로딩은 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야한다. 주의할 것은 리턴 값만 다른 것은 오버로딩을 할 수 없다는 것이다. 

 

 

<다형성>

다형성(polymorphism)이란? 

부모 - 자식 상속 관계에 있는 클래스에서 상위 클래스가 동일한 메세지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리이다.

다형성을 활용한 부모 클래스가 자식 클래스의 동작 방식을 알수 없어도 오버라이딩을 통해 자식 클래스를 접근할 수 있다.

 

그렇다면 어떻게 부모가 자식이 어떤일 하는 지 몰라도, 자식 멤버 함수를 호출을할까?

그 이유는 동적 바인딩 때문이다.

동적바인딩이란 메서드가 실행 시점에서 성격이 결정되는 바인딩이다. 

프로그램의 컴파일 시점에서 부모 클래스는 자신의 멤버 함수밖에 접근할 수 없으나, 실행 시점에서 동적 바인딩이 일어나 부모클래스가 자식 클래스의 멤버 함수를 접근하여 실행할 수 있다.

 

 

다형성의 장점

1. 유지보수가 쉽다.

2. 재사용성 증가

3. 느슨한 결합

 

 

다형성 필수 조건

1. 상속 관계

-- 다형성을 활용하기 위해서는 필수로 부모 - 자식 간 클래스 상속이 이루어져야 한다.

 

2. 오버라이딩 필수 (자식 클래스에서 메소드 재정의) 

-- 다형성이 보장되기 위해서는 하위 클래스 메소드가 반드시 재정의되어 있어야 한다.

 

3. 업캐스팅 (자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것)

-- 부모 타비으로 자식클래스를 업캐스팅하여 객체를 생성해야 한다.

 

다형성 구현 방법

1. 상속 클래스 구현 ( 부모- 자식 클래스 구현)

2. 메소드 오버라이딩

3. 업캐스팅하여 객체 선언

4. 부모 클래스 객체로 자식 메소드 호출

 

 

객체 타입 확인 : instanceof

instanceof란 객체 타입을 확인하는 연산자로, 객체의 실제 타입을 알아보기 위한 연산자이다.

 

 

 

 

 

 

 

 

 

 

 

※느낀점※

상위클래스와 하위클래스의 기본적인 개념잡기는 어렵지는 않았다.  상속이 많아지면 헷갈리는 부분이 많아질거 같다 클래스명과 메소드명 짓는것부터 익숙해져가며 연관성을 지어 작성하도록 많이 연습해야겠다 (영어단어공부)

다형성은 오바라이딩을 좀더 많이 써보고 연습을 많이 해봐야할거 같다 아직은 스스로 무엇을 만들어 연습하기보단 기본개념을 계속 반복적으로 복습하고 익숙해져야 하고 보면 바로 해석을 하는 눈을 길러야겠다.  

'Java' 카테고리의 다른 글

22/05/30 JAVA (인터페이스, 스태틱)  (0) 2022.06.11
22/05/30 JAVA (추상 클래스, 메소드)  (0) 2022.06.03
22/05/26 JAVA (12DAY)  (0) 2022.05.29
22/05/25JAVA (DAY11)  (0) 2022.05.28
22/05/24JAVA (DAY10)  (0) 2022.05.26

댓글