상세 컨텐츠

본문 제목

추상클래스(Abstract Class) _ 자바 프로그램에 무슨 추상이냐?

java_자바

by 쫑메이 2020. 6. 13. 00:55

본문

 

 

 

 

 


 

 

 

 

 

 

아니 컴퓨터 프로그램 언어에서

왜 철학적인 뉘앙스를 풍기는 추상이라는 말을 쓰는지

 

추상클래스(Abstract Class) 낱낱이 파헤쳐보자


 

 

 


추상_키워드 살펴보기


 

 

추상이라는 말 자체가 주는 느낌이

“구체적이지 않고 대충 뭉뚱그린 그런 모양새 아닌가"

(지극히 주관적인 주인장 생각)

 

 

자바에 나오는 추상 클래스 역시

"구체적이지 않다. 보디(body)가 없다. 껍데기만 만든다. 그

래서 구현부가 없다, 호출되면 안 된다”

로 이어진다.

 

 

 

 

자바에서 부모가 있지만

자녀 클래스에서 어차피 재정의해서 사용되어야 할 경우가 있다

 

 

부모 입장에서는 구현할 필요가 없거나 자녀 레벨에서 아직 작성할 수 없는 메서드에 대해

선언부만 작성하고, 구현부를 세미콜론(;)으로 대체하고,

구현부가 없다는 의미로 abstract 키워드를 선언부에 추가한다.

(**이 부분이 추상클래스의 형식이 된다**)

 

 

 

 

또한 클래스가 abstract 메서드를 포함하고 있는 경우

반드시 클래스 선언부에도 abstract 키워드를 추가해야 한다

(**추상클래스에서 꼭 지켜야 할 부분, 메서드와 클래스 abstract 통일성)

 

 

 

이것이 바로 추상 클래스!!!!!

 

자세히 살펴보자~

 

 

 

 

 

추상메서드(abstract method)_ 특징


 

 

 

- 메서드 바디(=구현부 { })가 없는 메서드

- 메서드 리턴 타입 앞에 abstract 키워드를 사용

- 구현부{ } 대신 세미콜론(:)을 명시

- 메서드의 실행할 코드 부분인 구현부가 없으므로 외부에서 호출되면 안 되는 메서드

 

 

 

 

 

 

추상메서드(abstract method)_ 기본 문법

 

<형식>

[제한자] abstract 리턴 타입 메서 두 명([파라미터...]);

 

 

 

 

 


 

 

 

 

 

추상클래스(abstract class)_ 특징


 

 

1)객체 생성이 불가능한 클래스, 미완성 클래스라고도 함

=> 추상메서드가 호출되면 안 되기 때문에 인스턴스 생성을 못하도록 차단

 

 

 

 

 

2)추상메서드를 포함하는 클래스는 반드시 추상 클래스로 정의되어야 한다

단, 모든 추상클래스가 추상메서드를 포함하는 것은 아니다

 

 

 

3) 추상클래스는 추상메서드, 일반메서드, 생성자, 인스턴스 변수 등을 가질 수 있다

 

 

4)추상클래스를 상속받는 서브클래스에서는

반드시 추상클래스 내의 추상메서드에 대한오버라이딩을 수행해야 한다

=>오버라이딩을 하지 않을 경우 상속 불가

 

 

 

이때, 상속받은 서브클래스를 추상클래스로 정의하면 오버라이딩 생략 가능,

단, 또 다른 서브클래스를 생성하여 언젠가는 오버라이딩을 해야 한다!

 

 

 

 

 

*추상 클래스를 왜 쓰는가?*

추상메서드에 대한 구현을 강제함으로써

코드의 강제성 및 통일성을 강요를 위해서다

 

 

 

 

 

 

추상클래스(abstract class)_기본 문법


 

 

[제한자] abstract class 클래스명 {

인스턴스 변수

생성자

추상메서드

일반메서드

}

 

 

 

 

 

 

 

추상메서드(abstract method)_ 서브클래스 오버라이딩


 

 

추상메서드가 포함된 추상클래스를 상속받는 서브클래스에서는

반드시 추상메서드를 오버라이딩 하여 메서드 보디를 { }를 구현해야 한다

 

 

 

 

 

 

오버라이딩 하지 않을 경우 오류 발생!

 

 

 

 

 

 

 

 

추상클래스는 인스턴스 생성이 불가능하므로 컴파일 에러 발생!!!

 

 

 

 

 

 

 

 

 

그래서 추상클래스를 상속받아 정의한 서브클래스의 인스턴스를

생성하여 사용해야 한다

 

 

 

 

 

 

 

 

 

 

추상클래스는 레퍼런스 변수의 타입으로 사용할 수 있다=즉 다형성 활용 가능

업캐스팅 후 오버라이딩 된 추상메서드도 호출 가능함

 

 

 

 

 

 

 

 

 

 

[비교하기] 일반 메서드--> 추상메서드 사용

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

추상클래스와 일반클래스의 차이점


추상클래스와 일반클래스의 차이점은 추상메서드를 가지고 있다 없다의 차이

추상메서드가 있으면 구현부를 실현하기 위해서

오버라이딩 강제해서 추상메서드의 구현부를 만들어야 한다

 

 

 

추상클래스 인스턴스 생성이 안된다

왜?

추상메서드를 가지고 있을 수 있어서

생긴게 메서드 바디가 없다. 즉 실행할 코드가 없다.

중괄호 없고, 세미콜론넣고, abstract 키워가 들어간다

즉, abstract가 붙으면 new 객체생성이 안된다

 

 

 

 

 

 


ㅣ읽느라 수고 많으셨어요~ㅣ

 


 

 

 

 

 


 

 

 

 

 

부족한 글을 읽어주셔서 감사드립니다

아직 부족한 게 많으니

틀린 곳이 있다면

조언의 말씀 꼭 부탁드립니다!!!!

 

 

 

반응형

관련글 더보기