추상 메서드와 추상 클래스
추상 메서드
- 선언만 있고 구현부가 없는 메서드이다.
- 메서드에서 어떤 일을 해야하는지만 알려주고, 실제로 그 일을 어떻게 할 지는 하위 클래스에서 결정한다.
- 같은 메서드명을 가지면서 각각 다른 기능을 수행 할 수 있게 된다.
추상 메서드 예시
public class Driver {
public static void main(String[] args) {
동물[] 동물들 = new 동물[5];
동물들[0] = new 쥐();
동물들[1] = new 고양이();
동물들[2] = new 강아지();
동물들[3] = new 송아지();
동물들[4] = new 병아리();
for (동물 동물 : 동물들) {
동물.울어보세요();
}
}
private static class 동물 {
void 울어보세요() {
System.out.println("나는 동물! 어떻게 울어야 하나요?");
}
}
private static class 쥐 extends Driver.동물 {
void 울어보세요() {
System.out.println("찍찍");
}
}
private static class 고양이 extends Driver.동물 {
void 울어보세요() {
System.out.println("야옹");
}
}
private static class 강아지 extends Driver.동물 {
void 울어보세요() {
System.out.println("멍멍");
}
}
private static class 송아지 extends Driver.동물 {
void 울어보세요() {
System.out.println("음메");
}
}
private static class 병아리 extends Driver.동물 {
void 울어보세요() {
System.out.println("삐약");
}
}
}
- 상속받는 경우, 동물 클래스에는 항상 코드가 구현되어있어야한다.
- 하지만, 동물 클래스로 구현한 경우 이상한 코드가 실행된다..
- 만약 사용자가 이러한 코드를 수행하는 경우, 사실상
오류
라고 볼 수 있다.
- 이를 해결하기 위하여! 추상클래스가 등장했다.
추상클래스
- 하나 이상의 추상 메서드를 포함한 클래스이다.
- 추상 클래스는 인스턴스를 직접 생성할 수 없음
- 하위 클래스를 통해서만 사용될 수 있다.
- 일종의 템플릿의 역할을 하게된다.
// 추상 클래스 선언
public abstract class 동물 {
// 추상 메서드 선언
abstract void 울어보세요();
}
// 하위 클래스 구현
public class 고양이 extends 동물 {
void 울어보세요() {
System.out.println("나는 고양이! 야옹 야옹!");
}
}
왜 추상클래스가 필요한지?
- 하위 클래스가 반드시 이 메서드를 구현해야 한다.
- 일관성을 유지하고
- 유연성을 높일 수 있다.
동물
이라는 추상 클래스에서울어보세요
라는 추상 메서드가 존재하는 경우, 이를 상속받은고양이
,강아지
등의 서브 클래스에서 반드시울어보세요
의 메서드를 구현해야한다.
- 그렇지 않으면 컴파일 에러가 발생하게 된다.
추상 클래스와 일반 클래스와 차이
- 추상 클래스는 인스턴스를 직접 생성할 수 없습니다.
동물 동물 = new 동물();
위 코드가 일반 클래스에선 가능했지만 , 추상클래스에선 불가능함.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]생성자 (0) | 2023.08.28 |
---|---|
[3단원]참조 변수의 복사 (0) | 2023.08.27 |
[3단원]다형성이 지원되지 않는 언어 (0) | 2023.08.26 |
[3단원]캡슐화: 정보 은닉 (0) | 2023.08.26 |
[기타]VO 와 DTO 와 ENTITY 차이 (0) | 2023.08.26 |