[자바와 객체 지향 그리고 스프링] 3- 다형성: 사용편의성

코린이서현이·2024년 1월 5일
0

😄들어가면서😄

🎯 과녁

📌 다형성이란?
📌 오버라이딩과 오버로딩의 구분
📌 다형성과 T메모리
➕ 다형성이 지원되지 않는 언어

📌 다형성: 사용편의성

📚 다형성이란, 여러개의 형태를 가지는 것을 말한다.

객체 지향의 다향성이란 동일한 코드가 상황에 따라 여러가지로 실행되는 것이다.

상위클래스와 하위클래스, 인터페이스와 구현 클래스로도 설명할 수 있으나. 기본적으로는 오버라이딩과 오버로딩을 말한다.

🤔 오버라이딩과 오버로딩의 구분

🔖 오버로딩이란, 한 클래스내에 메서드명이 동일한 메서드가 중복 정의되어 있는 경우이다. 매개변수로 구별할 수 있다.
대표적으로 생성자가 여러개 생성된 생성자 오버로딩이 있다.

🔖 오버라이딩이란, 상속 구조내 상위클래스에서 정의한 메소드를 하위클래스에서 재정의하는 것이다.

따라서, 오버로딩은 한 클래스내에 매개변수는 다르지만 동일한 메서드명을 가진 메서드가 두개 이상 존재한다. 오버라이딩은 매개변수와 메서드명이 동일한 메서드가 상위클래스에 존재한다.

🖥️ 예제코드

package OOP03.polymorphism01;

public class Anlimal {
  public String name;

  public void showName() {
    System.out.println("이 동물의 이름은 " +name+ "입니다.");
  }
}
package OOP03.polymorphism01;

public class Penguin extends Anlimal {
  public String habitat;

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

  @Override
  public void showName() {
    System.out.println("이 펭귄의 이름은 " +name+ "입니다.");
  }
  public void showName(String s) {
    System.out.println("안녕하세요! " + s +"씨" +
            " 이 펭귄의 이름은 " +name+ "입니다.");
  }


}

🎙️ 오버라이딩된 메서드는?
오버라이딩은 상위클래스의 메서드를 재정의 한 것!!
-> public void showName()

🎙️ 오버로딩된 메서드는?
오버로딩은 한 클래스 내에서 매개변수의 차이로 메서드를 여러개 선언하는 것!
-> public void showName(String s)

package OOP03.polymorphism01;
public class Driver {
  public static void main(String[] args) {
    Penguin pororo = new Penguin();
    pororo.name = "뽀로로";
    pororo.habitat = "눈 덮인 숲속 마을";

    pororo.showName();
    pororo.showName("서현");
    pororo.showHabitat();

    Anlimal pingu = new Penguin();

    pingu.name = "핑구";
    pingu.showName();
//    pingu.showName("서현");
//    🤔 왜 안될까?

  }
}

🤔 왜 안될까?
묵시적 형변환된 객체 참조 변수는 ⭐객체 참조변수의 멤버만 사용할 수 있었다.
헷갈리면 이전 포스팅을 보고오자! 매개변수가 String인 메서드는 상위클래스에는 존재하지 않는다. (오버라이딩된 것이 아님) 상위클래스 Animal에는 해당 메서드가 없어서 실행할 수 없다.

👉 실행화면

이 펭귄의 이름은 뽀로로입니다.
안녕하세요! 서현씨 이 펭귄의 이름은 뽀로로입니다.
뽀로로는 눈 덮인 숲속 마을에 살아
이 펭귄의 이름은 핑구입니다.

👉 생성자 오버로딩 포스팅
👉 메서드 오버리이딩 포스팅

📌 다형성과 T메모리

T메모리 그리기

⭐ 하위 클래스에서 오버라이딩되면 상위 클래스의 메서드가 가려진다.
따라서 상위 클래스 타입의 객체 참조 변수인 핑구 인스턴스도 상위클래스의 showName()이 가려져 하위클래스의 재정의 된 메서드가 생성된다.

➕ 다형성의 편리성

오버로딩의 편리성

메서드명이 동일해도 매개변수가 다르면 다른 메서드이다.

🤔 두 가지의 숫자를 더하는 메서드를 만든다고 생각해보자!
-> 엄청 간단할 것 같지만, 정수 자료형과 부동소수점 자료형은 총 7가지가 있다. 자바는 매개변수를 순서로 구분하니까 (정수형,부동소수점)과 (부동소수점,정수형)은 다르다. 이런 경우는 모두 7*7 =49개이다. 총 49개의 메서드를 만들어야한다.

🤮 다형성을 지원하지 않으면 메서드명이 다 달라야하기 때문에 총 49개의 메서드명을 만들어야한다.

😄 하지만?! 오버라딩이 있다면, 메서드명하나로 인자목록만 다르게 할 수 있다. 또한 제네릭을 이용하면 하나의 함수만 구현할 수 있다.

제네릭 더 알아보기

오버라이딩의 편리성

😄 상위 클래스 타입의 객체 참조 변수에서 생성되었던 타입을 몰라도 하위 클래스가 오버라이딩한 메서드를 자동으로 시ㄹ행한다.

🤔마무리하면서🤔

기억하고 싶은 것!

📌 하위 클래스에서 오버라이딩되면 상위 클래스의 메서드가 가려진다.

재미지다
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글