PHP
인터페이스
인터페이스
인터페이스는 클래스 사용의 규칙을 정해야 할 때 사용합니다.
여기에서 말하는 규칙이라함은 어떤 클래스에 어떤 메소드를 선언해야하는지 어떤 프로퍼티를 선언해야하는지를 의미합니다.
이 귀찮은걸 왜 해야 하는지 궁금하실 텐데요.
개인 프로젝트로 혼자서만 어떠한것을 할 때는 크게 상관없습니다.
하지만 보통 회사에서는 하나의 프로젝트를 여러명이서 작업을 하게 됩니다.
이 사람 저 사람이 계획없이 만지다보면 관리가 어렵습니다.
지금은 시대가 좋아져서 코드 형상관리 프로그램이라던지 있지만
예전에는 누가 잘못하면 거짓말하기 딱 좋은 시대가 되었죠.
아무튼 이런 저런 이유로 관리의 이슈때문에 클래스의 사용 규약을 필요로 하는 시점이 온거죠.
사실 저는 실무하면서 한번도 사용해 본적이 없습니다.
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(); ?>
결과는 바로 아래에서 확인할 수 있습니다.
위 코드의 결과
이렇게 보니까 인터페이스를 왜 쓰는지 잘 모르시겠죠?
그럼 인터페이스에서 선언한 메소드인데 클래스에서 사용하지 않아 볼까요?
아래는 클래스에서 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; ?>
결과는 바로 아래에서 확인할 수 있습니다.
위 코드의 결과
인터페이스에서는 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(); ?>
결과는 바로 아래에서 확인할 수 있습니다.
위 코드의 결과
여러명이서 하나의 프로젝트를 진행할 때 어떠한 규칙이 발생했을 때 인터페이스를 사옹하면 사전에 오류를 방지해서 사용하기 좋을 것 같네요. ^-^*
인터페이스도 상속할 수 있습니다. 다음 시간에는 인터페이스 상속에 대해서 알아볼게요.
//=$langList['bottomThankyou'][$langMode]?>