로그인

검색

객체에 기본을 학습하는 것도 내부함수나 함수구조에 관해서 익숙하게 학습을 이어온 경우라면 비교적 쉽게 이해할 수 도 있지만 그렇지 않은 경우는 굉장히 어렵게 보일 수 있습니다. 또 함수 사용에 관해 이해를 하였다 해도 php에 관해 처음 알아가는 단계라면 익숙치 않은 새로운 사용이나 구조에서 낯선것을 이해하는 과정이 또 어려울 수 있습니다.

 

그러나 객체의 구조에 대해서 정확히 이해를 하지 않고 그냥 넘어간다면 더 고급 기술을 익히기는 어려울 것입니다. 이보다 쉬운 단계에서의 학습도 마찬가진 입니다. 좀 어렵게 느껴진다고 패스하거나 포기하면 안될 것 입니다. 분명 어렵다면 뭔가 학습의 과정중에 빠지거나 그냥 넘겨버린 것들이 있을 수 있습니다. 그럴때는 이전 학습내용 중 빼먹거나 잊는 것이 없나 다시 학습해 보고 그런것이 아닌 새로운 것으로 인한 이해의 어려움이라면 반복해서 계속 읽고 이해하려 하다보면 이해가 되는 순간이 오게 될 것 입니다.

 

기본 함수 사용이 아닌 함수를 보다 효율적으로 사용하기 위해 객체화 시켜서 사용을 하는데 어떤 형식으로 만들고 사용하는지 이해를 정확히 해야 겠습니다.

 

클래스, 메서드(함수), 인스턴스, 생성자 등의 용어나  public 이 의미하는 것 등을 학습 과정에서 이해할 필요가 있습니다.

 

<?php

class Entree {
    public $name;
    public $ingredients = array();

 

    public function hasIngredient($ingredient) {
        return in_array($ingredient, $this->ingredients);
    }
}

 

위와 같은 기본적인 객체화 된 코드가 있다고 한다면 

 

class 는 객체 틀 이라고 보면 될 것 같습니다. class 옆에는 해당 클래스를 특정하는 이름을 붙이게 됩니다. 함수나 클래스 모두 이름을 붙여주고 사용하고 싶은 곳에서 호출을 마음대로 할 수 있게 해주기에 필요한 형식이죠.

 

public 은 외부에서 해당 속성 또는 메서드 등을 접근할 수 있도록 해주는 키워드 입니다. 이 부분이 작용하는 것은 나중에 학습을 따로 해도 될 것 같습니다.

 

function 은 함수를 정의 할때 사용하는 것으로 class 안에서는 메서드라고 부르죠.

 

 

위 코드를 대략적으로 설명을 드리면

 

저 하나의 틀을 가지고 객체의 메서드를 실행할때 다양하게 입력값을 주입하여 그 입력의 결과를 반환 받을 수 있는 간단한 코드 입니다.

 

Entree 라는 class 이름을 가졌기에 이 이름을 지칭하면서 사용을 해야 하겠죠?

 

실행이되는 메서드는

주입한 $this->ingredients  배열 안에 $ingredient 이 존재한다면 값을 반환하는 간단한 메서드 입니다.

 

해당 반환값을 if 등에 조건으로 이용한다면 값이 있다면  true 가 됩니다.

 

그럼 어떻게 사용을 하는지 살펴보겠습니다.

객체를 생성한다고 하기도 하고 인스턴스를 생성한다고 합니다. 

저 틀을 다양하게 사용할 수 있는데 하나의 단위로 사용하는 것을 객체생성이나 인스턴스 생성이라고 이야기 합니다.
$soup = new Entree;

new Class명 이렇게 하게 되면 객체를 생성하게 되는 것 입니다. 

이것을 $soup에 할당을 한 것이죠.

 

$soup->name = '닭고기 수프';
$soup->ingredients = array('닭고기', '물');

 

new Entree 의 새로운 인스턴스로 사용될 변수를 만들어줍니다.

이번 코드에서는 $this->ingredients 에 사용될 $soup->ingredients 가 의미가 있고 위 name은 의미가 없습니다.

 

$soup 로 할당한 채로 해당 class의 메서드를 실행하게 되면 위 변수가 함께 적용이 되는 것이죠.

 

메서드 사용을 위한 준비가 되었다면 이제 실제적으로 위 인스턴스가 사용될 코드를 살펴보면


foreach (['닭고기','레몬','빵','물'] as $ing) {
    if ($soup->hasIngredient($ing)) {
        print "수프의 재료: $ing.\n";
    }
}

 

특정한 갑들(배열) 을 매서드에 대입하여 결과가 반환되어 출력이 되는 코드 입니다. 

foreach 반복문에 의해 닭고기,레몬......  들이 순서적으로  $ing 변수에 담겨서 한번씩 반복 실행이됩니다.

 

$soup->hasIngredient('닭고기')

가 실행이 되었다면 $soup 에 할당된 Entree 클래스의 hasIngredient 메서드가 실행이 되겠죠.

 

    public function hasIngredient($ingredient) {
        return in_array($ingredient, $this->ingredients);
    }

 

이부분 입니다.

 

in_array($ingredient, $this->ingredients); 

 

