메뉴얼

  • Q: [클래스] 클래스의 사용 2019.10.03
    A:

    인스턴스의 생성

    클래스가 선언되고 나면, 선언된 클래스로부터 인스턴스를 생성할 수 있습니다.

    PHP에서는 new 키워드를 사용하여 인스턴스를 생성할 수 있습니다.

     

    이때 클래스 이름을 통해 생성자로 필요한 인수를 전달할 수 있습니다.

    문법

    $객체이름 = new 클래스이름 ( 인수1, 인수2, ...);


    클래스 멤버에 접근

    클래스의 프로퍼티에 접근하거나 메소드를 호출할 때는 화살표 기호(->)를 사용합니다.

     

    객체의 이름 뒤에 화살표 기호(->)를 붙이고, 접근하려고 하는 프로퍼티나 호출하고자 하는 메소드의 이름을 사용하면 됩니다.

    문법

    $객체이름 -> 프로퍼티 이름;

    $객체이름 -> 메소드이름;

     

    PHP에서는 프로퍼티와 메소드의 접근 범위를 제한할 수 있으므로, 클래스 외부에서는 접근 제어자에 따라 접근이 가능할 수도 있고 또는 불가능할 수도 있습니다.

     

    또한, 객체 내부에서 해당 인스턴스의 프로퍼티에 접근하고 싶을 때는 특별한 변수인 $this를 사용할 수 있습니다.

    $this 변수는 해당 인스턴스가 바로 자기 자신을 가리키는 데 사용하는 변수입니다.

    문법

    $this -> 프로퍼티이름;


    접근 제어(access modifier)

    객체 지향 프로그래밍에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념입니다.

    그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 됩니다.

     

    PHP에서는 클래스 멤버에 public, private, protected 키워드를 사용하여 각각의 멤버에 대한 접근 제어를 명시할 수 있습니다.

     

    public으로 선언된 멤버는 외부로 공개되며, 해당 객체를 사용하는 어디에서나 직접 접근할 수 있게 됩니다.

    private로 선언된 멤버는 외부로 공개되지 않으며, 해당 클래스의 멤버에서만 접근할 수 있습니다.

    protected로 선언된 멤버는 상위 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.

    즉, 해당 클래스의 멤버와 해당 클래스를 상속받은 자식 클래스에서만 접근할 수 있습니다.

     

    var 키워드를 사용하여 클래스의 프로퍼티를 정의하면, 해당 프로퍼티의 접근 제어는 public으로 자동 정의됩니다.

    또한, 메소드를 작성할 때 접근 제어자를 생략하면 public으로 자동 정의됩니다.

    예제

    class ClassName
    {
        public $publicVar;
        private $privateVar;

        protected $protectedVar;

     

        public function __constructor ( )
        {
            $this -> publicVar = "public property<br>";

            $this -> privateVar = "private property<br>";

            $this -> protectedVar = "protected property<br>";

        }

     

        public function publicMethod ( )
        {
            echo "public method<br>";

        }
        protected function protectedMethod( )
        {
            echo "protected method<br>";
        }
        private function privateMethod( )
        {
            echo "private method<br>";
        }
    }


    $object = new ClassName ( );


    echo $object -> publicVar;      // 접근 가능
    //echo $object->protectedVar; // 접근 불가능
    //echo $object->privatev;     // 접근 불가능


    $object -> publicMethod( );      // 호출 가능
    //$object->protectedMethod(); // 호출 불가능
    //$object->privateMethod();   // 호출 불가능

    코딩연습 ▶

     

    위의 예제처럼 외부에서는 접근 제어자가 public으로 명시된 프로퍼티와 메소드만을 호출할 수 있습니다.


    정보 은닉(data hiding)

    클래스 외부에서는 접근 제어 때문에 private 멤버나 protected 멤버로는 직접 접근할 수 없습니다.

    하지만 public 메소드를 사용하면 해당 클래스의 private 멤버나 protected 멤버에도 접근할 수 있습니다.

     

    이렇게 public 메소드는 private 멤버나 protected 멤버와 프로그램 사이의 인터페이스(interface) 역할을 수행합니다.

    이렇게 외부에서 바로 데이터로 접근하지 못하게 하는 것을 정보 은닉(data hiding)이라고 합니다.

     

    예제

    class ClassName
    {
        private $privateVar;

     

     

        public function __constructor ( )
        {
            $this -> privateVar = "private property";

        }


        public function getValue ( )
        {
            return $this -> privateVar;
        }


        public function setValue ( $value )
        {
            $this -> privateVar = $value;
        }
    }
    $object = new ClassName ( );
    $object -> setValue ( "hello" ); // setValue() 함수를 통해 $private의 값을 변경할 수 있음.
    echo $object ->getValue;     // getValue() 함수를 통해 $private의 값을 출력할 수 있음.

     

     

    위의 예제는 클래스의 외부에서 public 메소드인 getValue()와 setValue() 메소드를 사용하여 해당 클래스의 private 멤버에 접근할 수 있음을 보여주고 있습니다.

    Facebook [ko]댓글 

  • Q: [클래스] 클래스의 구조 2019.10.03
    A:

    클래스의 구조

    PHP에서 클래스는 class 키워드를 사용하여 다음과 같이 선언합니다.

    문법

    class 클래스이름
    {
        클래스의 프로퍼티과 메소드의 정의;
    }

     

    PHP에서 클래스의 이름을 생성할 때는 반드시 다음 규칙을 지켜야만 합니다.

     

    1. 클래스의 이름은 숫자와의 구분을 빠르게 하려고 숫자로 시작할 수 없습니다.

    2. 클래스의 이름은 영문자(대소문자), 숫자, 언더스코어(_)로만 구성됩니다.

    3. 클래스의 이름 사이에는 공백이 포함될 수 없습니다.

    4. 클래스의 이름은 대소문자를 구분합니다.

    5. PHP에서 미리 정의한 예약어(reserved word)는 클래스의 이름으로 사용할 수 없습니다.

     

    클래스는 클래스만의 상수와 변수를 가질 수 있으며, 이것을 프로퍼티(property)이라고 합니다.

    또한, 메서드(method)라고 불리는 연산을 정의할 수도 있습니다.


    생성자(constructor)

    클래스는 새로운 객체를 생성할 때마다 생성자(constructor)라는 메서드를 호출합니다.

     

    생성자는 객체가 생성될 때마다 호출되어 해당 객체의 프로퍼티를 초기화하거나, 필요한 다른 객체를 생성하는 등의 초기화 작업을 수행합니다.

    생성자는 다른 메소드와 같은 방식으로 선언되며, 매개변수를 가질 수도 있습니다. 

     

    PHP에서 생성자의 이름은 __construct()로 정해져 있습니다.

    이러한 생성자는 객체가 생성될 때마다 자동으로 호출되므로, 사용자가 직접 호출할 필요가 없습니다.

    문법

    class 클래스이름
    {
        function __construct ( 매개변수1매개변수2, ...)
        {
            생성자가 호출될  실행될 코드;
        }
    }


    소멸자(destructor)

    소멸자(destructor)는 생성자와는 반대로 해당 객체를 더는 사용하지 않아 삭제할 때 호출합니다. 

    PHP에서 소멸자의 이름은 __desturct()로 정해져 있으며, 매개변수를 가질 수 없습니다.

    문법

    class 클래스이름
    {
        function __desturct ( )
        {
            소멸자가 호출될  실행될 코드;
        }
    }


    Facebook [ko]댓글 

  • Q: [클래스] 클래스와 객체의 기초 2019.10.03
    A:

    クラス(class)とオブジェクト(object)

    オブジェクト(object)とは、実生活では、我々が認識することができるもので理解することができます。

    これらのオブジェクトの状態(state)と行動(behavior)は、それぞれのプロパティ(property)とメソッド(method)に実装されます。


    また、オブジェクト(object)を作り出すための枠組みや設計図のような概念がまさにクラス(class)です。

    つまり、PHPでは、クラスを持っているオブジェクトを作成して使用します。


    次の例では、Carクラスのオブジェクト(object)を示す例です。


    クラス(class)

    - 車(Car)

    スポーツカー


    プロパティ(property)

    - $car->modelName = "フェラーリNYIAS"

    - $car->modelYear = 2012

    - $car->color = "黄色"

    - $car->maxSpeed = 206 mph


    メソッド(method)

    - $car->accelerate()

    - $car->brake()


    インスタンス(instance)

    - 私の車(myCar)


    自動車インスタンスは、すべて上記のようなプロパティとメソッドを持つでしょう。

    しかし、各プロパティの値はインスタンスにすべて異なります。


    プログラミングでインスタンス(instance)とは、メモリ上に作成されたオブジェクトを意味します。

    オブジェクト指向プログラミング(OOP、Object-Oriented Programming)

    オブジェクト指向プログラミングでは、すべてのデータをオブジェクト(object)として扱われ、オブジェクトがすぐにプログラミングの中心となります。

    これにより、コードの管理が容易になり、より少ない労力でも簡単にコードを変更すると、維持管理することができます。


    オブジェクト指向プログラミングが持つ特徴は次のとおりです。


    1. 抽象化(abstraction)
    2. カプセル化(encapsulation)
    3. 情報秘匿(data hiding)
    4. 継承性(inheritance)
    5. ポリモーフィズム(polymorphism)

    カプセル化は、すでに作成されたコードを変更せずに再使用することを目的とします。

    また、情報秘匿を介してオブジェクトの実際の実装内容を外部で知られないよう隠し、オブジェクトのインタフェースを介してのみデータにアクセスできるようにして、セキュリティを強化します。

    継承は、クラス間の階層関係を作って、論理的かつ体系的に他のクラスの機能とデータを使用できるようになります。

    また、ポリモーフィズムを介して一つの変数や関数の名前が、状況に応じて別の意味で解釈されることができるようになります。

    Facebook [ko]댓글 

Board Pagination Prev 1 Next
/ 1