인스턴스 생성


인스턴스란 말은 앞에서 선언한 클래스를 통해 객체변수를 생성하는 것을 말합니다.

함수는 정의 후에 바로 호출하여 사용할 수 있었습니다. 하지만 객체 클래스는 선언을 했다고 해서 바로 함수처럼 호출하여 사용할 수 있는 것은 아닙니다. 사용하기 전에 인스턴스화 작업을 통해 클래스 객체를 생성을 한 번 더 해줘야 합니다. 인스턴스화는 클래스 선언된 정보를 통해 객체변수를 생성 합니다.

인스턴스화를 통하여 객체를 생성하면 클래스에 정의된 프로퍼티와 메서드를 함께 생성하여 새로운 객체를 생성 합니다. 정확히 말하면 객체를 생성하여 지정된 변수에 할당(대입)하는 것입니다. 객체변수를 통해 프로퍼티와 메서드에 접근하게 됩니다.


new 키워드


정의한 클래스를 객체 인스턴스 형태로 생성하는 방법은 매우 간단합니다.
단지 정의한 클래스명 앞에 new 키워드를 통해 변수에 대입하면 됩니다.

문법)

$인스턴스 변수 = new 클래스명;

new 키워드로 대입한 변수는 객체 데이터 타입으로 생성됩니다.

예제 파일 class-02.php

<?php
	class JinyClass
	{

		public function test($msg)
		{
			return $msg;
		}
	}

	$JinyClass = new JinyClass();
	echo "JinyClass 인스턴스<br>";
	echo $JinyClass->test("JinyClass") . "<br>";

	$obj1 = new JinyClass;
	$obj2 = new JinyClass;

	echo "클래스 인스턴스1<br>";
	echo $obj1->test(1) . "<br>";

	echo "클래스 인스턴스2<br>";
	echo $obj2->test(2) . "<br>";
?>

결과

JinyClass 인스턴스
JinyClass
클래스 인스턴스1
1
클래스 인스턴스2
2

위의 예제는 클래스 객체를 생성하는 예제입니다.
예제 소스를 살펴보면 아래와 같이 클래스를 인스턴스화하여 객체를 생성할 때 어떤 예는 변수명과 클래스명이 같은 경우를 종종 볼 수 있습니다.

$JinyClass = new JinyClass();

인스턴스 객체변수로 클래스명과 같은 이름을 사용할 수도 있습니다. 하지만 변수명과 클래스 이름은 서로 다른 의미 입니다. 객체변수는 변수이고, 클래스명은 클래스 이름이라는 것입니다. 서로 같지 않습니다. 이름만 같을 뿐 서로 영향을 주지 않습니다. 이름이 같다고 해도 왼쪽은 객체변수이고 오른쪽은 그냥 클래스명입니다.

선언된 클래스는 new 키워드를 통해 객체를 생성하면 객체는 클래스의 선언된 타입과 같습니다.

$obj1 = new JinyClass;
$obj2 = new JinyClass;

위의 예처럼 한 개의 클래스를 통해 동일한 객체 내용을 가지고 있는 데이터 타입 변수 두 개를 생성할 수 있습니다.
$obj1$obj2는 서로 다른 객체변수입니다. 하지만 동일한 클래스의 구조를 가지고 있습니다.

함수 VS 클래스


함수는 선언과 호출 2단계 작업을 한 쌍으로 사용합니다.
반면에 클래스는 선언과 인스턴스 생성, 호출 3단계의 작업을 한 쌍으로 사용합니다.