happy cat image

everdevel

Happiness is Here

EEOS

에버디벨 책을 학습할 수 있는 클라우드 개발 환경을 제공합니다.
개발환경구축없이 태블릿에서도 개발할 수 있는 책의 예제와 프로젝트
오직 당신을 위한 스토리지, URL, DB, 무제한 트래픽
그리고 웹기반 개발환경을 제공합니다.

더 알아보기
에버디벨이 만든 무료 클라우드 개발환경을 소개합니다.

안녕하세요. 에버디벨입니다.
저의 실수로 2020년 3월 22일,23일,24일,27일,29일 서버에 문제가 발생하여 서비스가 멈췄습니다.
지금까지 에버디벨을 찾아주신 95만명의 방문자분들에게 불편을 드려죄송합니다.
현재 에버디벨 사이트는 복구했고 eeos는 점검중에 있습니다. 빠른복구하겠습니다.
eeos의 프로젝트 파일과 데이터베이스는 안전히 백업되어 복구한 상태입니다.
이번 일을 계기로 백업시스템을 더욱 강화했습니다.
유저님들 모두 코로나 바이러스 조심하시기 바랍니다. 감사합니다. ^-^*

abstract

이번에는 abstract 키워드에 대해서 알아볼게요.
앞에서 우리는 인터페이스에 대해서 학습했습니다.
규칙을 정하는 기능을 했었죠.
abstract 키워드를 사용하면 클래스에서도 규칙을 정할 수 있습니다.
abstract 키워드를 사용하여 생성한 클래스를 추상클래스 라고 합니다.
추상클래스를 상속받은 자식클래스는 추상 부모 클래스의 규칙을 따릅니다.

클래스에 abstract 키워드 사용 방법

abstract class 클래스명{}

인터페이스와 다른점은 추상클래스에도 클래스이므로 메소드를 선언할 수 있어요 규칙도 만들수 있고요.
인터페이스 + 클래스 = 추상클래스 이렇게 보시면 됩니다. 그리고 추상 클래스내에서 자식 클래스도 꼭 선언해야하는 메소드가 있다 그러면 메소드에도 abstract 키워드를 사용합니다.

메소드에 abstract 키워드 사용 방법

abstract 접근제한자 function 메소드();

자 그럼 한번 해봅시다.
추상 클래스를 만들거에요. 그리고 그 추상 클래스를 상속받는 자식클래스도 만들어요.

<?php
    abstract class Car
    {
        //자식 클래스는 반드시 run()메소드를 만들어야 한다.
        abstract public function run();


        //아래의 메소드는 abstract가 없으므로 무관하다.
        public static function hello()
        {
            return '안녕? 나는 static 메소드야';
        }
    }

    class hello extends Car
    {
        public function disney()
        {
            return 'I Love Disney';
        }
    }

    $hello = new hello;
    echo $hello->disney();
?>

(로그인을 하시면 위의 코드를 웹에서 바로 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 에버디벨에 비밀번호 정보 제공없이 순식간에 로그인 하세요.)

위의코드에서보면 부모 클래스는 추상 클래스이며 abstract를 사용해서 run()메소드를 자식클래스가 꼭 선언해야 하는 규칙을 만들었어요.
하지만 자식 클래스는 부모 클래스의 명령을 어기고 run()메소드를 선언하지 않아 다음과 같이 오류가 발생했어요. ㅜㅜ

위 코드의 결과

자 그러면 부모 클래스의 말을 들어서 자식 클래스가 run()메소드를 선언해 볼게요.

<?php
    abstract class Car
    {
        //자식 클래스는 반드시 run()메소드를 만들어야 한다.
        abstract public function run();


        //아래의 메소드는 abstract가 없으므로 무관하다.
        public static function hello()
        {
            return '안녕? 나는 static 메소드야';
        }
    }

    class hello extends Car
    {

        public function run()
        {
            return '미키마우스야 달려';
        }

        public function disney()
        {
            return 'I Love Disney';
        }
    }

    $hello = new hello;
    echo $hello->disney();
?>

(로그인을 하시면 위의 코드를 웹에서 바로 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 에버디벨에 비밀번호 정보 제공없이 순식간에 로그인 하세요.)

위 코드는 자식클래스에서 run()메소드를 선언했어요. 이제 오류가 안나고 정상작동해요.
위 코드의 결과


추상클래스는 자식 클래스가 부모 클래스의 메소드를 호출할 수 있어요 다음의 코드처럼요.

<?php
    abstract class Car
    {
        //자식 클래스는 반드시 run()메소드를 만들어야 한다.
        abstract public function run();


        //아래의 메소드는 abstract가 없으므로 무관하다.
        public static function hello()
        {
            return '안녕? 나는 추상클래스의 메소드야';
        }
    }

    class hello extends Car
    {

        public function run()
        {
            return '미키마우스야 달려';
        }

        public function disney()
        {
            return 'I Love Disney';
        }
    }

    $hello = new hello;
    echo $hello->hello();
?>

(로그인을 하시면 위의 코드를 웹에서 바로 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 에버디벨에 비밀번호 정보 제공없이 순식간에 로그인 하세요.)

위 코드의 결과

하지만,, 추상클래스의 인스턴스를 생성할 수는 없습니다.
다음은 추상클래스의 인스턴스를 생성하는 예제입니다. 오류가 발생하죠.

<?php
    abstract class Car
    {
        //자식 클래스는 반드시 run()메소드를 만들어야 한다.
        abstract public function run();


        //아래의 메소드는 abstract가 없으므로 무관하다.
        public static function hello()
        {
            return '안녕? 나는 추상클래스의 메소드야';
        }
    }

    class hello extends Car
    {

        public function run()
        {
            return '미키마우스야 달려';
        }

        public function disney()
        {
            return 'I Love Disney';
        }
    }

    $car = new Car;
?>

(로그인을 하시면 위의 코드를 웹에서 바로 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 에버디벨에 비밀번호 정보 제공없이 순식간에 로그인 하세요.)

위 코드의 결과

이렇게 abstract 키워드의 사용방법에 대해서 알아봤어요. ^^


    
    

강좌로 돌아가기

댓글 0개

정렬기준