본문 바로가기
교육, 학습/멀티캠퍼스_풀 스택

JAVA 문법 - abstract, 추상클래스, 추상메서드와 상속, 오버라이딩의 관계

by 개발하는 경제학도 2022. 1. 9.

강의 소개

현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.

교재로는 자바의 정석을 사용하고 있습니다.


 

absract

abstract는 '추상의', '미완성의'라는 뜻을 가진 제어자(modifier)이다.

즉, 구체적인 구현이 아직 안되었다는 뜻이다.

abstract는 클래스, 메서드 앞에 붙을 수 있다.

 

absract class Phone {  // abstract + 클래스: 추상 클래스
	abstract void call();  // abstract + 메서드: 추상 메서드
}

 

abstract + 클래스

추상 클래스라는 뜻으로, 클래스 내에 추상 메서드(abstract + 메서드. 아래에서 설명)가 선언되어 있음을 나타낸다.

(추상 클래스 내부에는 추상 메서드만 있는 것은 아니지만, 최소 1개 이상의 추상 메서드가 있는 경우

추상 클래스가 되어야 한다)

 

- 사용 이유

추상 클래스 자체로는 클래스의 역할을 온전히 하지 못하지만, 하위 클래스가 새로운 클래스로 작성되는 데에 있어 틀을 마련해준다.

ex. 같은 크기의 TV라도 기능의 차이에 따라 여러 종류의 모델이 있지만, 설계도의 90%는 동일할 것이다. 이때 공통부분을 미완성 설계도에 그려놓고, 각각의 TV가 이 미완성 설계도를 기반으로 설계도를 완성하는 것이다.

즉, 다른 클래스들이 반드시 구현해야 할 메서드가 있다면 도움을 주기 위해 사용한다.

서로 다른 여러 개 클래스에 공통 기능을 가진 메서드의 선언 용도이다.

 

- 특징

인스턴스 생성이 불가능하다. 미완성 설계도인 추상 메서드가 포함되어 있기 때문이다.

추상 클래스는 하위 클래스에서 상속을 받아서 하위 클래스에 의해서만 완성될 수밖에 없다.

(상속을 '의무화'한다. 상속을 받은 후에 메서드 오버 라이딩을 반드시 해라. 하위 클래스의 상속을 금지하는 final과 상반된다)

** 이때 오버 라이딩을 반드시 해야 하는 것은 abstract 클래스 내의 abstract 메서드들만 해당한다.

 

 

abstract + 메서드

abstract + 메서드는 추상 메서드라 하는데, 메서드에서 선언 부만 구현되어 있는 메서드이다. (메서드에는 선언부와 구현부가 있다.)

따라서 아래와 같이 선언부에 해당하는 ()만 있고, 구현부에 해당하는 {}는 중괄호를 포함하여 아예 적지 않는다.

abstract 리턴타입 추상메서드이름();

이 추상 메서드는 하위 클래스에서 반드시 상속받은 후, 오버 라이딩을 해야만 사용할 수 있다.

 

- 사용 이유

추상 클래스를 상속받은 하위 클래스가 반드시 추상 메서드를 구현하도록 의무화하기 위해 사용한다.

만약 일반 메서드로 구현한다면, 사용자는 이 메서드를 구현할 수도 있고 하지 않을 수도 있다.

하지만 추상 메서드가 포함된 추상 클래스를 상속받은 모든 하위(자식) 클래스는 추상 메서드를 구현해야만 인스턴스를 생성할 수 있어, 반드시 구현해야 한다.

absract class Phone {  // abstract + 클래스: 추상 클래스
	abstract void call();  // abstract + 메서드: 추상 메서드
}

class SmartPhone extends Phone { // 상속받은 하위 클래스
	void call() { 
    Sytem.out.println("SmartPhone call");  // 추상 메서드를 오버라이딩
    }
}

 

- 특징

선언부는 통일되어야 한다.

부모 타입으로 자동 형 변환하여 하위 클래스를 묶어서 배열로도 사용할 수 있다. 

추상 클래스에서도 형 변환 규칙이 동일하게 적용된다.

 

 

출처: 자바의 정석(남궁 성 저), 멀티캠퍼스

댓글