본문 바로가기
프로그래밍/PHP

PHP 클래스(class) 기본 사용하기

by pentode 2018. 4. 9.

PHP로도 객체지향 프로그래밍을 할 수 있습니다. PHP 4 버전 때부터 쓸 수 있었고, PHP 5가 되면서 기능이 추가되고 성능이 향상되었습니다.

 

 

1. 클래스의 기본구조 및 이름 규칙

 

<?php
class Car_Engine {

	// 프로퍼티(멤버 변수)
	private $_displacement;
	public $engineName;

	// 메소드
	public function getDisplacement() {
		return $this->_displacement;
	}

	public function setDisplacement($displacement) {
		$this->_displacement = $displacement;
	}
}
?>

 

- class 키워드 다음에 클래스 이름이 나옵니다.

- 클래스 전체는 중괄호 {}로 둘러싸여 집니다.

- 안쪽에 프로퍼티와 메소드의 정의가 나옵니다.

- 프로퍼티의 정의는 보통 앞쪽에 적지만 위치는 관계가 없습니다. 뒤쪽에 나와도 되고, 중간에 나와도 됩니다.

- 프로퍼티와 메소드의 정의 앞에는 private, public 이라는 접근제어자가 붙어 있습니다. 이것은 해당 멤버를 클래스 외부에서 접근할 수 있는가를 나타냅니다.

 

클래스의 기본적인 구조를 보았습니다. 이제 클래스 이름, 프로퍼티와 메소드의 이름을 짓는 방법에 대해서 알아보겠습니다. 변수명 규칙을 따르기만 하면 문법적으로는 문제가 없지만 보통 Naming Convention(관습적인 이름짓는 규칙)을 따르게 됩니다.

 

- 클래스 이름은 대문자로 시작합니다. 여러단어로 구성될 경우 각단어의 사이는 언더스코더(_) 를 사용하여 분리하고, 각 단어의 첫자를 대문자를 사용합니다.(예, Car_Engine)

- 프로퍼티와 메소드는 소문자로 시작합니다. 여러단어로 구성될 경우 붙여서 적고, 첫단어를 제외한 단어의 첫자를 대문자로 적습니다. (예, $engineName)

- 프로퍼티와 메소드가 private인 경우 첫자를 언더스코어(_) 를 사용합니다.

 

이대로 쓰지 않아도 관습적인 규칙이라 내가 다르게 쓴다고 뭐라고 할 사람은 없을 것입니다.

 

 

2. 접근 제어자(Access Modifier)와 클래스 사용하기

 

public : 외부에서 접근이 가능합니다.

protected : 내부와 상속 받은 클래스에서 접근이 가능합니다.

private : 내부에서만 사용할 접근할 수 있습니다.

 

위에서 정의한 클래스를 사용하는 방법을 보겠습니다.

 

<?php
$engine = new Car_Engine();
$engine->setDisplacement(3.3);
$engine->engineName = "좋은 엔진";

echo $engine->getDisplacement();
echo $engine->engineName;
?>

 

클래스의 생성을 new 연산자를 사용합니다.

 

$engine = new Car_Engine();

 

이제 객체가 생성되었으므로 사용을 할 수 있습니다. public 인 멤버에 접근 할 수 있습니다. 멤버를 사용하기 위해서는 -> 연산자를 사용합니다. 메소드와 멤버 변수에 접근하는 예입니다.

 

$engine->setDisplacement(3.3);

$engine->engineName = "좋은 엔진";

 

 

private 멤버에 접근하려고 하면 에러가 발생합니다.

$engine->_displacement = 3.3; // 사용할 수 없습니다.

 

 

3. 생성자 와 $this

 

앞에서 객체를 생성할때 클래스명 뒤에 괄호를 사용했습니다.

 

$engine = new Car_Engine();

 

이 부분이 생성자를 호출하는 부분입니다. 생성자는 객체가 생성될때 실행되는 특수한 메소드 입니다. 생성자를 호출하지 않을 경우 다음과 같이 생성할 수도 있습니다.

 

$engine = new Car_Engine;

 

 

생성자는 주로 객체를 생성시 초기값을 주기 위해서 사용합니다. 생성자는 하나만 나와야 합니다. 보통 객체지향언어는 오버로딩(overloading) 이라고해서 인자만 다른 여러개의 같은 이름의 생성자를 생성할 수 있습니다. PHP는 생성자 오버로딩이 되지 않습니다. 하나의 생성자만을 만들어야 합니다.

 

public function __construct($en) {

    $this->engineName = $en;

}

 

 

이렇게 생성자를 추가해 두면

 

$engine = new Car_Engine("좋은 엔진");

 

이런 식으로 초기화 할 수 있습니다.

 

 

클래스 내부에서 사용된 $this 는 객체 자신을 나타내는 미리 정의된 멤버 입니다.

 

내부에서 자신의 멤버변수나 메소드를 사용할 때 반드시 $this->engineName 과 같이 사용해야 합니다. $this-> 를 빼먹고 $engineName 처럼 사용하면 멤버변수가 아니라, 그 위치에서의 지역변수로 처리 되어 버리므로 원하는 결과를 얻을 수 없습니다.

반응형