알버트의 개발하는 블로그
자바 제17강 : 자바 추상 클래스와 다형성 (polymorphism) 본문
이번 시간에는 자바 추상 클래스와 다형성에 대해서 익혀보는 시간을 갖도록 하겠습니다.
추상 클래스는, 추상 메소드를 포함한 클래스를 말합니다. 몸통이 구현이 안된 추상메소드를 포함하고 있기 때문에 이 클래스를 상속받는 클래스들은 추상 메소드의 몸통을 명시하면서 오버라이드해주어야 하는데요.
다형성은 이 상속받은 추상메소드를 여러 클래스에서 각기 다른 방법으로 사용할 수 있는 것을 말합니다. 즉, 단어의 뜻처럼 '여러가지 형태를 가지고 있다'는 것을 의미합니다. 구체적으로 말하자면 추상 메소드의 다형성이 될 것입니다. 간단한 예제를 통해서 다형성을 구현해보도록 하겠습니다.
추상 클래스와 다형성 예제
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() 메소드가 실행되는 것을 볼 수 있습니다.
이처럼 추상 클래스와 다형성은 서로 밀접한 연관이 있으며 프로그래밍에서 중요한 문법 중에 하나입니다. 많이 보시고 연습하셔서 개념을 숙지하시면 프로그래밍에 큰 도움이 될 것입니다. 읽어주셔서 감사합니다!
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바 제19강 : 자바 스레드(Thread)의 개념과 스레드(Thread) 주요 메소드 (0) | 2021.09.10 |
---|---|
자바 제18강 : 자바 HashSet, TreeSet 클래스 이용하여 데이터 처리하기 (0) | 2021.09.10 |
자바 제16강 : 자바 추상 메소드와 추상 클래스 (abstract) (0) | 2021.09.10 |
자바 제15강 : 상속 (Inheritance)과 함수 재정의(override, 메소드 오버라이드) (0) | 2021.09.10 |
자바 제14강 : 자바 StringTokenizer 클래스로 데이터 나누기 (0) | 2021.09.10 |