반응형

 

객체지향 프로그래밍(OOP)은 복잡한 소프트웨어를 더 쉽게 설계하고 관리할 수 있게 해주는 프로그래밍 패러다임입니다. 실제 세계의 개념을 모델링하여 코드를 구조화하는 방식으로, 다음과 같은 주요 개념을 포함합니다:

## 객체와 클래스

- **객체**: 실제 세계의 물건이나 개념을 표현한 것입니다. 예를 들어, '자동차'라는 객체가 있을 수 있습니다.
- **클래스**: 객체를 만들기 위한 '설계도'입니다. '자동차' 클래스는 모든 자동차 객체의 공통적인 특성과 기능을 정의합니다.

// 클래스
class Car {
    public $brand;
    public $color;

    public function __construct($brand, $color) {
        $this->brand = $brand;
        $this->color = $color;
    }

    public function getInfo() {
        return "This is a {$this->color} {$this->brand}.";
    }
}

// 인스턴스(객체) 생성
$myCar = new Car("Toyota", "red");
echo $myCar->getInfo(); // 출력: This is a red Toyota.



## 주요 특성

1. **캡슐화**
   - 데이터(속성)와 그 데이터를 처리하는 메서드를 하나의 단위로 묶는 것입니다.

class BankAccount {
    private $balance = 0;

    public function deposit($amount) {
        if ($amount > 0) {
            $this->balance += $amount;
        }
    }

    public function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // 출력: 100



2. **상속**
   - 기존 클래스의 특성을 새로운 클래스가 물려받는 것입니다.
   - 예: 'ElectricCat' 클래스는 'Car' 클래스의 특성을 상속받아 기본 기능을 유지하면서 추가 기능을 구현합니다.

class ElectricCar extends Car {
    private $batteryLevel;

    public function __construct($brand, $color, $batteryLevel) {
        parent::__construct($brand, $color);
        $this->batteryLevel = $batteryLevel;
    }

    public function getBatteryInfo() {
        return "Battery level: {$this->batteryLevel}%";
    }
}

$myElectricCar = new ElectricCar("Tesla", "blue", 80);
echo $myElectricCar->getInfo(); // 출력: This is a blue Tesla.
echo $myElectricCar->getBatteryInfo(); // 출력: Battery level: 80%



3. **다형성**
   - 같은 이름의 메소드가 다른 클래스에서 다르게 동작할 수 있는 능력입니다.
   - 예: 'move' 메소드가 'Car'와 'Boat' 클래스에서 각각 다르게 구현될 수 있습니다.

interface Vehicle {
    public function move();
}

class Car implements Vehicle {
    public function move() {
        return "The car is driving on the road.";
    }
}

class Boat implements Vehicle {
    public function move() {
        return "The boat is sailing on the water.";
    }
}

function transport(Vehicle $vehicle) {
    echo $vehicle->move();
}

$car = new Car();
$boat = new Boat();

transport($car);  // 출력: The car is driving on the road.
transport($boat); // 출력: The boat is sailing on the water.



4. **추상화**
   - 복잡한 시스템에서 핵심적인 개념이나 기능을 간추려내는 것입니다.

abstract class Shape {
    abstract public function calculateArea();
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function calculateArea() {
        return pi() * $this->radius * $this->radius;
    }
}

class Square extends Shape {
    private $side;

    public function __construct($side) {
        $this->side = $side;
    }

