개념정리/Java

[JAVA] 추상 메서드와 추상 클래스 쉽고 간단하게 알자!

iamjisu 2023. 5. 17. 23:47

이 블로그는 아래 유튜브 '생활코딩' 채널의 영상을 보고 배운 것을 정리하고 공유하려는 목적으로 작성합니다!

 

https://youtu.be/g3iQH71q_2I


🤔 추상 메서드란

  • 선언만 되어있고 구현되어있지 않은 메서드
  • abstract로 선언된 메서드

선언만 되어있고 구현되어있지 않은 메서드는

좀 더 쉽게 말하면, 메서드의 이름만 정해두고 그 메서드가 무엇을 하는지는 정해두지 않은 형태라는 것입니다.

// 일반 메서드
int add(int a, int b) {
	return a + b;
}

// 추상 메서드
abstract int add();

🤔 추상 클래스란

그럼 추상 클래스는 뭘까요??

  • 추상 메서드로 이루어진 클래스(abstract로 선언되어야 함)
  • abstract로 선언된 클래스

즉, abstract로 선언된 클래스는 모두 추상 클래스로 취급하면 된답니다!!

 

< 추상 클래스 특징 >

  • 추상 클래스는 추상 메서드로 이루어져있으므로 상속한 후 오버라이딩(overriding)하여 구현해야함
  • 추상 클래스 타입의 객체를 생성하지 못함

추상 메서드와 추상 클래스는 왜 사용할까

1. 추상 메서드

먼저, 추상 메서드는 메서드 이름만 오버라이딩(overriding)하도록 해, 같은 이름이지만 각각 다 다른 기능을 수행할 수 있도록하기 위해 사용합니다.

 

아래 그림에는 draw() 라는 추상 메서드가 있습니다.

draw()는 Line, Rect, Circle 클래스에 오버라이딩(overriding)되어서 각각 다른 기능을 수행하는 것을 볼 수 있습니다!!

 

2. 추상 클래스

추상 클래스는 일반 클래스에 상속해서, 그 부모 추상 클래스의 추상 메서드를 꼭!!! 오버라이딩(overriding)사용하도록 강제하기 위해 사용합니다.

추상 클래스를 상속받은 일반 클래스는 그 부모 추상 클래스의 추상 메서드를 모두 오버라이딩해서 구현시켜야하고, 그렇지 않으면 오류가 납니다.

이것이 추상 클래스가 가지는 힘이라고 할 수 있답니다!!!

 

추상 클래스를 상속받을 때는 extends라는 키워드를 통해 상속 받습니다.


✏️ 예제로 더 알아보기

abstract public class Calculator {
	public abstract int add(int a, int b);  // 추상 메서드
	public abstract int subtract(int a, int b);
	public abstract double average(int[] a);
}
public class GoodCalc extends Calculator{
	@Override   // 어노테이션 : 재정의된 메서드라는 것을 알려준다
	public int add(int a, int b) {
		return a + b;
	}
	@Override
	public int subtract(int a, int b) {
		return a - b;
	}
	@Override
	public double average(int[] a) { // int[] a = new int[] {2,3,4} 와 같은 표현
		double sum = 0;
		for(int i = 0; i < a.length; i++)
			sum += a[i];										
		return sum/a.length;
	}
	public static void main(String[] args) {
		GoodCalc c = new GoodCalc();
		System.out.println(c.add(2, 3));
		System.out.println(c.subtract(2, 3));
		System.out.println(c.average(new int[] {2,3,4}));
	}

}
  • Calculator라는 추상 클래스를 생성하고
  • GoodCalc라는 일반 클래스는 Calculator를 상속받습니다.
  • 이때 GoodCalc 클래스는 Calculator의 추상 메서드인 add(), substract(), average()를 모두 오버라이딩(overriding)해 구현합니다.

궁금한 부분이 있거나, 틀린 내용이 있다면 댓글로 남겨주세요!

함께 성장해 나가는 하루가 됩시다 :)

끝까지 봐주셔서 감사합니다!!