php 입문 | 구조와 객체 지향 | 객체 지향이란?


함수에 의한 구조는 긴 작업을 여러 개의 작은 덩어리로 구성할 수 있다. 하지만 더 큰 프로그램이 되면 이것만으로는 부족하다. 예를 들어, 소스 코드에서 1000개의 함수가 줄지어 있는 상태를 상상해 보자. 이것은 과연 ‘정리되어 있다"라고 할 수 있는가?

1000 개의 메소드를 더 정리하려면 어떻게 해야 좋은가? 먼저 생각할 있는 것은 “관련 것을 한곳에 모아 처리하도록 한다"는 것이다. 이렇게 하면, 예를 들어 “관련 있는 함수를 20개씩 정리한 것이 50개 늘어놓는다"라고 한다면 전체를 파악할 수 있을 것이다. 적어도 1000개가 늘어선 것보다 많이 좋아질 것이다.

함수는 그것으로 좋다고 해도, 이번에는 또 다른 문제가 발생하는 것이다. 그것은 ‘1000개의 전역 변수를 어떻게 할 것인가"이다. 긴 프로그램이 되면 사용하는 변수도 엄청날 것이다. 이것은 또한 관련된 변수를 한곳에 모아 정리할 수 있으면 대단히 다르다.

즉, 구조화의 다음 단계에서 누구나 생각할 수 있는 것은 “관련된 기능이나 값을 한곳에 모아 취급 방법"이라고 해도 좋을 것이다.

예를 들어 “데이터 액세스"라는 카테고리를 준비하여, 그 안에 데이터를 읽거나 검색하거나 일부를 대체 할 여러가지 기능을 밀어 넣는다. 동시에 액세스하는 데이터 파일의 이름이나 데이터의 구조 라든지 등 필요한 모든 정보를 그 안에 준비해 둔다. 그리고 필요에 따라 거기에 값을 설정하고, 거기에 있는 기능을 호출하기도 한다. “데이터 액세스에 대한 모든 데이터와 기능은 모두 이 안에 있다"라는 것과 같은 카테고리를 만들 수 있다면, 대단히 편하다.

이런 것을 다양한 용도마다 만들어 함께 간다. 이렇게 하면 아무리 프로그램이 커져도 대응할 수 있다.

이것이 ‘객체(object)‘의 개념이다. 객체는 “자체적으로 필요한 데이터와 기능이 모두 자신 안에 준비되어 있으며, 독립적인 프로그램으로 어디서나 사용할 수 있는 카테고리"이다.

객체의 설계도 “클래스”

이 객체라는 것은 PHP에서는 ‘설계도’과 ‘만든 부품’으로 구성되어 있다. 우선 최초에 객체의 내용을 정의하는 설계도를 만들고, 그 설계도를 기초로 하여 실제로 작동하는 부품을 만드는 셈이다.

이 설계도를 “클래스(class)”, 클래스로 부터 만들어진 부품을 “인스턴스(instance)“라고 한다. 클래스는 다음과 같은 형태로 설계한다.

class 클래스 {
    필드1;
    필드2;
    ...... 필요한 만큼 기술 ......
    
    function 메소드1 (가인수) {
        ...... 수행 할 처리
    }

    function 메소드2 (가인수) {
        ...... 수행할 처리
    }

    ...... 필요한 만큼 기술 ......

}

클래스는 ‘필드’와 ‘방법’으로 구성된다. “필드"라는 것은 클래스에 값을 저장하는 변수이다. 그리고 “메소드"는 클래스 안에 준비된 처리를 작성한 함수이다. 이 2가지 요소를 필요에 따라 작성하고 클래스는 만들어진다.

그리고 만든 클래스에서 인스턴스(실제로 조작하는 부품)를 만들어, 그 안에 있는 필드나 메소드에 액세스하려면 다음과 같이 한다.

$변수 = new 클래스(인수);
$변수->필드;
$변수->메소드(인수);

인스턴스는 “new 클래스()“와 같은 형태로 만든다. 클래스에 따라 이 때에 인수가 필요한 경우도 있다. 이것으로 인스턴스가 생성된 변수로 설정된다. 인스턴스에 메소드나 필드를 조작하는 경우, “$변수->필드”, “$변수->메소드()“와 같은 식으로 인스턴스가 할당된 변수 뒤에”->“라는 기호를 붙이고 그 필드명이나 메소드명을 작성한다.

클래스에 대해서는 설명하지 않으면 안되는 것은 아직도 산더미처럼 있지만, 우선은 “클래스 정의 방법”, “클래스에서 인스턴스를 만드는 방법”, “인스턴스의 필드나 메소드를 이용하는 방법"을 알면, 당장이라도 클래스를 이용할 수 있게 될 것이다.