happy cat image

everdevel

Web Technology, 에버디벨

UI 변경

EEOS

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

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

트레이트

이제 상속도 필요없다. 너와 나는 수평관계
자식 클래스가 어느덧 성장하여 나이도 있고 취업도 해서 부모와의 상속관계를 정리하고 독립적으로 일어서려고합니다.
표현이 이상하네요.
클래스에서 특정한 기능을 사용하기 위해서 부모 클래스와의 상속관계를 유지했어야 합니다.
하지만 이런 상속관계가 아닌 데려오는(?) 개념으로 트레이트가 있습니다.
즉 클래스와 클래스간에 상속을 받지 않고 너를 나에게 삽입하는 개념이라고 생각하시면 됩니다.
또 하나 클래스는 2개의 부모클래스로부터 상속을 받을 수 없습니다.

다음은 클래스를 확인해주세요.

그럼 예제를 통해서 2개 이상의 클래스로부터 상속가능한지 볼까요?

<?php
    class Parent
    {
    }

    class Parent2
    {
    }

    class mickey extends Parent, Prent2
    {
    }

    $mickey = new mickey;
?>

보시는 바와 같이 불가해요. trait는 여러개를 사용할 수 있어요. 그리고 상속개념이 아닌 삽입개념이에요.
내 위에 너가 있는게 아닌 너가 있으면 나한테 잠시 뎃고 온다 이렇게 생각하시면 됩니다.
trait의 사용법은 class와 비슷하지만 trait의 인스턴스를 생성할 수는 없고 클래스를 통해서 트레이트의 메소드를 사용할 수 있어요.

trait 사용 방법

trait 트레이트명{}

그리고 클래스에서 트레이트를 사용하려면 use 키워드를 사용해요.

트레이트 삽입 방법

trait 트레이트명{}
class 클래스명
{
    use 트레이트명;
}

그럼 트레이트에 메소드도 선언해서 호출해볼까요?

<?php
    trait disney
    {
        public function mickey()
        {
            return '디즈니의 시작 미키마우스';
        }
    }

    class marvel
    {
        use disney;
    }

    $marvel = new marvel;
    echo $marvel->mickey();
?>

또 한개의 클래스에서 여러 트레이트를 사용할 수 있어요.

<?php
    trait disney
    {
        public function mickey()
        {
            return '디즈니의 시작 미키마우스';
        }
    }

    trait TokyoDisneyLand
    {
        public function duffyAndFriends()
        {
            return '우리는 자체 캐릭터 더피를 만들어서 다른 나라 디즈니에 수출하고 있어';
        }
    }

    trait HongkongDisneyLand
    {
        public function duffyhk()
        {
            return 'TDL 고마워 홍콩의 어린이들이 더피를 매우 좋아하고 있어';
        }
    }

    class marvel
    {
        use disney, TokyoDisneyLand, HongkongDisneyLand;
    }

    $marvel = new marvel;
    echo $marvel->mickey();
    echo '<br>';
    echo $marvel->duffyAndFriends();
    echo '<br>';
    echo $marvel->duffyhk();
?>

트레이트에 물론 프로퍼티도 사용할 수 있습니다.

<?php
    trait disney
    {
        public $disney = 'disney';
        public function mickey()
        {
            return '디즈니의 시작 미키마우스';
        }
    }

    class marvel
    {
        use disney;
    }

    $marvel = new marvel;
    echo $marvel->mickey();
    echo '<br>';
    echo $marvel->disney;
?>

자 이렇게, 상속이 아닌 삽입의 개념으로 사용할 수 있는 trait에 대해서 알아봤어요.
여러가지것들을 사용해야한다면 클래스보다는 상속이 좋겠네요. 여러 트레이트를 삽입했는데 메소드명이 같으면 오류가 발생합니다.
다음에는 이럴때 어떻게 해야할지 알아봅시다.

2019년 에버디벨이 제안하는 클라우드 개발환경(EEOS)이 드디어 오픈했습니다.
이제 개발환경구축없이 웹브라우저에서 웹개발하자
HTML5, CSS3, JavaScript를 넘어 MySQL, PHP까지
앞으로 지원 언어는 더 늘어날 예정 react, node, angular등
웹브라우저만 있다면 기기도 가리지 않아요. 이제 아이패드에서도 웹개발해요.!!
자기만의 클라우드 에디터, 저장공간, 데이터베이스, 접속 URL(eeosXXX.adjkl.com/eeos/)을 제공해요.
현재 웹코딩 시작하기와 PHP200 독자는 mybook(책과 관련된 기능 제공)에서 사용할 수 있습니다.

EEOS 신청하기 EEOS 알아보기

강좌로 돌아가기