본문 바로가기
프로그래밍언어 & 프레임워크/자바(Java)

다형성(polymorphism): 사용편의성

by 공부하는개미 2021. 9. 27.
반응형

 

아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.

 

📃 참고도서

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해

COUPANG

www.coupang.com

 

 

 

 

프로그램 언어의 다형성(多形性, polymorphism; 폴리모피즘)은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.
(출처 : 위키피디아)

 

 

# 오버라이딩(overriding)과 오버로딩(overloading)

오버라이딩과 오버로딩을 다형성이라고 정의 할 수 없다고 생각한다.

(위 책에서는 다형성에 가장 기본을 오버라이딩, 오버로딩으로 보고 있다.)

다형성을 구현하는 방법 중 대표적으로 알려진 것이다.

 

 

  • 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의(오버라이딩)
  • 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의(오버로딩)

 

  • ride : 올라타다
  • load: 적재하다

 

인공위성에서 내려볼 때 오버라이딩(올라타기)된 경우는 맨 위에 올라탄 존재만 보인다.

오버로딩(적재하기) 된 경우는 옆으로 적재된 모든 적재물이 다 보인다.

 

 

Animal.java

package polymorphism01;

public class Animal {
	public String name;
    
    public void showName() {
    	System.out.printf("안녕 나는 %s야. 반가워\n", name);
    }
}

 

 

 

Penguin.java

package polymorphism01;

public class Penguin extends Animal {

  public String habitat;

  public void showHabitat() {
  System.out.printf("%s는 %s에 살아\n", name, habitat);
  }

  // 오버라이딩 - 재정의 : 상위클래스의 메서드와 같은 메서드 이름, 같은 인자 리스트
  public void showName() {
  	System.out.printf("어머 내 이름은 알아서 뭐하게요?");
  }
  
  
  // 오버로딩 - 중복정의 : 같은 메서드 이름, 다른 인자 리스트
  public void showName(String yourName) {
  	System.out.printf("%s 안녕, 나는 %s라고 해\n", yourName, name);
  }
}

 

 

Driver.java

package polymorphism01;

public class Driver {
	public static void main(String[] args) {
    	Penguin pororo = new Penguin();
        
        pororo.name = "뽀로로";
        pororo.habitat = "남극";
        
        pororo.showName();
        pororo.showName("초보람보");
        pororo.showHabitat();
        
        Animal pingu = new Penguin();
        
        pingu.name = "핑구";
        pingu.showName();
        }
}

 

 

 

실행결과

더보기

어머 내 이름은 알아서 뭐하게요?

초보람보 안녕, 나는 뽀로로라고 해

뽀로로는 남극에 살아

어머 내 이름은 알아서 뭐하게요?

 

 

 

실행 T 메모리

 

* 상위 클래스 타입의 객체 참조 변수를 사용하더라도 하위 클래스에서 오버라이딩 (재정의)한 메서드가

  호출된다는 사실을 꼭 기억하자.

반응형