자유게시판

제목 PHP7 클래스는 조각 났다!
글쓴이 kaido 작성시각 2015/09/18 16:58:53
댓글 : 9 추천 : 1 스크랩 : 0 조회수 : 17180   RSS
우연찮게 본 일본 블로그에 재미난 기사가 올라왔더군요.

PHP 클래스는 조각 났다 라는 기사입니다.
http://blog.tojiru.net/article/420220967.html

요약하면 이런 내용입니다.

PHP7은 이제 클래스를 사용하지 않고 OOP 구도를 쓸수 있게 합니다.


우린 항상 'why' 이런 짓을 하는지 궁금해야 합니다.

자 문제 입니다.

우리는 객체를 사용할때 흔히 '상속'을 합니다. 그렇다면 상속을 하는 이유는 무엇 일까요?

사실 이유는 많은데, 가장 큰 이유는 재사용 입니다.

객체의 재사용. 즉 코드의 재사용과 귀결됩니다.

하여 2000년 초반에는 상속 예찬론자들이 대거 등장 했지요.
[자고로 상속중에 최고는 재산이라 하였... 퍽]

상속은 많은 이득을 주었지만 엄연히 단점이 존재합니다.

네! 상속은 쓸데없는 객체도 만들고, 이 객체는 관리도 안되고 버려집니다.
상속에 의한 예기치 못한 데이터 값도 일어 납니다.
혹은 이 상속이 제대로 되지 않은 상속일 가능성도 높습니다.

[뭐 간단히 예를 들자면, 오리 라는 클래스를 정의해서 객체를 만듭니다.
오리는 물위에 떠다닙니다. 
'꽉' 하고 소리도 냅니다.
이 오리 클래스로 수많은 오리들의 속성을 정의 했습니다.

아 그런데 오리가 날 수도 있네요?
오리가 날수 있도록 기능을 첨부했습니다.
그런데 문제가 발생 했어요.
네! 그 수많은 오리 중에는 '고무로 만들어진 오리' 도 있던 겁니다.
이 오리는 못납니다. 못날아요. 망했어요!]

그리하여 우리는 수많은 상속 패턴을 만들어 냅니다. (예 스트레티지, 팩토리)

수많은 연구(삽질) 결과 우리는 상속을 자유롭게 다룰 수준에 다다릅니다.

허나 상속은 제약이 따릅니다.

실로 상속은 만능이 아니며, 실제로 시스템이 커질수록 관리도 어려워집니다.


헤이~ 제이! 이 문서대로 했는데 왜 객체에 값이 몇개 비는 거야?
오~ 로버츠! 기다료봐! 문서 확인 해볼께. 음! 그 객체 안쓰는 건데? 
와이? 그럼 이게 왜 남아 있는거야!
그건 다른 객체에 부모 클래스 라서 지울 수 없었어.

대략 이런 상황극이 만들어 질지도...


위에 내용을 봐서도 알겠지만. 네! 그렇습니다.
상속은 부모가 되는 클래스가 필요하며, 부모가 되는 클래스가 만능이 아님을 우리는 알고있지요.
그리고 사용자 정의의 확장이 이루어 지거나 인스턴스 생성을 만듭니다.
[이때부터 점차 업데이트라는 이름의 개판으로 가는 것이죠]


요약 하건데 PHP7은 정형화된 상속의 굴레에서 탈피 선언을 한 것입니다!

필요한 인스턴스는 즉시 생성 하며, 상속을 필요치 않게 한다.
그럼에도 재사용이 가능하다.
얼마나 유연 합니까?


PHP7은 다음과 같은 행위가 가능 합니다.
1. PHP5.4 부터 도입된 토레이토를 사용하여, 상속하지 않은 방법으로 객체 재사용을 사용 합니다.
2. 네임스페이스 정의시에 임플리먼트를 넣어서 인터페이스 정의가 가능 하다.


뭔가 말이 어려운데... 요약 하자면

우리가 흔히 아는 위에서 아래로 흐르는 OOP 구도에서 탈피 하여

언제든 어떤 형태로든 대상의 객체를 데려와서 기능을 수행 하겠다는 이야기가 됩니다.

즉 디자인패턴이 사실상 붕괴 되었습니다.



.... 잠시 놓고 생각 해보니 PHP의 유연함은 언어계 중에서도 이단아에 가까운듯 합니다.

뭐 아직 개념만 정의된 따끈따끈한 구조라서...
실무 적용은 생각 해볼 문제 인듯 합니다.
 다음글 9월 광주 정모 후기 (7)
 이전글 실행 속도만 본다면 php는 날코딩~ (2)

댓글

한대승(불의회상) / 2015/09/18 17:10:17 / 추천 0
"토레이토"가 뭘까요? 생소 한데...
한대승(불의회상) / 2015/09/18 17:12:08 / 추천 0
ㅎㅎㅎ Traits 기능을 이야기 하는것 같군요.
기존 클래스 개념과 달라서 뭔가 재밌는걸 해볼수 있겠다 했는데....


http://php.net/traits

같이 보면 좋을것 같은...
http://culttt.com/2014/06/25/php-traits/
kaido / 2015/09/18 17:19:00 / 추천 0
불의회상 // ㅋㅋㅋ 일문 그대로 읽느라 그리 적었습니다. 트레이트 가 맞습니다.

사실상 PHP7의 도입은 시간 문제 일듯 합니다.

아직도 PHP 5.3 미만으로 만들어진  사이트가 많긴 합니다만...

신세계로 향해야죠.
변종원(웅파) / 2015/09/19 07:11:13 / 추천 0
저도 기다리는 중입니다. 
지금 회사에서 운영중인 서버들이 절반정도는 5.3대, 나머지는 5.4대인데 7로 가려고 참고 있네요.
 
건곤대나이 / 2015/09/20 22:16:33 / 추천 0
PHP7에 대해 아는바가 없지만 나름 객체지향 언어에는 관심이 있어서 한말씀드립니다. ^^

객체지향의 장점중에 코드 재사용성은 말씀하신대로 상속으로 구현하지만
그 상속은 본문의 설명과 다르게 다양한 상속이 가능하다는 것입니다.

객체지향 개념에서 많이 예를 들지만
부모객체는 거의 추상화된 방식이고
그것으로 부터 상속받은 자식객체는 실제 구체적 행위를 하는것으로 정의를 합니다.

생명체라는 부모객체를 정의하면
기본적인 데이타(유전자, 생존환경(땅, 하늘, 물))와
기본적인 기능(번식(무성, 유성, 암수동체등), 생명유지방식등 다양한 기능을 추상적으로 정의 하죠.

자식객체의 분화를 어떻게 할것인가가 중요한 부분이죠.

생명의 자식을 동식물로 분화 시킬것인지 아니면 자신만의 다른 생명시스템으로 분류할 것인지에 따라 다양한 프로그램의 변종이 생기겠죠.

그리고 객체는 이벤트에 반응하도록 설계되어 있기 때문에
어떤 이벤트에 어떤 객체가 반응을 하는지도 매우 중요하죠.
물론 쉽지는 않죠.

만약 PHP7에서 그런기능이 구현된다면 환영할 일이라고 생각합니다.

PHP7이 제대로 나오기 까지는 현재의 PHP버전에서 그것을 어떻게 구현할것인가를 함께 고민하고 토론하면 좋겠다는 생각 입니다.
 
kaido / 2015/09/21 08:57:28 / 추천 0
@건곤대나이

네 맞습니다.  본문에도 언급 되었습니다. 원하는 만큼 객체를 다룰 수 있는 경지까지 올라왔고 다양한 패턴이 나왔습니다.
그럼에도 불필요한 객체와 존재가 필요한지 의문이 되는 객체를 수 없이 만들고 방치 합니다.
시스템이 커질수록 점점 방대 해지고, 관리가 어렵다는 것이죠.

현재 우리는 시스템화 할 수록 OOP 구도로 만들어라는 상식을 강요받고 있습니다.

그러나 저는 매번 의문을 품었죠. 네! 객체지향은 참 매력적인데 막상 쓸려니 이거이 참...
실무 작업중 OOP 인스턴스화 시킬려 하면 약간 괴리감이 존재 합니다.

결론적으로 쉽지 않다. 이게 문제였던 거에요.

그래서 선 정의가 아닌 후 정의가 가능한 시스템을 전 항상 연구 하고 있었죠.
푸하라 / 2015/09/25 11:23:54 / 추천 0
Traits 라는 녀석은 왼지 c++상속중 다이아몬드 스탭의 상속 문제를 java에서는 하나의 상속으로 만 귀결 시켰던 문제를 말끔하게 해결한건가보네요..?????

근데 이상하게 php에서는 객체지향의 프로그래밍 보다는 단순한 함수 형식의 프로그래밍쪽이 편하게 느껴지네요..

php쪽은 프로그래밍 하면서도 계속적으로 고민되게 하는 부분이 얼마나 적은 객체와 함수로 표현 할 수 있는가 고민하게 되고...
특히 gui 개념의 프로그래밍쪽과 쓰레드가 없어서 더욱 개발시 느슨해지는경향도 있는것 같습니다.
특히 메모리 관리에 신경쓰던 옛날 c,c++프로그래밍 시와는 완전히 달라서 더욱 그렇게 느껴지는 부분도 있는것 같아요..
물론 php가 별로다가 아니라 php 자체가 너무 자유로운 영혼이라서 더욱 그런거 같네요...
특이사항인데 codeigniter 프레임 워크를 사용하면서는 어느순간인가부터는 새로운 클래스를 생성한적이 거의 없는 듯 .. 저만 그런가요???


 
변종원(웅파) / 2015/09/25 11:42:28 / 추천 0
푸하라/ 저도 어느 순간부터 생성 보다는 가져다 쓰는게 주로네요. restful도 라이브러리로.. shoturl도 그렇고 sns 관련 라이브러리 등등
한대승(불의회상) / 2015/09/25 11:54:09 / 추천 0
가져다 쓰는건 composer 가 대세...