본문 바로가기

Java

상속 : 추상 클래스

추상 클래스

추상.. "어떤 대상 혹은 세계로부터 하나의 상을 추려내어 표현하는 것을 의미한다"고 한다.

새, 곤충, 물고기 —공통된 특성→ 동물

삼성, 현대, LG —공통된 특성→ 회사

Bird.class, Insect.class, Fish.class(실체 클래스) -→ Animal.class(추상 클래스) 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 생성x

추상 클래스를 만드는 이유는 뭘까?

  1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적 Bird.class, Insect.class를 다른 사람이 정의한다고 하면... 누구는 무언가 먹는 행위를 지정하는 메서드를 eat()으로 쓰고, 누군가는 eatting()으로 쓸 수 있다. 동일한 데이터와 기능인데 이름이 다르니, 사용 방법이 달라질 수 있다.
  1. 실체 클래스를 작성할 때 시간 절약 공통적인 필드와 메소드는 Animal.class에서 선언해두면 실체 클래스를 작성하는데 시간을 절약할 수 있다.

여기서 초록색 원을 타이어 추상 클래스, 검은색 원을 실체 클래스라고 볼 수 있다.

추상 클래스와 추상 메소드

abstract 키워드를 이용한다.

public abstract class 클래스{
	//필드
	//생성자
	//메소드
}

추상 클래스는 추상 메소드를 선언할 수 있다. 하위 클래스가 반드시!! 내용을 채우도록 하고 싶은 메소드가 있으면 추상 메소드를 지정하게 된다.

음식점 본사에서는 "이러한 메뉴은 꼭 있어야 한다." 라고 규칙을 정했고, 체인점에서는 "알겠다." 하고 그 메뉴 그대로 판매를 했다. 손님에게 메뉴판을 보여주었을 때 체인점 지점장은 놀랬다. 모든 메뉴들이 0원으로 되어있기 때문이다. 아래에 있는 예제를 실행해보면 모든 메뉴가 전부 0원이라며 본사의 문구가 찍혀있는 것을 볼 수 있다. 본사에서 "꼭 너희가 원하는 메뉴 가격을 다시 정해라"라는 주의사항을 알려주지 않았기 때문에 발생한 것이다. 이럴 때 "꼭!!! 너희가 다시 정의해"라는 주의 메세지를 주는 것이 "추상 클래스의 역할"이다. 출처: https://server-engineer.tistory.com/74 [HelloWorld]

public abstract class Animal{
	public String kind;
	public void breathe(){
		System.out.println("숨을 쉽니다.");
	}
	public abstract void sound(); // <-- 추상 메소드
}

추상 메소드가 하나로 있으면 추상 클래스이다.

public class Dog extends Animail{
	public Dog() {
		this.kind = "포유류";
	}

	@Override
	public void sound(){
		System.out.println("멍멍"); // 추상 메소드 재정의
	}
}

만약 @Override해서 재 정의한 sound()를 쓰지 않는다면? 에러 난다. 무조건 이 메소드는 재 정의해서 써라-_-! 할 때 추상 클래스를 쓴다.

반응형

'Java' 카테고리의 다른 글

어노테이션(Annotation)  (0) 2021.03.11
static과 싱글톤  (0) 2021.03.11
상속 : 타입 변환과 다형성  (0) 2021.03.07
상속 : Protected 접근 제한자  (0) 2021.03.07
상속 : final 클래스와 final 메소드  (0) 2021.03.07