PHP Classes-Objects
PHP 클래스(Class)와 객체(Object): 개념과 사용법
- *PHP 클래스(Class)와 객체(Object)**는 **객체 지향 프로그래밍(OOP)**의 핵심 개념입니다. 클래스는 객체의 설계도이며, 객체는 클래스에 정의된 속성과 메서드를 실제로 사용할 수 있는 실체입니다. PHP에서 클래스를 정의하고 객체를 생성하는 방법을 배우면, 코드를 더 유지보수하기 쉽고, 재사용 가능한 구조로 만들 수 있습니다.
이 가이드에서는 클래스와 객체의 기본 개념, 속성 및 메서드, 생성자(Constructor), 상속(Inheritance) 및 실용적인 예제를 다룹니다.
1. 클래스(Class)란?
- *클래스(Class)**는 **속성(Property)**과 **메서드(Method)**를 포함하는 청사진으로, 객체의 특성과 동작을 정의합니다. 클래스를 사용하면 여러 객체가 동일한 속성이나 동작을 공유할 수 있습니다.
1.1 클래스 정의
<?php
class Car {
// 속성(프로퍼티)
public $color;
public $model;
// 메서드(함수)
public function drive() {
return "The car is driving";
}
}
?>
설명:
- *클래스(Class)**는
class
키워드를 사용해 정의합니다. - 클래스 내에는 속성(데이터)와 메서드(기능)를 정의할 수 있습니다.
2. 객체(Object)란?
- *객체(Object)**는 클래스의 인스턴스(Instance)로, 실제로 메모리상에 존재하는 실체입니다. 객체는 클래스에서 정의한 속성과 메서드를 사용할 수 있는 구체적인 존재입니다.
2.1 객체 생성
<?php
// 클래스 정의
class Car {
public $color;
public $model;
public function drive() {
return "The $this->color $this->model is driving.";
}
}
// 객체 생성
$myCar = new Car();
$myCar->color = "red";
$myCar->model = "Toyota";
echo $myCar->drive(); // 결과: The red Toyota is driving.
?>
설명:
- 객체 생성:
new
키워드를 사용해 객체를 생성합니다.new Car()
는Car
클래스의 인스턴스를 생성합니다. - 속성 접근:
$myCar->color = "red";
처럼 객체의 속성에 값을 할당할 수 있습니다. - 메서드 호출:
$myCar->drive()
처럼 객체의 메서드를 호출할 수 있습니다.
3. 클래스 속성(Property)
- *속성(Property)**은 클래스 내부에서 정의된 변수로, 객체의 데이터를 저장합니다. 속성은 **가시성(Visibility)**에 따라 public, private, protected로 설정할 수 있습니다.
3.1 속성 선언 및 사용
<?php
class Car {
public $color; // 공개 속성
private $speed; // 비공개 속성
public function setSpeed($speed) {
$this->speed = $speed;
}
public function getSpeed() {
return $this->speed;
}
}
$myCar = new Car();
$myCar->color = "blue"; // 공개 속성은 외부에서 접근 가능
$myCar->setSpeed(100); // 비공개 속성은 메서드를 통해 접근
echo "The car's speed is: " . $myCar->getSpeed(); // 결과: The car's speed is: 100
?>
설명:
public
: 외부에서 자유롭게 접근할 수 있는 속성.private
: 클래스 내부에서만 접근할 수 있는 속성. 외부에서는 메서드를 통해 접근해야 합니다.
4. 클래스 메서드(Method)
- *메서드(Method)**는 클래스 내부에서 정의된 함수로, 객체가 수행할 수 있는 동작을 정의합니다. 메서드는 속성에 접근하거나 객체의 동작을 정의하는 데 사용됩니다.
4.1 메서드 선언 및 사용
<?php
class Car {
public $color;
public function drive() {
return "The $this->color car is driving.";
}
}
$myCar = new Car();
$myCar->color = "green";
echo $myCar->drive(); // 결과: The green car is driving.
?>
설명:
- *메서드(Method)**는 클래스 내에서 선언된 함수로, 객체의 동작을 정의합니다.
$this
: 객체의 속성과 메서드를 참조할 때 사용합니다. 예를 들어 **$this->color
*는 객체의color
속성을 참조합니다.
5. 생성자(Constructor)
- *생성자(Constructor)**는 객체가 생성될 때 자동으로 호출되는 특별한 메서드로, 객체의 초기 상태를 설정하는 데 사용됩니다. PHP에서 생성자는
**
__construct()
*로 정의합니다.
5.1 생성자 사용
<?php
class Car {
public $color;
public $model;
// 생성자 메서드
public function __construct($color, $model) {
$this->color = $color;
$this->model = $model;
}
public function drive() {
return "The $this->color $this->model is driving.";
}
}
$myCar = new Car("red", "Honda");
echo $myCar->drive(); // 결과: The red Honda is driving.
?>
설명:
- *
__construct()
*는 객체가 생성될 때 자동으로 호출되며, 객체의 속성을 초기화할 수 있습니다. - 생성자는 객체 생성 시 초기 값을 설정하는 데 유용합니다.
6. 상속(Inheritance)
- *상속(Inheritance)**은 하나의 클래스가 다른 클래스의 속성과 메서드를 물려받는 기능입니다. 상속을 통해 코드의 재사용성을 높이고, 클래스 간의 관계를 정의할 수 있습니다.
6.1 상속 사용
<?php
// 부모 클래스
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function speak() {
return "$this->name makes a sound.";
}
}
// 자식 클래스
class Dog extends Animal {
public function speak() {
return "$this->name barks.";
}
}
$dog = new Dog("Rex");
echo $dog->speak(); // 결과: Rex barks.
?>
설명:
extends
:Dog
클래스는Animal
클래스를 상속받습니다.Dog
클래스는 부모 클래스인Animal
의 속성과 메서드를 물려받습니다.- 메서드 오버라이딩:
Dog
클래스에서speak()
메서드를 재정의(오버라이딩)하여 부모 클래스의 메서드를 덮어씁니다.
7. 가시성(Visibility)
PHP에서는 **가시성(Visibility)**을 통해 클래스의 속성과 메서드에 대한 접근 권한을 제어할 수 있습니다. 가시성은 public
,
private
, **protected
**로 설정할 수 있습니다.
7.1 가시성 예제
<?php
class Person {
public $name; // 공개 속성
private $age; // 비공개 속성
protected $gender; // 보호 속성
public function __construct($name, $age, $gender) {
$this->name = $name;
$this->age = $age;
$this->gender = $gender;
}
public function getAge() {
return $this->age; // 비공개 속성은 내부 메서드를 통해 접근 가능
}
}
class Employee extends Person {
public function getGender() {
return $this->gender; // 보호 속성은 자식 클래스에서 접근 가능
}
}
$person = new Employee("Alice", 30, "Female");
echo $person->name; // 결과: Alice
echo $person->getAge(); // 결과: 30
echo $person->getGender(); // 결과: Female
?>
설명:
public
: 외부에서 접근할 수 있습니다.private
: 클래스 내부에서만 접근할 수 있으며, 외부에서는 직접 접근할 수 없습니다.protected
: 클래스 내부와 자식 클래스에서만 접근할 수 있습니다.
8. 정적 메서드와 속성(Static Methods and Properties)
PHP에서는 정적(static) 메서드와 속성을 사용할 수 있습니다. 정적 메서드나 속성은 클래스 자체에 속하며, 객체를 생성하지 않고도 호출할 수 있습니다.
8.1 정적 속성 및 메서드 사용
<?php
class
MathOperations {
public static $pi = 3.14;
public static function multiply($a, $b) {
return $a * $b;
}
}
// 객체 생성 없이 정적 메서드와 속성 호출
echo MathOperations::$pi; // 결과: 3.14
echo MathOperations::multiply(2, 3); // 결과: 6
?>
설명:
static
키워드를 사용해 정적 속성 및 메서드를 정의할 수 있습니다.- 정적 속성 및 메서드는 클래스 이름을 통해 객체를 생성하지 않고도 접근할 수 있습니다.
9. PHP 클래스와 객체 실용 예제
9.1 사용자 관리 시스템 예제
<?php
class User {
public $username;
private $password;
public function __construct($username, $password) {
$this->username = $username;
$this->password = $password;
}
public function login($inputPassword) {
if ($this->password === $inputPassword) {
return "로그인 성공!";
} else {
return "비밀번호가 틀렸습니다.";
}
}
}
$user = new User("Alice", "1234");
echo $user->login("1234"); // 결과: 로그인 성공!
?>
설명:
User
클래스는 사용자 정보를 저장하고 로그인 기능을 제공합니다.- 비밀번호는
private
속성으로 외부에서 접근할 수 없으며, 메서드를 통해 비밀번호 검증을 수행합니다.
요약
PHP에서 클래스와 객체는 객체 지향 프로그래밍(OOP)의 핵심 개념입니다. 클래스를 통해 속성과 메서드를 정의하고, 객체를 생성하여 이를 사용할 수 있습니다. 객체 지향 프로그래밍을 통해 코드를 모듈화하고 재사용성을 높일 수 있으며, 상속, 캡슐화, 정적 속성 및 메서드와 같은 OOP의 원칙을 활용하여 더 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다.