Backend/☕️ Java
예시를 통한 추상 클래스 이해
Hugehoo
2020. 11. 16. 09:50
추상 클래스
한줄 정리: 하위 클래스로 공통된 속성과, 개별 속성(abstract method)을 상속해 줄 상위 클래스
- 현대차에서는 다양한 종류의 자동차가 생성된다.
- 각각의 자동차는 각각의 고유한 특징을 갖지만, 현대차의 공통된 특성(엠블럼, 규격 등)을 가질 수 도 있다.
- 공통된 부분은 취하고, 아닌 부분은 자체(각각의 자동차)에서 구현한다.
이를 자바의 추상 클래스에 빗대어 말하면
- 추상 클래스는 다양한 종류의 클래스를 생성한다.
- 각각의 클래스는 각자의 고유한 속성(인스턴스 속성)을 갖지만, 추상 클래스로부터 공통된 속성을 상속받아 사용하기도 한다.
- 상속받은 부분은 그대로 취하고, 그렇지 않은 부분은 자체 메소드로 구현한다.
- ex) HyundaiCar(추상 클래스) => (개별 클래스) Sonata, Gradeur, ---
- HyundaiCar라는 클래스에서 공통된 부분(변수, 메서드)등은 뽑아내서 사용하고, 개별적인 부분은 하위 클래스에서 자체 구현.
1. 추상 클래스 우선 구현 (꼭 순서를 지켜야 하는 것은 아니다, 이해를 위해서)
package pjtTest;
// Bank라는 추상 클래스 구현
public abstract class Bank {
String name;
String account;
int totalAmount;
// Bank 생성자 생성
public Bank(String n, String a, int t) {
System.out.println("Bank Constructor");
this.name = n;
this.account = a;
this.totalAmount= t;
}
// 공통 메서드
public void deposit() {
System.out.println("--deposit() start--");
}
// 공통 메서드
public void withdraw() {
System.out.println("--withdraw() start--");
}
// 추상 메서드: Bank 추상클래스를 상속받는 클래스에서 꼭 재정의 해줘야한다.
public abstract void installmentSavings();
// 추상 메서드: Bank 추상클래스를 상속받는 클래스에서 꼭 재정의 해줘야한다.
public abstract void cancellation();
// 공통 메서드
public void getInfo() {
System.out.printf("name: %s\n", name);
System.out.printf("account: %s\n",account);
System.out.printf("account: %d\n",totalAmount);
}
}
2. 추상 클래스를 상속받는 클래스 구현
package pjtTest;
// 추상 클래스 Bank를 상속받은 MyBank 클래스
public class MyBank extends Bank {
// MyBank 클래스 구현
public MyBank(String n, String a, int t) {
super(n, a, t);
}
// 추상클래스에서 정의하지 못한 메소드(installmentSavings(), cancellation())를 여기서 정의해준다
public void installmentSavings() {
System.out.println("--installmentSavings() start--");
}
public void cancellation() {
System.out.println("--cancellation() statr--");
}
}
3. 메인 메소드에서 구현
package pjtTest;
public class lecture022{
public static void main(String[] args) {
// 인스턴스화, 상속받은 MyBank 클래스의 객체를 새로 생성 => 추상클래스 Bank형으로
Bank myBank = new MyBank("LIM", "1234-1234", 100);
// Bank추상클래스 형의 myBank라는 객체로부터 메서드 구현
// deposit, withdraw는 MyBank 클래스에선 구현하지 않은 공통의 메서드(from Abstract Class)
myBank.deposit();
myBank.withdraw();
myBank.installmentSavings();
myBank.cancellation();
System.out.println();
myBank.getInfo();
}
}
🔷 잊지 말것
1. 추상클래스는 직접 인스턴스를 구현할 수 없다.
➡ 그렇기 때문에, MyBank 클래스로부터 인스턴스를 구현했다.
Bank myBank = new MyBank("LIM", "1234-1234", 100);
2. 상속 받은 클래스는 반드시 추상 메서드를 구현해야 한다.
public void installmentSavings() {
System.out.println("--installmentSavings() start--");
}
public void cancellation() {
System.out.println("--cancellation() statr--");
}