다형성(Polymorphism)알아보기 with 자바(Java)

DongJoo Kwak·2022년 2월 25일
0

오늘은 다형성에 대해 다시 공부하면서 정리해 보았다. 객체지향에 있어서 중요한 부분이다!🌳

📌 다형성 polymorphism

-여러가지 형태를 가질 수 있는 능력 
-상속관계❗에서 성립가능한 문법 
-참조형의 업/다운 캐스팅
(부모타입의 변수에 자식객체로 new한것이 들어갈 수 있다) 

📍 instanceof 연산자 
	: 참조하는 변수가 가르키는 인스턴스(객체)의 실제 타입을 
	체크하는데 사용 

	참조변수 instanceof 클래스명 ---> true / false 

	클래스명 : 나부터 조상까지 모두 true로 리턴	
		  내아래 자식이나 아예다른 클래스는 false 

📌 추상클래스

1) 개발할 때, 밑그림을 그리는 것. 설계쪽에 해당.
2) ✨키워드 : abstract 
3) 추상메서드 : abstract 키워드를 붙혀 메서드의 선언부만 있고, 
	구현부({코드작성..})은 되어있지 않은 형태 

	public abstract String getName(); 
	public abstract void setName(String name); 

4) 추상클래스 : 일반 멤버들과 함께 추상 메서드를 포함하는 클래스 
	추상메서드가 하나라도 있으면 무조건 추상 클래스.
	클래스 앞에 abstract 붙히기. 

	abstract class Shape { 
		...
		abstract void draw(); // 추상메서드 
	}

📌 추상클래스 특징

1) 추상클래스는 객체 생성 불가. 불완전한/미완성인 클래스다~ 
	
	Shape s = new Shape(); (X) 
	Shape s; (O) 

2) 상속에서 수퍼클래스로 사용된다. 부모클래스가 될 수 있음. extends 

3) 추상클래스를 물려받은 서브클래스를 완성 시키려면, 
	추상 메서드를 오버라이딩 해야한다. 
	추상 클래스를 단순히 상속만 받은 서브 클래스는 
	그 또한 추상 클래스가 된다. 
	추상 메서드를 그대로 상속받기 때문에 
	구현을 하지 않는다면 클래스 앞에 abstract키워드를 붙혀줘야한다. 
	
	# 추상클래스 단순 상속 
	abstract class Rect extends Shape { // 추상draw(); 
		int width;
		...
	}
	new Rect(); (X) 

	# ✨추상클래스를 사용할때 -> 상속받아 구현 완성 
	class Rect extends Shape {
		int width;
		...
		@Override 
		void draw() { // 구현 코드 작성  }
	}	
	new Rect(); (O) 

📌 코드 예시

// 오버라이딩으로 다형성 실현 
class Shape {
	public void draw() {
		System.out.println("Shape");
	}
}


class Line extends Shape {
	@Override
	public void draw() {
		System.out.println("Line");
	}
}
class Rect extends Shape {
	@Override
	public void draw() {
		System.out.println("Rect");
	}
}
class Circle extends Shape {
	@Override
	public void draw() {
		System.out.println("Circle");
	}
}


public class Test115 {
	
	static void paint(Shape s) { // 매개변수의 다형성 
		s.draw(); // line, shape, rect, circle 
	}
	
	public static void main(String[] args) {

		Line line = new Line(); 
		paint(line);
		paint(new Shape());
		paint(new Line());
		paint(new Rect());
		paint(new Circle());
		
	}
}

✨코드 설명

  • 부모 클래스 Shape에 drwa메서드를 통해 자식클래스 Line , Rect , Circle는 각자 다른 모양을 그릴 수 있다!
  • 설명을 위한 예를 들면 롤게임 캐릭터라는 부모 클래스에 메서드가 Q,W,E,R이 있다고 하자!
  • 자식 클래스 이즈리얼, 쉔, 리신 등은 부모 메서드의 Q,W,E,R을 오버라이드를 해서 다양한 캐릭터를 정해진 기준으로 만들어 낼수 있따!

📈금융 개발 블로그 : https://quantpro.co.kr/

profile
즐거운 개발 공간

0개의 댓글