php 추상클래스에서 인터페이스를 사용할경우

조회수 485회
interface Menulist{
    public function menu(array $list);
}

abstract class Test implements Menulist{
    private $menus;
    public function __construct($menuarr=array()){
        $this->menus=$menuarr;
    }
    function menu(){
        for($i=0; $i<count($this->menus); $i++){
            echo $this->menus[$i];
        }
    }
    abstract function bmb();  
}

php 공부하던중에 나름 한번 예시로 만들어봤는데 (맞게 한건지는 모르겠습니다) 저렇게 인터페이스에 매개변수를 배열로 설정시 추상클래스에서 인터페이스의 메소드 부분에 인자를 어떻게 전달 해야되나요? 그리고 추상클래스에서 꼭 인터페이스의 메소드를 꼭 구현을 해야되는지 궁금합니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 먼저, 인터페이스와 추상클래스에서 정의한 함수의 경우 구현부에서 매개변수가 완벽하게 일치해야합니다.

    올려주신 코드에서 잘못된 부분을 적어두겠습니다.

    interface Menulist{
        public function menu(array $list);
    }
    
    abstract class Test implements Menulist{
        private $menus;
        public function __construct($menuarr=array()){
            $this->menus=$menuarr;
        }
        function menu(){ // 이라인이 function menu(array $list) { 이렇게 되어야 합니다.
            for($i=0; $i<count($this->menus); $i++){
                echo $this->menus[$i];
            }
        }
        abstract function bmb();  
    }
    

    또한 인터페이스에서 정의한 함수의 경우 그것을 상속받은 추상클래스에서는 구현을 하지않아도 됩니다.
    다만 구현클래스에서는 반드시 해당 함수를 구현해야합니다.

    비슷한 구조를 가지고있는 간단한 예제를 작성해보았습니다.

    interface Person {
        public function setFamily(array $family);
        public function getFamily();
    }
    
    abstract class Student implements Person {
        protected $family;
    }
    
    class HighClassStudent extends Student {
        public function setFamily(array $family = []) {
            $this->family = $family;
        }
        public function getFamily() {
            return $this->family;
        }
    }
    
    $highClassStudent = new HighClassStudent();
    $highClassStudent->setFamily(['엄마', '아빠', '동생', '나']);
    echo(var_dump($highClassStudent->getFamily()));
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)