PHP - 클래스와 객체
안녕하세요, 열망하는 프로그래머 여러분! 오늘 우리는 PHP 클래스와 객체의 흥미로운 세계로 뛰어들어 보겠습니다. 이 용어들이 좀 낯설게 들리시나요? 걱정 마세요, 이 수업이 끝나면 여러분은 자신만의 클래스와 객체를 마스터하실 수 있을 것입니다!
클래스와 객체는 무엇인가요?
코드로 들어가기 전에, 클래스와 객체가 무엇인지 이해해 보겠습니다. 여러분이 집을 짓는다고 상상해 보세요. 클래스는 집의 설계도와 같고, 객체는 그 설계도에 따라 지어진 실제 집입니다. 단일 설계도(클래스)에서 많은 집(객체)를 만들 수 있습니다.
PHP에서 클래스 정의하기
우리는 먼저 간단한 Car
클래스를 만들어 보겠습니다.
<?php
class Car {
// 클래스 프로퍼티
public $brand;
public $color;
// 클래스 메서드
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
?>
이를 쉽게 설명하자면:
-
class
키워드로 시작하여 우리의 클래스 이름(Car
)을 지정합니다. - 클래스 내부에 프로퍼티(변수)를 정의합니다. 여기서는
$brand
와$color
입니다. - 또한
startEngine()
이라는 메서드(함수)를 정의합니다.
클래스에서 객체 생성하기
이제 우리의 Car
클래스를 가지고 몇 개의 차 객체를 생성해 보겠습니다!
<?php
// 차 객체 생성
$myCar = new Car();
$myCar->brand = "Toyota";
$myCar->color = "Red";
$friendsCar = new Car();
$friendsCar->brand = "Honda";
$friendsCar->color = "Blue";
// 객체의 메서드 사용
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
출력:
Vroom! The Red Toyota is starting.
Vroom! The Blue Honda is starting.
여기서 일어나는 일은 다음과 같습니다:
-
new
키워드를 사용하여Car
클래스의 객체를 생성합니다. - 각 객체의 프로퍼티를 화살표(
->
) 연산자를 사용하여 설정합니다. - 각 객체에서
startEngine()
메서드를 호출합니다.
생성자 메서드
이제 우리의 클래스를 약간 더 복잡하게 만들기 위해 생성자를 추가해 보겠습니다. 생성자는 객체가 생성될 때 호출되는 특별한 메서드입니다.
<?php
class Car {
public $brand;
public $color;
// 생성자
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
// 생성자를 사용하여 차 객체 생성
$myCar = new Car("Toyota", "Red");
$friendsCar = new Car("Honda", "Blue");
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
생성자를 사용하면 객체를 생성할 때 brand
와 color
를 설정할 수 있어 코드가 깨끗하고 효율적이 됩니다.
상속
OOP의 강력한 기능 중 하나는 상속입니다. 상속을 사용하면 기존 클래스를 기반으로 새로운 클래스를 만들 수 있습니다. ElectricCar
클래스를 만들어 Car
클래스를 상속받아 보겠습니다.
<?php
class ElectricCar extends Car {
public $batteryLife;
public function __construct($brand, $color, $batteryLife) {
parent::__construct($brand, $color);
$this->batteryLife = $batteryLife;
}
public function chargeBattery() {
return "The $this->color $this->brand is charging. Current battery life: $this->batteryLife%";
}
}
$teslaModel3 = new ElectricCar("Tesla", "White", 80);
echo $teslaModel3->startEngine();
echo $teslaModel3->chargeBattery();
?>
출력:
Vroom! The White Tesla is starting.
The White Tesla is charging. Current battery life: 80%
여기서 ElectricCar
는 Car
의 모든 프로퍼티와 메서드를 상속받으며, 자신만의 프로퍼티($batteryLife
)와 메서드(chargeBattery()
)를 추가합니다.
접근 제한자
OOP에서는 프로퍼티와 메서드의 가시성을 제어할 수 있는 접근 제한자를 사용할 수 있습니다. 세 가지가 있습니다:
제한자 | 설명 |
---|---|
public | 어디서나 접근 가능 |
protected | 클래스 내부와 파생 클래스에서 접근 가능 |
private | 클래스 내부에서만 접근 가능 |
우리의 Car
클래스를 수정하여 이를 사용해 보겠습니다:
<?php
class Car {
protected $brand;
private $engineStarted = false;
public function __construct($brand) {
$this->brand = $brand;
}
public function startEngine() {
$this->engineStarted = true;
return "The $this->brand's engine is now running.";
}
public function isEngineRunning() {
return $this->engineStarted;
}
}
$myCar = new Car("Toyota");
echo $myCar->startEngine();
echo $myCar->isEngineRunning() ? "Engine is running" : "Engine is off";
// 이렇게 하면 오류 발생: echo $myCar->engineStarted;
?>
이제 $brand
는 protected(파생 클래스에서 접근 가능), $engineStarted
는 private(Car
클래스 내부에서만 접근 가능), 메서드는 public으로 유지됩니다.
결론
축하합니다! 여러분은 PHP의 객체 지향 프로그래밍의 첫 걸음을 냈습니다. 우리는 클래스, 객체, 생성자, 상속, 접근 제한자 등 OOP의 기본 개념을 다루었습니다. 이 개념들은 OOP의 기초가 되며, 여러분의 프로그래밍 여정에서 큰 도움이 될 것입니다.
기억하시기 바랍니다, 연습이 완성입니다. 자신만의 클래스를 만들어 보세요, 다양한 프로퍼티와 메서드를 실험해 보세요, 실수를 두려워 말고 - 그것이 우리가 배우는 방법입니다! 행복하게 코딩하세요!
Credits: Image by storyset