알버트의 개발하는 블로그

자바 제17강 : 자바 추상 클래스와 다형성 (polymorphism) 본문

프로그래밍 언어/Java

자바 제17강 : 자바 추상 클래스와 다형성 (polymorphism)

알버트 2021. 9. 10. 10:21

 

이번 시간에는 자바 추상 클래스와 다형성에 대해서 익혀보는 시간을 갖도록 하겠습니다.

추상 클래스는, 추상 메소드를 포함한 클래스를 말합니다. 몸통이 구현이 안된 추상메소드를 포함하고 있기 때문에 이 클래스를 상속받는 클래스들은 추상 메소드의 몸통을 명시하면서 오버라이드해주어야 하는데요.

다형성은 이 상속받은 추상메소드를 여러 클래스에서 각기 다른 방법으로 사용할 수 있는 것을 말합니다. 즉, 단어의 뜻처럼 '여러가지 형태를 가지고 있다'는 것을 의미합니다. 구체적으로 말하자면 추상 메소드의 다형성이 될 것입니다. 간단한 예제를 통해서 다형성을 구현해보도록 하겠습니다.

 


추상 클래스와 다형성 예제

package abstractClassTest;
import java.util.Scanner;

abstract class Shape {	//추상 클래스, 부모 클래스

	public abstract void draw();	//추상 메소드
}

//Shape 클래스를 상속받아 5가지 클래스를 만든다.

class Point extends Shape {

	@Override
	public void draw() {	//추상 메소드 구현
		System.out.println("점을 찍는다.");
	}
}

class Line extends Shape {

	@Override
	public void draw() {	//추상 메소드 구현
		System.out.println("선을 그린다.");
	}
}

class Circle extends Shape {

	@Override
	public void draw() {	//추상 메소드 구현
		System.out.println("원을 그린다.");
	}
}

class Rect extends Shape {
	
	@Override
	public void draw() {	//추상 메소드 구현
		System.out.println("사각형을 그린다.");
	}
}

class TriAngle extends Shape {

	@Override
	public void draw() {	//추상 메소드 구현
		System.out.println("삼각형을 그린다.");
	}
}


public class PolymorphismTest {	// 메인 클래스

	public static void main(String[] args) {
		//클래스 배열에 클래스들의 생성자 저장
		Shape[] shapes={new Point(),new Line(),new Circle(),new Rect(),new TriAngle()};
		Scanner sc = new Scanner(System.in);
		System.out.print("원하는 번호를 입력하세요 ");
		int menu = sc.nextInt();	// 입력받은 값을 menu에 저장
		shapes[menu-1].draw();	//shapes배열에 입력받은 값의 draw() 메소드 실행
		
	}
}

위와 같이 간단하게 코딩해주었습니다. Shape 추상클래스를 상속받은 5가지의 클래스에서 같은 이름의 메소드인 draw() 함수를 오버라이드해준 것을 볼 수 있습니다. 메인 함수에서는 배열을 만들어 5가지 클래스의 생성자들을 넣어주었고, 입력받은 숫자 클래스의 draw() 메소드를 실행할 수 있게 했습니다.

draw() 라는 이름은 같지만, 입력하는 값에 따라서 각기 다른 결과가 나오는 것을 알 수 있습니다. 실행해보겠습니다.

 

 

3번을 입력하니까 Circle 클래스의 draw()메소드가 실행되는 것을 알 수 있습니다.

 

 

 

5번을 입력하니까 TriAngle 클래스의 draw() 메소드가 실행되는 것을 볼 수 있습니다.

 

 

 

이처럼 추상 클래스와 다형성은 서로 밀접한 연관이 있으며 프로그래밍에서 중요한 문법 중에 하나입니다. 많이 보시고 연습하셔서 개념을 숙지하시면 프로그래밍에 큰 도움이 될 것입니다. 읽어주셔서 감사합니다!