지구정복

[JAVA] 추상 클래스 본문

데이터 엔지니어링 정복/JAVA & JSP

[JAVA] 추상 클래스

eeaarrtthh 2020. 11. 4. 06:25
728x90
반응형

추상은 실체 간에 공통되는 특성을 추출한 것을 말한다.

예를 들어 새, 곤충, 물고기 등의 실체에서 공통되는 특성을 추출해보면 동물이라는 공통점이 있다.

 

자바에서도 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 하고, 이 클래스들의 공통적인 특성을 추출해서

선언한 클래스를 추상 클래스라고 한다.

 

추상클래스가 부모, 실체 클래스가 자식이고 실체 클래스는 추상 클래스의 모든 특성(필드, 메소드)을 물려받고, 

추가적인 특성을 가질 수 있다.

 

ㅁ 추상 클래스의 용도

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

실체 클래스를 여러명이 설계하면 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다.

따라서 실체 클래스에서 공통적으로 사용하는 필드와 메소드는 추상클래스에서 정의해서

같은 이름을 사용하게 한다.

 

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

공통적인 필드와 메소드는 추상 클래스에 모두 선언해두고, 다른 점만 실체 클래스에 선언하면 실체 클래스를 작성하는

시간을 절약할 수 있다.

 

 

 

ㅁ 추상 클래스의 선언

클래스 선언에 abstract 키워드를 붙여야 한다. 이 키워드를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고

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

public abstract calss 클래스 {
    //필드
    //생성자
    //메소드
}

 

아래 예제에서 실행클래스에서는 추상 클래스인Phone 객체를 new 연산자로 만들 수 없다.

추상 클래스(부모)
자식 클래스
실행 클래스

 

 

 

ㅁ 추상 메소드와 재정의

실체 클래스에서 메소드를 정의하는데 공통된 이름을 가지고 있지만 메소드 내용이 다른 경우도 있습니다. 

 

예를 들어 동물이 우는 소리를 sound() 메소드라고 정의한다.

이때 강아지는 "멍멍"의 소리를 내야하고, 고양이는 "야옹"의 소리를 내야한다.

 

위에 예시처럼 운다는 특성을 같아서 메소드 이름을 sound()라고 지었지만 안에 기능은 다를 경우 추상 메소드를

사용해야 한다.

 

추상 클래스는 추상 메소드를 선언할 수 있다. 아래는 추상메소드 선언 방법이다.

일반적인 메소드처럼 중괄호 {} 가 없다.

[public | protected] abstract 리턴타입 메소드이름(매개변수, ...);

추상 클래스 설계 시 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우 해당 메소드를 추상 메소드로 선언한다. 자식 클래스는 반드시 추상메소드를 재정의해서 실행 내용을 작성해야하는데

만일 작성하지 않으면 컴파일에러가 발생한다.

 

추상 클래스(부모)
자식 클래스1: 추상 메소드 재정의
자식 클래스2: 추상 메소드 재정의

실행 클래스에서 3가지 방법으로 재정의된 추상 메소드를 사용해본다.

첫 번째는 단순히 자식 클래스들의 객체를 만들어서 메소드 사용

두 번째는 자식 클래스 객체를 부모 타입으로 자동 타입 변환후에 메소드호출

    (자식 클래스에서 재정의된 메소드가 호출됨)

세 번째는 부모타입 변수를 매개변수로 갖는 새로운 메소드를 만들고 메소드 호출시 매개변수로 자식 객체를 넣어주면

    자동 타입 변환돼서 animal.sound()가 실행

실행 클래스

 

 


광고타임


 

 

출처

혼자공부하는자바 - 신용권

728x90
반응형
Comments