이 블로그는 아래 유튜브 '생활코딩' 채널의 영상을 보고 배운 것을 정리하고 공유하려는 목적으로 작성합니다!
🤔 추상 메서드란
- 선언만 되어있고 구현되어있지 않은 메서드
- 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)해 구현합니다.
궁금한 부분이 있거나, 틀린 내용이 있다면 댓글로 남겨주세요!
함께 성장해 나가는 하루가 됩시다 :)
끝까지 봐주셔서 감사합니다!!
'개념정리 > Java' 카테고리의 다른 글
[JAVA] GUI - 프레임 생성 및 기본적인 설정 간단히 정리 (0) | 2023.07.26 |
---|---|
[JAVA] 컬렉션(collection)과 배열(array)의 차이점 간단히 정리☆ (0) | 2023.05.25 |
[JAVA] 메서드 - isEmpty() (0) | 2023.04.05 |
[Java] 배열(Array) (0) | 2022.09.07 |
[Java] 메서드(method) (0) | 2022.09.05 |