PHP - 클래스와 객체

안녕하세요, 열망하는 프로그래머 여러분! 오늘 우리는 PHP 클래스와 객체의 흥미로운 세계로 뛰어들어 보겠습니다. 이 용어들이 좀 낯설게 들리시나요? 걱정 마세요, 이 수업이 끝나면 여러분은 자신만의 클래스와 객체를 마스터하실 수 있을 것입니다!

PHP - Classes and Objects

클래스와 객체는 무엇인가요?

코드로 들어가기 전에, 클래스와 객체가 무엇인지 이해해 보겠습니다. 여러분이 집을 짓는다고 상상해 보세요. 클래스는 집의 설계도와 같고, 객체는 그 설계도에 따라 지어진 실제 집입니다. 단일 설계도(클래스)에서 많은 집(객체)를 만들 수 있습니다.

PHP에서 클래스 정의하기

우리는 먼저 간단한 Car 클래스를 만들어 보겠습니다.

<?php
class Car {
// 클래스 프로퍼티
public $brand;
public $color;

// 클래스 메서드
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
?>

이를 쉽게 설명하자면:

  1. class 키워드로 시작하여 우리의 클래스 이름(Car)을 지정합니다.
  2. 클래스 내부에 프로퍼티(변수)를 정의합니다. 여기서는 $brand$color입니다.
  3. 또한 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.

여기서 일어나는 일은 다음과 같습니다:

  1. new 키워드를 사용하여 Car 클래스의 객체를 생성합니다.
  2. 각 객체의 프로퍼티를 화살표(->) 연산자를 사용하여 설정합니다.
  3. 각 객체에서 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();
?>

생성자를 사용하면 객체를 생성할 때 brandcolor를 설정할 수 있어 코드가 깨끗하고 효율적이 됩니다.

상속

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%

여기서 ElectricCarCar의 모든 프로퍼티와 메서드를 상속받으며, 자신만의 프로퍼티($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