///////
Search
🤡

다형성

다형성의 의미

다형성 : 객체들의 타입이 다르면 똑같은 메시지가 전달 되더라도 서로 다른 동작을 하는 것
package java_0926; class Shape { public Shape() { System.out.println("도형입니다."); } public void draw() { System.out.println("도형을 그립니다."); } } class Rectangle extends Shape { public Rectangle() { System.out.println("사각형 생성자"); } @Override public void draw() { System.out.println("사각형 도형을 그립니다."); } public void draw2() { System.out.println("사각형도형 그리기2"); } } public class SuperTest { public static void main(String[] args) { Shape shape = new Shape(); shape.draw(); Rectangle rec = new Rectangle(); rec.draw(); Shape shape2 = new Rectangle(); shape2.draw(); shape2.draw2(); //오류발생!! } }
Java
복사
Shape 타입의 객체 shape2 에 자식 클래스인 Rectangle을 대입했다.
Shape클래스에는 draw2 메서드를 포함하고 있지 않기 때문에 shape2.draw2()는 에러가 발생한다.
위 메모리 공간중 실제 메모리에 올라가는 메서드는 무엇일까?

다형성을 사용시 장점

1.
유지보수가 쉽다
개발자가 여러 객체를 하나의 타입으로 관리가 가능하기 때문에 코드 관리가 편리해 유지보수가 용이하다.
2.
재사용성 증가
다형성을 활용하면 객체를 재사용하기 쉬워지기 때문에 개발자의 코드 재사용성이 높아진다.

다형성 사용시 필수 조건

1.
부모-자식 간 클래스 상속이 이루어져야 한다.
2.
하위 클래스 메소드가 재정의(오버라이딩)되어 있어야 한다.
3.
부모타입으로 자식클래스를 업캐스팅하여 객체를 생성해야 한다.
자바의 상속관계는 부모클래스의 모든 속성(필드변수, 함수)들을 자식클래스가 받아서 사용할 수 있다

업캐스팅

자식클래스의 객체가 부모클래스의 타입으로 형 변환이 되는 것
class TV { String name; int price; public void printTV() { System.out.println("TV가 보여요"); } } class ColorTv extends TV{ int color; @Override public void printTV() { System.out.println("Color TV가 보여요"); } } public class TvTest { public static void main(String[] args) { TV tv = new ColorTV(); // upcatsing ColorTV tv = new TV(); // 컴파일 오류 } }
Java
복사
업캐스팅을 하는 이유는 무엇일까?

다운캐스팅

업캐스팅 된 객체를 다시 부모클래스 타입의 객체로 형 변환하는 것
class TV { String name; int price; } class ColorTV extends TV{ int color; } public class TvTest { public static void main(String[] args) { TV tv = new ColorTV(); // upcatsing ColorTV colorTV = (ColorTV) tv; // downcasting } }
Java
복사
캐스팅으로 인해 데이터타입이 혼동이 올 때