객체란 무엇인가? – 정의 및 활용
PHP에서 객체(Object)는 배열과 함께 대표적인 복합 데이터 타입(composite data type)입니다. 여러 종류의 값을 하나의 변수에 함께 담을 수 있으며, 객체는 내장 클래스(built-in class) 또는 사용자가 직접 정의한 클래스(user-defined class)의 인스턴스(instance)입니다.
클래스는 데이터를 담는 속성(property)뿐만 아니라, 그 데이터와 연관된 기능(메서드)까지 함께 정의합니다. 즉, 객체는 단순히 값을 저장하는 것을 넘어 관련 동작까지 하나로 묶어 관리할 수 있게 해주는 강력한 도구입니다.
기본형(scalar) 변수, 배열, 그리고 다른 객체 역시 캐스팅 연산자(casting operator)를 사용해 객체 타입으로 변환할 수 있습니다. 또한 PHP는 stdClass라는 범용 빈 클래스를 기본으로 제공하는데, 이 클래스는 속성을 동적으로 추가하거나 타입 캐스팅을 수행할 때 매우 유용하게 활용됩니다.
객체 선언 문법
클래스의 객체(인스턴스)를 생성하려면 new 키워드를 사용합니다.
class myclass
{
..
..
}
$obj = new myclass;예제 1: 클래스 인스턴스 생성하기
<?php
class SayHello{
function hello(){
echo "Hello World";
}
}
$obj = new SayHello;
$obj->hello();
?>실행 결과
Hello World
stdClass 객체는 처음 생성될 때 아무런 속성도 가지지 않습니다. 따라서 필요에 따라 속성을 동적으로 추가할 수 있습니다.
예제 2: stdClass에 속성 동적 추가
<?php $obj = new stdClass; $obj->name = "Deepak"; $obj->age = 21; $obj->marks = 75; print_r($obj); ?>
실행 결과
stdClass Object(
[name] => Deepak
[age] => 21
[marks] => 75
)배열을 객체로 변환하기
배열은 다음과 같이 (object) 캐스팅을 통해 객체로 변환할 수 있습니다. 이때 배열의 키(key)는 객체의 속성명으로, 값(value)은 속성값으로 그대로 옮겨집니다.
예제 3: 배열 → 객체 캐스팅
<?php
$arr = array("name"=>"Deepak", "age"=>21, "marks"=>75);
$obj = (object)$arr;
print_r($obj);
?>실행 결과
stdClass Object(
[name] => Deepak
[age] => 21
[marks] => 75
)객체를 배열로 변환하기
반대로, 객체도 (array) 캐스팅을 통해 배열로 변환할 수 있습니다. 객체의 속성명은 배열의 키가 됩니다.
예제 4: 객체 → 배열 캐스팅
<?php $obj = new stdClass; $obj->name = "Deepak"; $obj->age = 21; $obj->marks = 75; $arr = (array)$obj; print_r($arr); ?>
실행 결과
Array(
[name] => Deepak
[age] => 21
[marks] => 75
)스칼라 변수를 객체로 변환하기
문자열, 숫자 등 모든 스칼라 타입의 변수도 타입 캐스팅을 통해 객체로 변환할 수 있습니다. 이 경우 스칼라 변수의 값은 객체의 scalar라는 이름의 속성에 자동으로 저장됩니다.
예제 5: 스칼라 값 → 객체 캐스팅
<?php $name = "Deepak"; $age = 21; $percent = 75.50; $obj1 = (object)$name; print_r($obj1); $obj2 = (object)$age; print_r($obj2); $obj3 = (object)$percent; print_r($obj3); ?>
실행 결과
stdClass Object(
[scalar] => Deepak
)
stdClass Object(
[scalar] => 21
)
stdClass Object(
[scalar] => 75.5
)정리
PHP의 객체는 클래스 기반 프로그래밍의 핵심 요소로, 데이터와 기능을 하나로 묶어 관리할 수 있게 해줍니다. new 키워드로 인스턴스를 생성하고, stdClass를 활용하면 유연하게 속성을 동적으로 다룰 수 있습니다. 나아가 배열·스칼라 값과 객체 간의 상호 변환이 자유롭기 때문에, 실무에서 API 응답 처리나 데이터 구조 변환 작업 시에도 폭넓게 활용됩니다.