    public function calculateArea() {
        return $this->side * $this->side;
    }
}

$circle = new Circle(5);
$square = new Square(4);

echo $circle->calculateArea(); // 출력: 약 78.54
echo $square->calculateArea(); // 출력: 16



## OOP의 장점

- **코드 재사용**: 상속을 통해 기존 코드를 쉽게 재사용할 수 있습니다.
- **유지보수 용이성**: 객체 단위로 코드가 모듈화 되어 있어 수정이 쉽습니다.
- **확장성**: 새로운 클래스를 추가하거나 기존 클래스를 수정하여 기능을 쉽게 확장할 수 있습니다.

객체지향 프로그래밍은 이러한 개념들을 활용하여 복잡한 소프트웨어 시스템을 더 체계적이고 효율적으로 구현할 수 있게 해 줍니다. 실제 세계의 개념을 프로그래밍에 적용함으로써, 개발자들은 더 직관적이고 관리하기 쉬운 코드를 작성할 수 있습니다.

반응형
반응형

CURL 통신

1. curl

- curl 통신 이란 다양한 종류의 프로토콜을 사용하여 서버와 통신할 수 있도록 도와주는 모듈이다.

- HTTPS뿐 아니라 HTTP GET, POST, PUT 등의 프로토콜을 사용이 가능하고 파일 업로드 Proxy, Cookie 그리고 사용자 인증 기능도 제공하는 모듈이다.

 

2. curl 설치

- curl모듈이 설치되지 않았을때 curl을 사용하려 하면 아래와 같은 오류를 볼 수 있다.

Fatal error: Call to undefined function curl_init()

- 리눅스를 사용하는 경우, 아래와 같이 sudo 명령어를 이용해 curl모듈을 설치한다.

sudo apt install php-curl

3. curl 사용

- GET통신 기본

//접속 할 URL을 지정
$url = "https://www.naver.com";

//cURL 세션 초기화
$ch = curl_init();

//URL과 옵션을 설정
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 요청결과를 문자열로 반환

//cURL 실행
$res = curl_exec($ch);

//세션을 종료
curl_close($ch);

- POST통신 기본

//접속 할 URL을 지정
$url = "https://www.naver.com";

//전송할 데이터를 설정
$param = array('key' => 'data');

//cURL 세션 초기화
$ch = curl_init();

//URL과 옵션을 설정
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 요청결과를 문자열로 반환

curl_setopt($ch, CURLOPT_POST, true); // POST 전송 여부
curl_setopt($ch, CURLOPT_POSTFIELDS, $param); // POST DATA

//cURL 실행
$res = curl_exec($ch);

//세션을 종료
curl_close($ch);

- 통신시 옵션

// curl 통신시 옵션은 curl 세션 초기화와 curl 실행 사이에 옵션을 추가하여 사용한다.
// 아래의 옵션외에도 많은 옵션들이 있다.(참고 : https://www.php.net/manual/en/function.curl-setopt.php)

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // connection timeout : 10초
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 원격 서버의 인증서가 유효한지 검사 여부
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 인증서의 일반 이름 필드 또는 주체 대체 이름 필드가 제공된 호스트 이름과 일치 여부
curl_setopt($ch, CURLOPT_SSLVERSION,1); // SSL 버전(가장 좋은 방법은 이것을 설정하지 않고 기본값을 사용하는 것입니다. SSLv2 및 SSLv3의 알려진 취약점을 감안할 때 2 또는 3으로 설정하는 것은 매우 위험)

curl_setopt($ch, CURLOPT_HTTPHEADER, $send_header); // HTTP 헤더 필드의 배열 (array('Content-type: text/plain', 'Content-length: 100'))
반응형
반응형

클래스(Class)와 객체(Object)의 기본

1) 클래스(Class)란 무엇인가

- 클래스(Class)는 객체(Object)를 만들기 위한 설계도이다.

- 우리가 이해할 수 있는 사물로 대입해본다면 객체의 상태는 프로퍼티(property), 행동은 메서드(method)로 표현할 수 있다.

 

2) 클래스의 기본규칙

- class 다음 클래스명을 적고 클래스 전체를 중괄호로 묶는다

- 클래스의 내부에 프로퍼티와 메서드가 정의된다.

- 프로퍼티는 보통 클래스의 상단에 정의되지만 위치는 상관없다.

- 프로퍼티와 메서드가 정의될 때 private, public이라는 접근제어자가 붙어있는데 이것은 클래스 외부에서 접근이 가능한지를 나타낸다.

 

3) Naming Convention

- 클래스명은 대문자로 시작하며 여러 단어로 구성될 경우 언더바(_)를 사용하여 분리하고 각 단어의 첫 글자를 대문자로 사용한다.

ex) Car, Car_Custom

- 프로퍼티와 메서드는 소문자로 시작하고 여러 단어로 구성될 경우 붙여서 적으며 첫 단어를 제외한 단어를 대문자로 사용한다.

ex) $wheels, $carWeels

- 프로퍼디와 메서드가 private인 경우 첫자를 언더바(_)를 사용한다.

ex) private $_car;

- 관습적인 규칙이며 반드시 따라야 하는 것은 아니다.

 

4) 예제

// Car 클래스
class Car
{
    // 프로퍼티(멤버변수)
    public $wheels;
    public $doors = 4;
    protected $color = 4;
    private $_size;
    private $_company;
    
    // 메서드
    public function run() {
        return "자동차가 달립니다.";
    }
    protected function stop() {
        return "자동차가 멈춥니다.";
    }
    protected function turn() {
        return "자동차가 회전합니다.";
    }
}

// 클래스 Car라는 myCar 인스턴스 생성
$myCar = new Car();

// Car 클래스의 프로퍼티 사용
echo $myCar->doors; // 결과값 : 4

// Car 클래스의 메서드 사용
echo $myCar->run(); // 결과값 : 자동차가 달립니다.
반응형
반응형

// 특정 문자열로 잘라 배열로 만들 객체

$String = "a;b;c;d"; 

 

// explode 함수의 첫번째 인자값으로 자르고 $arrString 객체 안에 배열 형태로 들어감

$arrString =explode(';', $String);

 

// 출력

print_r($arrString);

//결과

array(

    0 => a

    ,1 => b

    ,2 => c

    ,3 => d

)

 

// 개수 출력

echo count($arrString);

//결과

4

반응형
반응형

// 키값의 확인을 위한 배열

$arr_string = array(0=>"apple", 1=>"orange");

 

// bool 형태로 반환 키가 있을 경우 true 없는 경우 false

if (array_key_exists(0, $arr_string)) {

    echo "존재 합니다.";

} else {

    echo "존재 하지 않습니다.";

}

반응형

+ Recent posts