개발 일기

추상클래스란? 본문

Java&Spring/Java

추상클래스란?

flow123 2021. 12. 12. 22:28

추상클래스의 특징 / 정의 

-추상클래스는 반드시 상속을 받아야 한다. (다른 말로는 상속을 하기 위해 만든 클래스다) 

-추상클래스는 직접적으로 객체 인스턴스를 생성할 수 없다. 

-추상 클래스는 완전하지 않은 클래스이다. 

-부족하다는 뜻일 수도 있지만, 한편으로는 다르게 확장될 수 있는 가능성을 지닌다.

이 가능성 덕분에 좀 더 확장 가능하고 다양한 프로그램을 개발할 수 있다.

새로운 클래스를 작성하는 데 밑바탕이 되는, 설계로서의 틀을 갖추고 클래스를 작성하게 도와준다. 

-상속을 받은 추상 메서드는 반드시 구현을 해야한다. 

-추상 클래스는 항상 추상 메서드를 포함한다. 추상 메서드는 구현 코드가 없다. 

구현코드가 없다는 것은 함수 몸체가 없다는 것이다. (몸체: {}를 포함한 내용. {}만으로 함수 몸체가 됨) 

 

다음 예제를 보자. 

아래와 같이 클래스를 생성하면, 구현부를 생성하지 않은 첫 두 개의 메서드에 빨간 줄이 표시된다. 

(1) add Body (2)메서드를 추상 메서드로 바꾸세요 (abstract) 예약어 써라. 라는 가이드를 준다. 

그런데 이번에는 Computer 에도 빨간 줄이 생겼다. 

추상메서드가 속한 클래스를 abstract(추상) 클래스로 선언하지 않았기 때문. 

 

abtract vs 일반 메서드의 차이. 

turnOn(), turnOff() 같은 구현코드는, computer 를 상속받는 클래스 중 공통임. 

하지만 display(), typing()은 하위 클래스에 따라 구현이 달라질 수 있다. 

 

Computer를 상속받는 Desktop 클래스를 만들어보자. 

아래 메시지에서 볼 수 있듯, 추상 클래스를 상속 받은 하위클래스는

(1) 구현되지 않은 메서드를 구현하거나 (2) 클래스를 abstract으로 만들어야 한다. 

첫 번째 옵션을 선택해보자. 메서드의 몸체도 만들어준다. 

 

NoteBook 이라는 클래스도 구현한다. 

이 클래스에서는 메서드를 하나만 구현하고, 대신 추상클래스로 만든다. 그러면 에러가 뜨지 않는다. 

NoteBook 클래스를 Desktop 처럼 구현하려면, 다른 클래스에서 다시 상속받는 방법이 있다. 

MyNoteBook 은 모든 추상메서드가 구현되었기 때문에, abstract 예약어를 사용하지 않는다. 

 

왜 Computer 와 NoteBook 만 빨간 줄이 뜰까? 

그대로 실행시 아래와 같은 에러가 뜬다. 

즉, 추상 클래스는 모든 메서드가 구현 되었을 때만 인스턴스로 생성할 수 있다. 

	Cannot instantiate the type Computer
	Cannot instantiate the type NoteBook

 

단 Computer c1 = new Desktop(); 처럼 형변환은 가능한데, 이는 Computer 가 다른 모든 클래스의 부모 클래스이기 때문이다. 

 

왜 turnOn() 같은 메서드는 구현하고,display() 같은 메서드는 구현하지 않았을까? 

하위 클래스에서 각각 다르게 구현하기 때문이다. 

typing()은 Desktop에서는 구현되지만, NoteBook 에서는 구현되지 않는다. 

 

출처: 자바프로그래밍 입문 

'Java&Spring > Java' 카테고리의 다른 글

제네릭, 타입변수  (0) 2021.12.13
인터페이스란?  (0) 2021.12.12
classpath:/static/ 경로 설정  (0) 2021.11.27
인텔리제이 Application properties 파일  (0) 2021.11.26
TIL - 스프링 프로젝트 에러 일기  (1) 2021.11.25
Comments