알버트의 개발하는 블로그
자바 제16강 : 자바 추상 메소드와 추상 클래스 (abstract) 본문
이번 시간에는 자바에서 제공하는 추상 메소드와 추상 클래스에 대해서 알아보고 익혀보도록 하겠습니다.
먼저 추상 메소드라는 것을 알아야 추상 클래스에 대해서 알 수 있습니다. 추상 메소드는 메소드는 메소드지만, 머리만 있고 몸통이 없는 메소드를 말합니다. 즉, 함수의 원형은 있는데 그 함수로 뭘 처리해주겠다는 내용이 없는 것입니다. 즉, 함수의 몸통인 "{ }"블록이 없이 대가리만 선언한 불완전한 함수를 추상 메소드라고 합니다.
public void kindOf() { } // <- 일반 메소드 (함수의 몸통인 "{ }"블록이 있다.)
public void kindOf(); // <- 추상 메소드 ( "{ }"없이 머리만 있다.)
그렇다면 추상 클래스는 무엇일까요? 추상 클래스는 한 개 이상의 추상 메소드를 포함한 클래스를 말합니다.
추상 클래스는 불완전한 추상 메소드를 포함한 불완전한 클래스이므로 객체를 만들어 사용할 수 없습니다. 그래서 추상 클래스를 상속받은 자식 클래스는 추상 클래스의 모든 추상 메소드를 override(재정의)시켜서 사용해야 합니다. 추상 클래스가 이렇게 불편해도 많이 쓰이는 이유는 상속을 적용하기 좋은 클래스이기 때문입니다.
abstract class Product {
public void kindOf() { } // <- 일반 메소드
// 추상 메소드는 함수의 몸통인 "{}" 블록을 가지지 않는 메소드
// 추상 메소드는 abstract 예약어를 사용해 만들며 "{}" 블록이 없는 불완전한 메소드이다.
public abstract void kindOf(); // <-추상 메소드
}
추상 클래스를 쓰는 방법은 위의 코드와 같습니다. 추상 메소드와 추상 클래스 앞에는 추상 예약어인 abstract를 반드시 명시해주어야 합니다. 따라서 kindOf() 함수는 추상 메소드라는 것을 알 수 있습니다. 그래서 이 추상 클래스를 상속받는 자식 클래스에서는 kindOf() 함수의 몸통을 적어줘야 합니다.
이제 간단한 예제를 통해서 추상 클래스를 익혀보겠습니다.
추상 메소드, 추상 클래스 예제
abstract class Product {
public abstract void kindOf(); //추상 메소드 kindOf()
}
// 추상 Product 클래스를 상속받아 Camera 클래스를 만든다.
class Camera extends Product {
@Override
public void kindOf() { //추상메소드 kindOf() 구현
System.out.println("찰칵찰칵");
}
}
public class Main {
public static void main(String[] args) {
Camera camera = new Camera(); //Camera객체 생성
camera.kindOf(); //추상클래스로부터 상속받은 kindOf()메소드 실행
}
}
추상 메소드를 포함한 Product 추상클래스를 이처럼 사용할 수 있는 것을 볼 수 있습니다.
Product 클래스를 Camera가 상속을 받았습니다. 그리고 나서 Product클래스의 kindOf()메소드를 오버라이드해서 몸통을 구현하는 것을 알 수 있습니다. 추상 클래스는 이처럼 상속과 밀접한 연관이 있습니다.
이제 한번 실행해볼까요??
이처럼 카메라 클래스에서 구현된 kindOf 메소드가 정상적으로 실행되는 것을 볼 수 있습니다.
이처럼 추상 메소드와 추상 클래스는 자바에서 정말 중요한 문법 중에 하나입니다. 많이 연습하시고 익히시길 바랍니다. 읽어주셔서 감사합니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
자바 제18강 : 자바 HashSet, TreeSet 클래스 이용하여 데이터 처리하기 (0) | 2021.09.10 |
---|---|
자바 제17강 : 자바 추상 클래스와 다형성 (polymorphism) (0) | 2021.09.10 |
자바 제15강 : 상속 (Inheritance)과 함수 재정의(override, 메소드 오버라이드) (0) | 2021.09.10 |
자바 제14강 : 자바 StringTokenizer 클래스로 데이터 나누기 (0) | 2021.09.10 |
자바 제13강 : 자바 PrintWriter 클래스로 파일 입출력 하기와 경로 지정 방식(절대, 상대) (0) | 2021.09.10 |