Java - 추상 클래스

김민1·2023년 2월 10일
3

Java

목록 보기
6/8

추상 클래스란?

객체를 직접 생성할 수 있는 클래스 -> 실체 클래스
클래스들의 공통적인 특성(필드, 메소드)을 추출해서 선언한 클래스 -> 추상 클래스

추상 클래스와 실체 클래스는 상속 관계.
추상 클래스가 부모. 실체 클래스가 자식으로 구현, 실체 클래스는 추상 클래스의 모든 특성을 물려받음과 동시에 추가적인 특성을 가질 수 있음

추상 클래스 = 하나 이상의 추상 메소드가 포함된 클래스


추상 클래스의 용도

공통된 필드와 메소드의 이름을 통일할 목적

실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있음(데이터와 기능이 모두 동일하지만 이름만 다른 경우)

위와 같은 상황에선 객체마다 사용 방법이 달라짐 -> 괜히 헷갈리게 됨
해결안 : 추상 클래스에 필드와 메소드를 선언하고 상속해주어 필드와 메소드 이름 통일할 수 있음

실체 클래스를 작성할 때 시간 절약

공통적인 필드와 메소드는 추상 메소드에 모두 선언해두고, 다른 점만 실체 클래스에 작성
-> 실체 클래스 작성시 시간 절약 가능

일반적으로 개발 프로젝트에서 설계자와 코더는 다른 일을 수행함.
설계자는 코더에게 클래스는 어떤 구조로 작성해야 한다는 것을 알려줌

but 단순히 문서로 전달하면 코더가 필드와 메소드 이름을 다르게 작성할 수 있음.
설계자가 내용들을 추려내어 추상 클래스로 설계 규격을 만들어주면 그러한 변수를 줄일 수 있음


추상 클래스 선언

클래스 선언에 abstract 키워드를 붙이면 됨.

public abstract class 클래스 {

}

abstract를 붙이면 new 연산자를 이용해 객체를 만들 수 없음
상속을 통해 자식 클래스만 만들 수 있음

추상 클래스도 일반 클래스와 마찬가지로 필드,생성자,메소드 선언 가능
new 연산자로 직접 생성자를 호출할 순 없지만 자식 객체가 생성될 때 super를 호출,
추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 함.


추상 클래스와 재정의

추상 클래스 => 실체 클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓은 추상적인 클래스
실체 클래스의 멤버를 통일하는 데 목적이 있음

모든 실체들이 가지고 있는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 게 좋음
but 메소드의 선언만 통일하고, 실행 내용은 실체 클래스마다 달라야 하는 경우 추상 클래스 재정의 필요
재정의를 하려면 추상 메소드로 선언해두면 됨.


마치며

추상 클래스와 추상화는 엄연히 다른 개념입니다. 오히려 추상 클래스는 자식 클래스에서 반드시 재정의가 필요하기 때문에 다형성을 보장하기 위해 나타난 개념입니다.
(부모가 자식에게 명령을 내렸을 때 자식 클래스가 반드시 동작되도록 재정의한다.)

추상 클래스와 인터페이스가 헷갈렸는데
추상 클래스는 "하나 이상의 추상 메소드를 포함"이 조건이고
인터페이스는 "추상 메소드로만 이루어진다."는 조건이 있습니다.
인터페이스에 관한 내용은 추후에 기재할 예정입니다.

추상 메소드는 함수 선언부만 있고 구현부가 없는 메소드를 뜻합니다.

public abstract class 클래스 ();

추가할 사항이나 수정할 사항이 있다면 이메일이나 댓글로 연락해주세요.

profile
일단 부딪혀보자

0개의 댓글