클래스 안의 클래스(Nested class)
클래스 안의 클래스는 클래스를 포함한 클래스를 의미하며 포함하고 있는 외부클래스와 포함되어진 내부클래스로 나누어 집니다.
내부클래스는 다른 클래스에 들어 있는 클래스입니다. 내부클래스를 정의하는 것은 클래스 이름을 숨기고 클래스에 필요한 자원의 지역적 할당을 가능하게 해 줍니다. 클래스를 별도로 작성하기에는 그 기능이 제한적이거나 외부 클래스에 종속적일 때 사용할 수 있으며 그래서 같은 일을 하는 클래스들끼리 기능적으로 묶는 역할을 하는데 이용할 수 있습니다.
아래의 예를 보면 클래스 Database 내부에 데이터베이스 접속을 담당하는 내부클래스가 각 데이터베이스별로 작성되어 있습니다.
[code php;gutter:false]
<?php
class Database {
class MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
}
$MySQL_obj = new Database::MySQL();
$MySQL_obj->db_connect("John");
$Oracle_obj = new Database::Oracle();
$Oracle_obj->db_connect("Mark");
?> [/code]
class Database {
class MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
}
$MySQL_obj = new Database::MySQL();
$MySQL_obj->db_connect("John");
$Oracle_obj = new Database::Oracle();
$Oracle_obj->db_connect("Mark");
?> [/code]
때에 따라서는 내부클래스를 외부클래스 안쪽에 정의하지 않고 별도로 빼내어 아래와 같이 범위연산자 '::'를 이용하여 작성할 수 있습니다. 이러한 방법으로 작성하게 되면 소스 코드가 좀더 깔끔하게 되어 가독성이 좋아질 것입니다.
[code php;gutter:false]
<?php
class Database::MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class Database::Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
$MySQL_obj = new Database::MySQL();
$MySQL_obj->db_connect("John");
$Oracle_obj = new Database::Oracle();
$Oracle_obj->db_connect("Mark");
?> [/code]
class Database::MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class Database::Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
$MySQL_obj = new Database::MySQL();
$MySQL_obj->db_connect("John");
$Oracle_obj = new Database::Oracle();
$Oracle_obj->db_connect("Mark");
?> [/code]
'phpclass > 객체모델' 카테고리의 다른 글
{Zend 엔진 2.0 설계초안}12.이름공간 (0) | 2002.12.21 |
---|---|
{Zend 엔진 2.0 설계초안}11.클래스 상수 (0) | 2002.12.21 |
{Zend 엔진 2.0 설계초안}09.객체 삭제 (0) | 2002.12.21 |
{Zend 엔진 2.0 설계초안}08.객체 역참조 (0) | 2002.12.21 |
{Zend 엔진 2.0 설계초안}07.객체 복제 (0) | 2002.12.21 |