[Java] 추상 클래스

2019. 10. 26. 23:17
반응형

오늘은 Java 추상 클래스 개 (개념) 이 (사용 이유) 문 (문법 및 예시) 시작하겠습니다.

 

개념


추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미합니다. 라고 적혀져있습니다.

 

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

3번 강조

 

구체적 예시를 들어보겠습니다.

 

화장품 클래스

화장품 제조 메소드

화장품 A - 물 30% 에센스 30% 거품 40% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 B - 물 80% 에센스 10% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

화장품 C - 물 50% 에센스 40% 거품 10% (화장품 클래스 상속시 제조메소드(오버라이딩) 필수 사용)

 

메소드를 공통적으로 쓰는 것

 

제조 메소드가 공통으로 쓰인다.

화장품 클래스 상속-A,B,C

 

실체클래스란?

실체가 드러나는 클래스 추상클래스는 실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 추상적인 클래스이다.

 

추상 클래스 : 실체클래스들의 공통적인 특성을 추출하여 틀을 잡아놓은 클래스

실체 클래스 : 객체를 직접 생성할  있는 클래스

추상클래스와 실체클래스는 상속적인 관계

 

 

 

사용 이유


자바에서 추상 메소드를 선언하여 사용하는 목적 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함

 

공통된 필드와 메서드를 통일할 목적

여러 명의 개발자가 동시에 개발했을 경우 추상메소드를 사용하지 않으면 메소드 이름,매개변수가 모두 제 각각일것이다. 나중에 뜯어고칠때 고생할 것이다.

 

유지보수,통일성 

 

실체클래스 구현시, 시간절약

화장품 클래스가 프레임워크가 되는 셈이다.

즉 뼈대가 만들어져있어 그 안에 내용만 구현하면 되니 시간절약이 많이 되고 효율적으로 일을 할 수 있다.

화장품 제조를 하라는데 화장품에 뭐가들어가는지도 모르는데 

추상 메소드를 사용한다면 그 안에 들어갈 매개변수가 있으므로 안에 내용만 구현하면 된다 

 

규격에 맞는 실체클래스 구현

화장품 클래스 규격

화장품 제조 메소드 사용시 물은 최소 20% 최대 70%로만 구현한다.

화장품 제조 메소드 사용시 에센스는 최소 05% 최대 20%로만 구현한다.

화장품 제조 메소드 사용시 거품은 최소 20% 최대 50%로만 구현한다.

 

이런식에 규격을 정하고 내용을 만들기 때문에 큰 틀에서 벗어날래야 벗어날 수 없다.

 

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

추상클래스를 상속받은 실체클래스들은 반드시 추상메서드를 재정의(오버라이딩)해서 실행 내용을 작성해야 한다.

3번 강조

 

규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부만 수정하면 손 쉽게 수정이 가능하기 때문이다.

 

 

 

문법


추상클래스나 추상메소드를 선언하기 위해서는 이름 앞에 abstract이라는 키워드를 추가하면 된다.

 

abstract class 클래스이름 {

    ...

    abstract 반환타입 메소드이름();

    ...

}

abstract class Cosmetics { abstract void produce(int water,int essence,int bubble); }

class EAXXIE extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{ System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

class DxG extends Cosmetics { 
@Override
void produce(int water,int essence,int bubble) 
{  water += 5;
System.out.println("물 "+water+"%"+" 에센스 "+essence+"%"+" 거품 "+bubble+"%"); } }

 

public class Ex {

    public static void main(String[] args) {

        // Cosmetics c = new Cosmetics(); // 추상 클래스는 인스턴스를 생성할 수 없음.

        EAXXIE c = new EAXXIE(); // 클래스 인스턴스 생성

        DxG d = new DxG(); // 클래스 인스턴스 생성

 

        c.produce(30,30,40); // 추상 메소드 재정의(오버라이딩)

        d.produce(70,20,10); // 추상 메소드 재정의(오버라이딩)

    }

}

 

 

 

정리

1. 추상클래스는 실체클래스의 공통적인 부분(변수,메서드)를 추출해서 선언한 클래스

2. 추상클래스는 객체를 생성불가 아직은 실체성이 없고 구체적이지 않기 때문에!

3. 추상클래스와 실체클래스는 상속관계!

4. 규격을 정해 큰 틀에서 벗어나지 않아 손 쉽게 수정 가능

반응형

+ Recent posts