happy cat image

everdevel

Web Technology, 에버디벨

EEOS

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

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

인터페이스

인터페이스는 클래스 사용의 규칙을 정해야 할 때 사용합니다.
여기에서 말하는 규칙이라함은 어떤 클래스에 어떤 메소드를 선언해야하는지 어떤 프로퍼티를 선언해야하는지를 의미합니다.
이 귀찮은걸 왜 해야 하는지 궁금하실 텐데요.
개인 프로젝트로 혼자서만 어떠한것을 할 때는 크게 상관없습니다.
하지만 보통 회사에서는 하나의 프로젝트를 여러명이서 작업을 하게 됩니다.
이 사람 저 사람이 계획없이 만지다보면 관리가 어렵습니다.
지금은 시대가 좋아져서 코드 형상관리 프로그램이라던지 있지만
예전에는 누가 잘못하면 거짓말하기 딱 좋은 시대가 되었죠.

아무튼 이런 저런 이유로 관리의 이슈때문에 클래스의 사용 규약을 필요로 하는 시점이 온거죠. 사실 저는 실무하면서 한번도 사용해 본적이 없습니다.

interface 사용 방법

interface 인터페이스명
{
}

예를들어 인터페이스 이름이 howto이고 클래스에서 run(), stop(), turn() 메소드를 필수로 생성해야 한다면 다음과 같이 작성해요.

<?php

    interface howto
    {
        public function run();

        public function stop();

        public function turn();

    }
?>

클래스에 인터페이스를 적용하려면 implements 키워드를 사용합니다.

implements 사용 방법

class 클래스명 implements 인터페이스명
{
}

그럼 한번 해볼까요?

<?php

    interface howto
    {
        public function run();

        public function stop();

        public function turn();

    }

    class Car implements howto
    {
        public function run()
        {
            return '달립니다.';
        }

        public function stop()
        {
            return '멈춥니다.';
        }

        public function turn()
        {
            return '회전합니다.';
        }
    }

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

(로그인을 하시면 위의 코드를 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 순식간에 로그인 하세요.)

위 코드의 결과

이렇게 보니까 인터페이스를 왜 쓰는지 잘 모르시겠죠?
그럼 인터페이스에서 선언한 메소드인데 클래스에서 사용하지 않아 볼까요?
아래는 클래스에서 turn()메소드를 사용하지 않아볼게요.

<?php

    interface howto
    {
        public function run();

        public function stop();

        public function turn();

    }

    class Car implements howto
    {
        public function run()
        {
            return '달립니다.';
        }

        public function stop()
        {
            return '멈춥니다.';
        }
    }
    $hello = new Car;
?>

(로그인을 하시면 위의 코드를 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 순식간에 로그인 하세요.)

위 코드의 결과

인터페이스에서는 turn()메소드를 필수로 사용하라고 했는데, 클래스에서는 turn() 메소드를 선언하지 않아 오류가 발생합니다.
반대로 인터페이스에 선언되지 않은 메소드를 클래스에서 사용하는것은 문제없습니다.
매번 기능을 업데이트할텐데 그때마다 인터페이스에 넣어야 한다면 관리하기 어렵겠죠.
다행히 필수적인 메소드를 지정하게끔 설계되어있습니다.
인터페이스에 명시되지 않은 메소드를 클래스에 넣어서 정상작동하는지 확인해 볼게요.

<?php

    interface howto
    {
        public function run();

        public function stop();

        public function turn();

    }

    class Car implements howto
    {
        public function run()
        {
            return '달립니다.';
        }

        public function stop()
        {
            return '멈춥니다.';
        }

        public function turn()
        {
            return '회전합니다.';
        }

        public function auto()
        {
            return '자동으로 운전합니다.';
        }
    }

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

(로그인을 하시면 위의 코드를 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 순식간에 로그인 하세요.)

위 코드의 결과

여러명이서 하나의 프로젝트를 진행할 때 어떠한 규칙이 발생했을 때 인터페이스를 사옹하면 사전에 오류를 방지해서 사용하기 좋을 것 같네요. ^-^*
인터페이스도 상속할 수 있습니다. 다음 시간에는 인터페이스 상속에 대해서 알아볼게요.


    
    

강좌로 돌아가기

댓글 0개

정렬기준