프로그래밍/PHP

[PHP 수업] 14강 - 객체 지향 프로그래밍 (OOP)

월횽 2024. 8. 13. 06:30
728x90
반응형
SMALL

안녕하세요! 그레이해커 월횽입니다. 이번 강의에서는 객체 지향 프로그래밍(OOP)의 개념과 PHP에서 이를 어떻게 구현할 수 있는지를 살펴봅니다. 클래스와 객체, 속성과 메서드, 상속, 인터페이스, 다형성 및 접근 제어자에 대해 깊이 있는 이해를 돕기 위해 단계별로 설명하겠습니다.

 

1. 객체 지향 프로그래밍 개념

객체 지향 프로그래밍(OOP)은 데이터를 객체로 구성하여 프로그래밍을 하는 패러다임입니다. OOP는 다음과 같은 주요 개념을 포함합니다.

728x90

· 클래스: 객체를 생성하기 위한 템플릿 또는 청사진입니다.
· 객체: 클래스에서 생성된 인스턴스입니다.
· 속성: 객체의 데이터나 상태를 저장하는 변수입니다.
· 메서드: 객체의 동작을 정의하는 함수입니다.
· 상속: 기존 클래스를 바탕으로 새로운 클래스를 정의하는 기능입니다.
· 인터페이스: 클래스가 구현해야 하는 메서드의 집합입니다.
· 다형성: 같은 메서드 이름이 다른 클래스에서 다르게 동작할 수 있는 기능입니다.

 

 

2. 클래스와 객체

 

2-1. 클래스 정의

클래스는 객체를 생성하기 위한 구조를 정의합니다. 클래스는 속성과 메서드를 포함할 수 있습니다.

<?php
class Car {
    // 속성
    public $brand;
    public $model;
    
    // 생성자
    public function __construct($brand, $model) {
        $this->brand = $brand;
        $this->model = $model;
    }
    
    // 메서드
    public function displayInfo() {
        return "Brand: " . $this->brand . ", Model: " . $this->model;
    }
}
?>

 

반응형

2-2. 객체 생성

클래스를 사용하여 객체를 생성할 수 있습니다.

<?php
$myCar = new Car("Toyota", "Corolla");
echo $myCar->displayInfo(); // 출력: Brand: Toyota, Model: Corolla
?>

 

 

 

3. 속성과 메서드

 

3-1. 속성 (Properties)

속성은 객체의 상태를 정의합니다. 접근 제어자에 따라 외부에서 접근할 수 있는지 여부가 결정됩니다.

<?php
class Person {
    public $name; // 공용 속성
    private $age; // 개인 속성
    protected $address; // 보호 속성
    
    public function __construct($name, $age, $address) {
        $this->name = $name;
        $this->age = $age;
        $this->address = $address;
    }
}
?>

 

SMALL

3-2. 메서드 (Methods)

메서드는 객체가 수행할 수 있는 동작을 정의합니다. 속성과 마찬가지로 접근 제어자를 사용하여 접근 권한을 설정할 수 있습니다.

<?php
class Person {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function greet() {
        return "Hello, my name is " . $this->name;
    }
}
?>

 

 

 

4. 상속, 인터페이스, 다형성

 

4-1. 상속 (Inheritance)

상속은 기존 클래스를 기반으로 새로운 클래스를 생성할 수 있는 기능입니다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받습니다.

<?php
class Animal {
    public function eat() {
        return "This animal is eating.";
    }
}

class Dog extends Animal {
    public function bark() {
        return "Woof!";
    }
}

$dog = new Dog();
echo $dog->eat(); // 출력: This animal is eating.
echo $dog->bark(); // 출력: Woof!
?>

 

 

4-2. 인터페이스 (Interface)

인터페이스는 클래스가 구현해야 하는 메서드의 집합을 정의합니다. 인터페이스는 다중 상속을 지원합니다.

<?php
interface Drawable {
    public function draw();
}

class Circle implements Drawable {
    public function draw() {
        return "Drawing a circle.";
    }
}

$circle = new Circle();
echo $circle->draw(); // 출력: Drawing a circle.
?>

 

4-3. 다형성 (Polymorphism)

다형성은 동일한 메서드 이름이 여러 클래스에서 다르게 동작할 수 있게 합니다.

<?php
class Bird {
    public function fly() {
        return "The bird is flying.";
    }
}

class Airplane {
    public function fly() {
        return "The airplane is flying.";
    }
}

function letItFly($object) {
    echo $object->fly();
}

$bird = new Bird();
$plane = new Airplane();

letItFly($bird); // 출력: The bird is flying.
letItFly($plane); // 출력: The airplane is flying.
?>

 

 

 

5. 접근 제어자 (Access Modifiers)

 

5-1. public

· 클래스 외부에서 접근할 수 있습니다.

<?php
class Example {
    public $value;
    
    public function __construct($value) {
        $this->value = $value;
    }
}
?>

 

 

5-2. private

· 클래스 내부에서만 접근할 수 있습니다.

<?php
class Example {
    private $value;
    
    public function __construct($value) {
        $this->value = $value;
    }
    
    public function getValue() {
        return $this->value;
    }
}
?>

 

5-3. protected

· 클래스 내부 및 상속받은 클래스에서 접근할 수 있습니다.

<?php
class ParentClass {
    protected $value;
    
    public function __construct($value) {
        $this->value = $value;
    }
}

class ChildClass extends ParentClass {
    public function getValue() {
        return $this->value;
    }
}
?>

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST