The Pursuit of Happyness

모던 PHP 특징


http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0


- 네임스페이스

-- PHP 코드를 운영체제의 파일시스템 디렉터리 구조처럼 가상 계층 구조로 격리시켜준다.

-- 키워드 namespace, use


- 인터페이스

-- interface 를 정의하고 implements 해서 쓸 수 있다.


- 트레이트

-- 서로 상속관계로 묶기 애매하고 인터페이스로 공통 요소를 추상화 하기도 힘든 경우 사용

-- Trait을 사용할 클래스에 필요한 변수와 메써드를 정의하고, 각 클래스에서 use 키워드를 이용해서 trait 기능을 이용한다.

ex) 영화와 게임 클래스를 만든다고 하면, 둘 간에 상속관계도 없고, 추상화 할 요소도 없다. 각 클래스에 이름이라는 속성과 setName, getName 이라는 메써드만 공통적으로 사용된다면 아래와 같이 trait을 이용할 수 있다.


<?php

trait MediaMetaData 

{

    protected $mediaName;

    public function setMediaName($mediaName)

    {

        $this->mediaName = $mediaName;

    }

    public function getMediaName()

    {

        return $this->mediaName;

    }

} 


<?php

class Movie 

{

    use MediaMetaData;

} 


<?php

$movieTest = new Movie();

$movieTest->setMediaName("Test Movie");

echo $movieTest->getMediaName();


- 제네레이터

-- Iterator 와 달리 요구가 있을 때마다 반복적으로 값을 계산해서 돌려주는 기능

-- 계산 결과를 메모리에 모두 올릴 필요가 없어 매우 효율적인 운영이 가능


아래 예제에서 arrayOld 의 경우 $length 크기의 배열을 생성해서 전달

반면에 arrayGen의 경우 foreach에서 호출시 마다 다음 값만 생성해서 전달


<?php

function arrayOld($length)

{

        $ret = [];

        for ($i = 0;$i < $length; $i++)

        {

                $ret[$i] = $i;

        }

        return $ret;

}


function arrayGen($length)

{

        for ($i = 0;$i < $length; $i++)

                yield $i;

}


$len = 100000


foreach (arrayOld($len) as $i)

    echo $i . PHP_EOL;


foreach (arrayGen($len) as $i)

    echo $i . PHP_EOL; 




- 클로저

-- 생성 당시 자신의 주변 상태를 캡슐화한 함수 (함수 포인터라고 생각하면 된다.)


<?php

$closure = function ($name) {

        return sprintf("Hi %s", $name);

};


echo $closure("Tom") . PHP_EOL;




-  PHP 를 이용하여 http 서비스 테스트 하기

명령 프롬프트에서 다음과 같이 입력하면 8000 포트로 동작하는 http 서버를 띄울 수 있다. 한번에 하나의 요청씩만 처리하기 때문에 개발 테스트 용으로는 쓸수 있으나 Production 서비스 용으로는 적합하지 않다.


php -S localhost:8000


Comment +0

개발 환경 

JDK 1.8.x

MySQL


먼저 Eclipse 를 실행합니다.

참고로 저는 최신버전 LUNA를 사용중입니다.

Help -> Install New Software 선택

Find 에 hibernate 을 입력하여 검색

JBoss Tools 를 설치합니다.


그리고 eclipse에 hibernate을 사용할 프로젝트를 생성합니다. (여기서는 편의상 HibernateDB001 java 프로젝트)


MySQL DB와의 연결을 위해서 JDBC 드라이버를 build path 에 추가합니다. 

MySQL JDBC 드라이버는 아래 링크에서 다운로드가 가능합니다.

http://dev.mysql.com/downloads/connector/j/


저는 프로젝트에 lib 폴더를 만들어서 jar 파일을 추가하고 build path에 추가하였습니다.


그리고 Hibernate prospect 에서 config 파일을 생성합니다.

위의 아이콘을 클릭하거나 오른쪽 클릭하여 config 파일을 생성합니다.



hibernate.cfg.xml 파일을 생성합니다.


DB설정에 맞게 필요한 정보를 입력하고 Finish 를 누릅니다.


최종 설정은 대략 다음과 같습니다.



위의 정보를 제대로 입력했다면 Database에 아래와 같이 DB 정보가 나오게 됩니다.

Eclipse 위쪽의 Hibernate Code Generation 아이콘을 눌러서 코드를 생성합니다.

필요한 옵션은 다음과 같습니다.



ps. 내용 추가합니다.

hibernate 코드를 생성하려고 할때, hibernate.cfg.xml 을 파싱할 수 없다는 에러가 나는 경우가 있습니다.

Configuration 부분에 classpath에 에러 표시가 나타나면서 파싱이 안되는 경우인데요,

(Could not parse configuration 등의 에러..)

이 경우 hibernate.cfg.xml 파일의 헤더부분에 나오는 http://hibernate.sourceforge.net 부분을 http://www.hibernate.org/dtd 로 변경하면 문제가 해결됩니다. 구글링 결과 네트워크 연결이 되지 않거나 해당 사이트에 접속이 되지 않는 경우 생기는 문제라고 하니, parsing 에러가 나타나는 경우 위와 같이 변경하면 해결이 되는 경우가 있으니 참고하세요.









Comment +0