객체지향(OOP) 핵심 개념
클래스(class)
프로그래머가 정의하는 자료형이다. 지역 변수와 지역 함수를 포함한다. 같은 종류의 객체 인스턴스를 찍어내는 템플릿 정도로 생각할 수 있다.
객체(object)
클래스로 정의한 자료형의 각 인스턴스를 말한다. 클래스를 한 번 정의하면 그 클래스에 속하는 원하는 만큼 많은 객체를 생성할 수 있다. 객체를 인스턴스라고 부르기도 한다.
멤버 변수(member variable)
클래스 내에 정의되는 변수다. 이 변수는 클래스 밖에서는 접근이 불가하며 멤버 변수를 통해 접근할 수 있다.
멤버 함수(member function)
클래스 내에 정의되는 함수이며, 객체의 데이터에 접근하기 위해 사용될 수 있다.
부모 클래스(parent class)
다른 클래스에게 상속을 해주는 클래스이다. 상위 클래스 혹은 기초 클래스라고도 불리운다.
자식 클래스(child class)
다른 클래스로부터 상속을 받는 클래스이다. 하위 클래스 혹은 유도 클래스라고도 한다.
다형성(polymorphism)
같은 함수가 여러 다른 목적으로 쓰일 수 있는 객체지향 개념이다. 예를 들어 함수 이름은 같지만 인자 수를 다르게 받으며 다른 작업을 수행할 수 있는 경우를 말한다.
오버로딩(overloading)
다형성의 한 종류로써 몇몇의 혹은 모든 연산자가 인자들(arguments)의 자료형에 따라 다른 구현을 가질 수 있는 것을 말한다.
자료 추상화(data abstraction)
자료 표현시 구현 세부사항을 숨기는(추상화시키는) 경우를 말한다.
캡슐화(encapsulation)
객체를 형성하기 위해 모든 데이터와 멤버 함수를 같이 캡슐화하는 개념이다.
생성자(constructor)
클래스로부터 객체 생성시 항상 자동으로 호출되는 특수한 종류의 함수이다.
소멸자(destructor)
객체가 삭제되거나 스코프 밖의 상태가 될 때 자동으로 호출되는 특수한 종류의 함수이다.
PHP 클래스 정의하기
PHP에서 새로운 클래스를 정의하기 위한 일반적인 형태는 다음과 같다.
<?php
class phpClass
{
var $var1;
var $var2 = "constant string";
function myFunc($arg1, $arg2)
{
//[..]
}
//[..]
}
Book
클래스의 정의가 다음과 같다고 하자.
<?php
class Book
{
// Member variables
var $price;
var $title;
// Member functions
function setPrice($param)
{
$this->price = $param;
}
function getPrice()
{
echo $this->price.'\n';
}
function setTitle($param)
{
$this->title = $param;
}
function getTitle()
{
echo $this->title.'\n';
}
}
?>
변수 $this
는 특별한 종류의 변수이며 현 객체 자신을 가리킨다.
PHP 객체 생성하기
<?php
$physicsBook = new Book;
$mathBook = new Book;
$chemistryBook = new Book;
?>
PHP 멤버 함수 호출하기
<?php
$physicsBook->setTitle("Conceptual Physics");
$chemistryBook->setTitle("General Chemistry");
$mathBook->setTitle("Precalculus");
$physicsBook->setPrice(30);
$chemistryBook->setPrice(25);
$mathBook->setPrice(15);
?>
<?php
$physicsBook->getTitle();
$chemistryBook->getTitle();
$mathBook->getTitle();
// ...
?>