in_array('닭고기', array('닭고기', '물'));

이 되는 것입니다. 

 

$this->ingredients 는 객체(인스턴스)를 새롭게 정의(생성) 할때 $soup->ingredients = array('닭고기', '물'); 로 할당을 했기 때문에 이렇게 사용이 되는 것 입니다.

 

['닭고기','레몬','빵','물'] 4번의 반복된 작업을 하게 되겠네요.

 

이렇게 검사를 해서 array 에 비교하고 싶은 값이 있다면 

수프의 재료:닭고기 이렇게 출력이 되게 되는 것이죠.

 

 

 

코드를 정리해서 적어보면

 

<?php

class Entree {
    public $name;
    public $ingredients = array();

    public function hasIngredient($ingredient) {
        return in_array($ingredient, $this->ingredients);
    }
}

 

$soup = new Entree;.

$soup->name = '닭고기 수프';
$soup->ingredients = array('닭고기', '물');

 

foreach (['닭고기','레몬','빵','물'] as $ing) {
    if ($soup->hasIngredient($ing)) {
        print "수프의 재료: $ing.\n";
    }
}

 

이런식의 코드가 되며 결과는

 

수푸의 재료 : 닭고기.

수푸의 재료 : 물.

 

이렇게 됩니다.

 

 

그럼 객체화가 다양학 재사용이 가능하다고 했으니 여기에 새로운 객체(인스턴스)를 추가 생성해도 똑같이 사용이 가능해 집니다.

 

$soup = new Entree;.

$soup->name = '닭고기 수프';
$soup->ingredients = array('닭고기', '물');

 

위 객체(인스턴스) 생성(정의) 하는 부분만 추가해 주고 추가해준 객체로 메서드 실행만 해주면 되니까요.

 

$sandwich = new Entree;
$sandwich->name = '닭고기 샌드위치';
$sandwich->ingredients = array('닭고기', '빵');

 

이렇게 또 코드를 써주면 이번에는 새로운 객체(인스턴스)가 정의가 되는 것입니다. 구분을 하기 위해 $sandwich 라는 변수에 새롭게 담았다는게 눈여겨 볼 만한 정도이죠.

 

 

<?php

class Entree {
    public $name;
    public $ingredients = array();

    public function hasIngredient($ingredient) {
        return in_array($ingredient, $this->ingredients);
    }
}

 

$soup = new Entree;.

$soup->name = '닭고기 수프';
$soup->ingredients = array('닭고기', '물');

 

$sandwich = new Entree;
$sandwich->name = '닭고기 샌드위치';
$sandwich->ingredients = array('닭고기', '빵');

 

foreach (['닭고기','레몬','빵','물'] as $ing) {
    if ($soup->hasIngredient($ing)) {
        print "수프의 재료: $ing.\n";
    }

 

    if ($sandwich->hasIngredient($ing)) {
        print "샌드위치 재료: $ing.\n";
    }


}

 

 

수프의 재료: 닭고기.
샌드위치의 재료: 닭고기.
샌드위치의 재료: 빵.
수프의 재료: 물.

 

이런 결과로 샌드위치 부분이 추가가 됩니다.

 

하나의 클래스의 메서드를 여러개의 객체(인스턴스)를 정의해서 재사용이 가능한 것이 이러한 객체화의 목표라고 볼 수 있을 것 같습니다.

Who's 꿀팁관리소장

profile
라이믹스로 커뮤니티 사이트를 운영하는 비개발자 운영자 입니다.
파트너쉽 맺으실 사이트 운영자분 환영합니다.
2 추천

php 기초지식(24)

php를 학습할 수 있습니다.

  1. read more
  2. read more
  3. php 객체 확장

    Date2021.09.20 Views158 Votes2
    Read More
  4. php 객체 생성자 __construct 메서드

    Date2021.09.17 Views398 Votes2
    Read More
  5. Read More
  6. php 객체 지향의 이해 4

    Date2021.09.12 Views212 Votes2
    Read More
  7. php isset()

    Date2021.09.11 Views105 Votes2
    Read More
  8. php 변수의 영역 전역변수와 지역변수

    Date2021.08.29 Views1556 Votes2
    Read More
  9. php 함수의 반환값

    Date2021.08.28 Views136 Votes2
    Read More
  10. php 함수의 기초

    Date2021.08.25 Views155 Votes2
    Read More
  11. php 다차원 배열

    Date2021.08.14 Views411 Votes2
    Read More
  12. Read More
  13. Read More
  14. php 배열의 원소 제거 unset()

    Date2021.08.08 Views288 Votes2
    Read More
  15. Read More
  16. Read More
  17. php 배열(array)

    Date2021.07.31 Views146 Votes2
    Read More
  18. php 반복문 for, while

    Date2021.07.28 Views379 Votes2
    Read More
  19. php 증감 연산자 ++, -- 3

    Date2021.07.27 Views194 Votes2
    Read More
  20. 활용이 가장 많은 중요한 if 조건문 3

    Date2021.07.26 Views185 Votes2
    Read More
  21. php 이스케이프 \(역슬래쉬) 사용 1

    Date2021.07.24 Views632 Votes2
    Read More
  22. Read More
Prev 1 2 Next
/ 2