단단히

클래스의 상속 _ 추상 클래스 본문

Java/개념 정리

클래스의 상속 _ 추상 클래스

이게아닌데 2022. 6. 10. 11:32

[ 추상 클래스의 개념 ]

 

객체를 직접 생성할 수 있는 클래스는 실체 클래스이다.

이런 실체 클래스들의 공통적인 부분(특성)만 모아서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속관계에 있다.

추상 클래스가 부모이고 실체 클래스가 자식 클래스로 구현된다.

운동이라는 추상클래스에 축구, 농구, 야구 등 실체 자식 클래스를 만들 수 있는 것을 예시로 들 수 있다.

실체 클래스는 추상 클래스의 모든 특성을 물려받고 각각 개인적인 특성(필드, 메서드)을 추가할 수 있다.

추상 클래스는 실체 클래스의 공통부분을 뽑아서 만들었기 때문에 객체를 직접 생성하지 못하는 추상화된 클래스이다.

즉, 추상 클래스는 new 연산자를 사용해서 객체를 생성하지 못한다.

 

Exercise exercise = new Exercise();     X

 

추상클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다.

그래서 추상 클래스는 extends 뒤에만 올 수있는 클래스이다.

 

class Ant extend Exercise { ---}     O

 

추상클래스는 메서드를 강제할 수 있다. >> 강제성이 있다.

기본적으로 추상클래스에서 선언한 메서드는 자식클래스에서 선언(override 사용)을 해야한다.

(자식 클래스에서 선언을 하지 않는다면 자식클래스를 추상클래스(abstract)로 만들어야한다.)

 

[ 추상클래스의 용도 ]

1. 공통된 필드와 메소드의 이름 통일

 실체 클래스를 여러 사람이 설계할 경우, 실체 클래스마다 필드와 메서드가 각각 다른 이름을 가질 수 있다.

 예를 들어 누군가는 성공을 Success()라고 이름짓고 누군가는 pass()라고 이름지어 설계할 수 있다.

 그래서 공통적인 기능인 성공은 추상 메서드에 Success()를 선언하고 실체 메서드에서 상속을 받아 사용하   여 통일할 수 있다.

 

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

 위의 상황과 같이 Success()를 추상메서드에 선언하고 다른 특성만 실체 클래스에 선언하게 되면 실체 클래 스를 작성하는데 시간을 절약할 수 있다.

 

[ 추상클래스 선언 ]

추상 클래스는 클래스 선언에 abstract를 붙여야한다.

public abstract class 클래스 {

      // 필드 /  생성자 / 메소드

}

위에서 말했듯이 추상 클래스는 부모 클래스만 존재한다.

그래서 abstract를 붙이게 되면 new 연산자를 이용해서 객체를 만들지 못하고

상속을 통해 자식 클래스만 만들 수 있다.

물론 new연산자만 사용을 못할 뿐이지 일반 클래스와 동일하게 필드, 생성자. 메서드를 선언할 수 있다.

또한 자식 객체가 생성될 때 super(..)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 반드시 생성자가 있어야한다.

 

 

[ 추상 메소드와 오버라이딩 ]

추상 클래스는 실체 클래스의 멤버(필드, 메서드)를 통일화하는데 목적이 있다.

그런데 메서드의 선언만 통일화하고, 실행 내용은 실체 클래스마다 달라야 하는 경우가 있다.

구기종목으로 예를 들면 공은 있어야하지만 각 종목마다 공의 크기는 다르기때문에

추상메서드에선 공의 크기를 작성할 수도 없고 할 필요도 없다.

(자식클래스에서 재활용을 해야하기때문에)

 

오버라이딩 시 자동 생성된 실체 메서드에 @override가 붙는데 생략이 가능하다.

하지만 컴파일시 컴파일러가 인터페이스에 대한 정확한 실체 메서드인지 체크하도록 한다.

잘못된 실체메서드가 생성되지않도록 해주기때문에 붙여주는 것이 좋다.

'Java > 개념 정리' 카테고리의 다른 글

배열 _ 다차원 배열  (0) 2022.06.15
인터페이스  (0) 2022.06.13
메모리 구조  (0) 2022.06.01
클래스의 상속  (0) 2022.05.30
참조 자료형, 객체, 커스텀 클래스  (0) 2022.05.24
Comments