CI 묻고 답하기

제목 interface & abstract 키워드는..?
글쓴이 세콩 작성시각 2012/07/23 17:30:40
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 23877   RSS
Codeigniter 가 php5를 지원한다는 거슨
곧 객체지향을 지원하겠다는 의미라고 생각되옵니다.

그렇다면 객체지향 문법의 꽃이라 할수있는

" interface " 및 " abstract " 키워드
어떻게 적용시킬수 있을지 궁금하옵니다.


ps) 선질문 후 구글링 죄송합니다 ㅋㅋ;;
 다음글 ci세상님께 질문드립니다. (2)
 이전글 체크박스후에 페이징 처리..도움이 필요합니다...ㅠㅠ (5)

댓글

인스카 / 2012/07/23 17:51:43 / 추천 0
http://php.net/manual/en/language.oop5.interfaces.php 


이런 글이 있군요... ㅋㅋㅋㅋ 이건 구글링 전에 봤어야 하는 ~~
세콩 / 2012/07/23 18:15:35 / 추천 0
인스카 // 으앜 ㅠㅠㅋ 답변 감사합니다. 추가질문 드려도 될까요~~??

1. CI상에서 라이브러리나 헬퍼에 인터페이스를 만든후 
 - 해당 인터페이스를 load하여 implements 하여 사용하면 될까요?

2. CI코드에서 implements 샘플예제 하나 부탁드리옵니다~~
 - CI코드에서 implements 어떤 상황에서 사용해야할지 감이안옵니다 불쌍한 중생에게 도움을 주옵소서~
 - 창조의 기본은 모방에서부터 온다고 하였으니.. -_-;; 

3. 컨트롤러가 implements 를 구현할 상황은 어떤경우가 있을까요..?
 (객체지향은 어렵고 험난하구나 -_-...)
인스카 / 2012/07/23 18:55:53 / 추천 0
추가질문은 아니아니 아니되오~ ^^;

OOP의 개념을 아시나요? 제 짧은 경험에서는 CI에서 Interface를 사용해서 구현할만큼 복잡한게 안 나왔거든요...

자세한건 아랫분이..~~=3
한대승(불의회상) / 2012/07/23 19:46:47 / 추천 0
메뉴얼의 이부분이 원하시는 답이 될 것 같습니다. ^^

http://cikorea.net/user_guide_2.1.0/general/creating_libraries.html
eitetu / 2012/07/24 17:05:33 / 추천 0
사실상 PHP에서 interface와 Abstract Class의 의미가 좀 옅습니다.

Class의 Member Method에서 받을 인자값을 고정하기위해, 또는 특정 Class의 구조를 유지하기 위해 필요한 것인데 PHP는 그걸 무시할수 있는 강력한 능력(?)이 있죠.

어떤면에서는 장점이지만, OOP적인 면에서 보면 단점이 될수도 있는...

아무튼..

1. CI에서 헬퍼는 interface를 사용할 필요가 없습니다.
1.1. 라이브러리도 궂이 interface를 구현(implements) 할 필요는 없습니다. (몇가지 디자인 패턴을 공부해보시면 아시겠지만.. DAO(Database Access Object) 같은 말 그대로 여러가지 interface역활을 해줘야 하는 것들이 정의 되어야 하는데 CI는 이미 필요한 것들은 구현되어있습니다. 궂이 추가 하자면... SNS연동 등이 있겠군요)

2. CI코드에서 implements 예제라..
대략적으로
<?php
interface SocialNetwork {
public function getInformation(string $str=null);
public function getTimeline(string $str=null);
public function write(string $str);
.
.
.
}

class Twitter implements SocialNetwork {
public function getInformation(string $str=null) {
// user code
}
public function getTimeline(string $str=null) {
// user code
}
public function write(string $str) {
// user code
}
.
.
.
}

class SNSController extends CI_Controller {
public function write() {
$this->load->library('Twitter', $params);
if($this->Twitter instanceof SocialNetwork)
   throw new Exception("do not implements SocialNetwork");
.
.
.
}
}

요정도 겠네요.


3. 컨트롤러가 implements 를 구현할 상황은.. 음....... 어렵군요... 그건 해당 컨트롤러가 역할을 수행하는 도중에 해당 interface에 정의된 Member Method를 사용하는 상황이 나와야 하는데... CI자체를 커스터마이징 해야..................... CI Core library를 건드리는 상황이 되야 할듯 합니다.




PS. 여담입니다만... 처음 디자인패턴을 배울때 어디든 모두 디자인패턴을 적용하고 싶어서 안달이 납니다. 하지만, 오히려 독이됩니다. 괜히 복잡해지기만 하고 자신이 짠 코드 알아보지도 못하고 오류도 디버깅도 힘들어집니다. 필요한곳에 정확히 쓰는게 중요합니다.
저도 머............... 여기저기 쓰려고 안달난 상테이긴 한데.. 열심히 참고 있습니다 ㅋㅋㅋㅋㅋㅋ
eitetu / 2012/07/24 17:22:01 / 추천 0
아. 그리고 객체지향은 CI보다는 Yii가 더 잘되어있습니다.
(요즘 릴리즈되는 Yii는 php4는 지원하지 않습니다. interface와 abstract 키워드가 없고, namespace라는 개념이 없기때문에..)

사용하기에 뭐가 더 좋다고는 확정드릴수는 없네요...
세콩 / 2012/07/25 11:21:04 / 추천 0
모두들 답변 감사드리옵니닷 (_ _)


ps)  더욱 분발하여 열심히 공부하겠사옵니닷  꾸벅 (_ _)