자바 추상 클래스(Abstract Class)에 대해서 알아보자.
추상 클래스(Abstract Class)
클래스를 설계도에 비유한다면, 추상 클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상 클래스로 인스턴스는 생성할 수 없다. 추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다. 추상클래스가 필요한 이유는 공통부분을 가진 미완성 설계도를 만들어 놓고, 이 클래스를 이용해서 각각의 설계도를 완성해 효율적이게 된다.
추상클래스 키워드는 "abstract"을 붙이면 된다. 추상클래스는 추상메소드를 포함하고 있다는 것을 제외하고는 일반클래스와 전혀 다르지 않다. 추상 클래스에도 생성자가 있으며, 멤버변수와 메소드도 가질 수 있다.
상속이 자손클래스를 만드는데 조상클래스를 사용하는 것이라면, 이와 반대로 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것이라고 할 수 있다.
추상 메소드(Abstract Method)
추상메소드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메소드이다. 메소드를 미완성 상태로 남겨놓는 이유는 메소드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상클래스에서는 선언부만 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려주고, 실제내용은 상속받는 클래스에서 구현하도록 비워두는 것이다.
추상메소드 키워드는 "abstract"을 붙이면 된다. 그리고 구현부가 없으므로 괄호{}대신 세미콜론(;)을 적어준다. 추상클래스로부터 상속받는 자손일반클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메소드를 모두 구현해주어야 한다. 만일 조상으로부터 상속받은 추상메소드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정해주어야 한다. 만약 추상클래스가 추상클래스를 상속받는다면 오버라이딩 할 필요가 없다.
ex)
ex)
ex)
해당 패키지의 클래스들을 import했기 때문에 ShapeClass 및 Circ, Rect, Tria 클래스들을 사용할 수 있다. 첫 번째는 ShapeClass타입 ref참조변수를 선언해 각 도형(Circ, Rect, Tria)인스턴스 들을 생성해 업캐스팅한 후, draw()메소드를 호출하면 각 클래스에 맞게 오버라이딩 된 함수가 호출된다.
두 번째는 ShapeClass타입의 추상클래스 배열을 생성해 각 배열에 도형 인스턴스들을 대입해 각 배열마다 draw()메소드를 호출해 각 클래스에 맞는 오버라이딩 된 함수가 호출된다.(arr[0]=new Circ();에서 업캐스팅 된다.)
세 번째는 static void dr(ShapeClass ref){}메소드를 따로 정의해서 각 매개변수에 대한 draw()메소드를 호출해 각 클래스에 맞는 오버라이딩 된 함수가 호출된다.
세 개의 방법 모두 같은 결과를 출력한다.
'언어공부 > Java' 카테고리의 다른 글
자바 인터페이스(Interface) (0) | 2021.05.19 |
---|---|
자바 final 키워드 (0) | 2021.05.18 |
자바 매개변수의 다형성 (0) | 2021.05.15 |
자바 다형성, 참조변수의 형변환, 업캐스팅, 다운캐스팅, instance of (1) | 2021.05.14 |
자바 패키지(Package), 패키지 선언, import문, static import문 (0) | 2021.05.13 |