이번 시간에는 인터페이스와 특성에 대해 알아보았다.
인터페이스
php 인터페이스란? - 인터페이스를 이용하면 클래스에서 구현해야 하는 메서드를 정할 수 있다.
인터페이스를 사용하면 클래스와 달리 여러 개를 상속할 수 있다.
인터페이스를 상속받고 메서드를 사용하지 않으면 에러가 발생한다.
<html>
<head>
<h1>동물 사운드</h1>
<?php
// 인터페이스를 'Animal'로 정의
interface Animal {
//'Sounds' 함수 정의
public function Sounds();
}
//'Cat' 클래스를 'Animal'인터페이스로 상속
class Cat implements Animal {
public function Sounds() {
echo "고양이: 야옹<br>";
}
}
//'Dog' 클래스를 'Animal'인터페이스로 상속
class Dog implements Animal {
public function Sounds() {
echo "강아지: 왈<br>";
}
}
//'Owl' 클래스를 'Animal'인터페이스로 상속
class Owl implements Animal {
public function Sounds() {
echo "부엉이: 부엉<br>";
}
}
//동물 변수 생성, 목록 생성
$cat = new Cat();
$dog = new Dog();
$owl = new Owl();
$animals = array($cat, $dog, $owl);
//동물들의 소리를 출력해줌
foreach($animals as $animal) {
$animal->Sounds();
}
?>
</head>
</html>
인터페이스는 'interface' 코드로 사용할 수 있다.
위 코드에서 'implements'는 인터페이스를 상속하는 코드로,
14번 째 줄의 'class Cat implements Animal {' 코드는
'Cat' 클래스를 앞서 지정한 'Animal' 인터페이스로 상속한다는 코드이다.
위 코드는 동물들의 소리를 알려주는 것으로,
실행결과는 다음과 같다.
특성
특성이란? - 특성은 여러 클래스에서 사용할 수 있는 메서드를 선언하는 데 사용된다.
더 자세한 내용: https://www.w3schools.com/php/php_oop_traits.asp
<?php
//'msg1' 특성 선언
trait msg1 {
//'hello'함수의 명령 설정
public function hello() {
echo "안녕하세요. ";
}
}
//'msg2' 특성을 선언하고,
trait msg2 {
//'hello2'함수의 명령을 설정
public function hello2() {
echo "제 이름은 namgi 입니다.";
}
}
//'Introduce'클래스를 선언,
class Introduce {
//클래스에서 'hello' 특성 사용
use msg1;
}
//Introduce2' 클래스 선언,
class Introduce2 {
//클래스에서 'msg1'와 'msg2' 특성 사용 / 여러 특성은 콤마로 구분
use msg1, msg2;
}
$obj = new Introduce();
$obj->hello();
echo "<br>";
$obj2 = new Introduce2();
$obj2->hello();
$obj2->hello2();
?>
특성은 'trait' 코드로 사용할 수 있다.
클래스에서 특성을 사용하려면,
24번 째 줄 처럼 'use' 코드를 이용하여 사용할 수 있다.
31번 째 줄 처럼 특성은 '콤마( , )'로 여러 개를 구분할 수 있다.
위 코드는 'msg1', 'msg2' 두 가지 특성을 선언한다.
그 후 'Introduce', 'Introduce2'라는 두 개의 클래스를 만든다.
'Introduce' 클래스는 'msg1' 특성을 사용하고,
'Introduce2' 클래스는 'msg2' 특성을 사용한다.
실행 결과는 다음과 같다.
이번 회차에선 인터페이스와 특성에 대해 알아보았다.
다음 회차에서도 OOP에 대한 내용을 공부할 것이다.
'php' 카테고리의 다른 글
[php OOP] 3주차(6회차) / php 반복 가능한 객체(iterable) (2) | 2022.09.22 |
---|---|
[php OOP] 3주차(5회차) / php 네임스페이스 (1) | 2022.09.22 |
[php OOP] 3주차(3회차) / php 상속, 상수 (0) | 2022.09.18 |
[php OOP] 3주차(2회차) / php 생성자, 소멸자, 액세스 수정자 (0) | 2022.09.18 |
[php OOP] 3주차(1회차) / php OOP란?, 클래스/객체 (0) | 2022.09.18 |