///////
Search
🎰

추상클래스

서정희_0927

추상 클래스란?

추상 함수를 가진 클래스이다.
추상 함수란 함수의 body를 구현하지 않은 함수를 의미한다.
‘추상’이라는 말을 사전적으로 이해하기보다 미완성되었다 정도의 의미로 이해하면 편하다.

추상 클래스 사용법

abstract를 붙여 추상 함수임을 보인다.
추상 함수가 하나라도 있을 시 class에도 동일하게 abstract를 붙인다.

추상 클래스 이용시 주의점

추상 클래스라고 해서 모든 함수가 추상 함수로 구성되어있는것은 아니다.
추상 클래스 내에서 추상함수가 구현되어있지 않기 때문에 추상 클래스만으로는 객체 생성이 불가능하다.
→ 따라서 해당 추상 클래스를 상속받은 자식 클래스에서 추상 함수를 구현(오버라이딩)한 뒤
생성해야 한다.

추상 클래스의 용도

부모 클래스의 함수를 자식 클래스에서 목적에 따라 오버라이딩 하여 사용하도록 구현할 때
만약 일반 메소드로 정의되었다면 자식 클래스에서 오버라이드 하지 않아도 컴파일러가 체크할 수 있는 방법이 없기 때문에 오류가 발생하지 않게 된다. 따라서 이와 같은 경우 올바른 의도로 구현되지 않을 수 있다. 하지만 추상 클래스를 이용한다면 자식 클래스에서 오버라이딩 되지 않았을 시 컴파일오류가 발생하기 때문에 이를 사전에 방지할 수 있다.

김하늘_0927

예시1
abstract class Animal { //추상 클래스 public abstract void move(); //추상 메소드. 함수의 바디를 구현하지 않았음. } class Lion extends Animal { @Override //추상 클래스 내 추상 메소드를 꼭 override 해줘야 한다. public void move() { System.out.println("사자의 move 메소드 입니다."); } } public class AbstractClass1 { public static void main(String[] args) { Lion lion = new Lion(); lion.move(); } }
Java
복사
추상 클래스 Animal 안의 추상 메소드 move()는 바디가 구현되지 않았다. 추상 클래스의 자식 클래스인 Lion에서는 꼭 추상 메소드 move()에 대해 override를 해줘야 컴파일 에러가 발생하지 않는다. 메인함수에서는 추상 클래스 Animal의 객체 선언이 불가능 하니, 자식 클래스인 Lion으로 구현 해야 한다.
예시2
import java.util.Scanner; //추상클래스2 abstract class Calc { protected int a; protected int b; public void setValue(int a, int b) { //추상 메소드 외 다른 메소드도 들어갈 수 있다. this.a = a; this.b = b; } public abstract double calc(); } class Add extends Calc { @Override public double calc() { return (double) (super.a + super.b); } } public class Ex220927AbstractClass2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Calc cal; System.out.println("두 정수와 연산자를 입력하시오 >> "); int a1 = sc.nextInt(); int b1 = sc.nextInt(); char c = sc.next().charAt(0); while (true) { if (c == '+') { cal = new Add(); cal.setValue(a1, b1); System.out.println(cal.calc()); break; } else { break; } } } }
Java
복사
추상 클래스인 Calc는 추상 메소드인 calc와 일반 메소드인 setValue 둘 다 가질 수 있다. Calc의 자식 클래스인 Add는 부모 클래스의 메소드인 setValue를 사용 가능하며, 추상 메소드인 calc는 override를 해줘야 한다. 역시 메인 함수에서 추상 클래스인 Calc는 객체 선언이 불가능하니, 자식 클래스인 Add를 이용하여 업캐스팅 해주도록 하자.