php 객체지향 스타일로 코딩할 때 고려요소

php 객체지향 스타일로 코딩할 때 고려요소

QA

php 객체지향 스타일로 코딩할 때 고려요소

본문

객체지향 프로그래밍을 할 거냐 말거냐는

상속을 쓸거냐 말거냐 하나로 결정하면 되는 건가요?

이 질문에 댓글 쓰기 :

답변 4

class 를 보는 관점

전 저희 아이들한테 알려줄 때

메모리 -> 변수

변수를 감싸면 -> 함수

함수를 감싸면 -> 클래스

요래 설명해줍니다.

스코프 랩핑 캡슐화 이렇게 감싸준다는 개념으로 경계설정해줘서 이를 이용한 권한 분리 구조 고정 등의 이득을 취하기 위한 방법이고

 

 

방정식 처럼

변수 : 더하기 빼기 수준

함수 : 곱샘이상 1차 방정식 수준

클래스 : 2차 방정식 수준

방정식이 2차 방정식 이상이다보니, 구조적으로 할 수있는게 다양하다.

상속은 이중 구조를 유지해야할 경우 인풋 아웃풋 고정해놓고 내용만 바꿔서 사용하려면

오버라이딩 이라고 하죠, 

 

 

그리고 최근  그누보드용 함수형 restful api 만들면서 든 생각은

외부에서 호출 할때

함수형은

조건으로 분기해서 호출 해야하는데,

클래스형은 메인 함수를 경유해서 파일안의 public  클래스 명을 바로 호출할 수 있음

 

그런데, 이렇게 랩핑 캡슐화 되어 있어서 공동 기능 가져다 쓰려면, 일일이 상속 쓰지 않고

중간에 주입 받아서 써야하는데,  이걸 DI 라고 하는데 
그때 그때 가져다 쓰면 DI
뭐 실행하기 전에 미들웨어로 사용하려면 hook  를 쓰죠
그런데, 이게다 캠슐화시며서 경계를 만들어 놔서 해야하는 귀찮은 작업

그리고 속도도 느려집니다.

그럼에도 불구하고 쓰는 이유는
단체 작업할때 옆팀에서 소스코드 잘못짠거 영향 없게하려고
그러니까 때꾼 개발용으로 구조와 규칙관리가 편리해서

대형 프로젝트용으로 사용한다.

성능 이슈가 그나마 적은 웹서비스쪽으로 많이 하는것 같음.

게임 같은경우에는 속도 감안해서 사용안하는 쪽도 많은 것 알고 있음.
 

질문의 요지는 상속 이야기 하시는 것보다는

import 나 include  말씀하시는 것 아닌가요?

만약 상속을 구조 캡슈화 및 구조유지라고 생각하신다면,

클래쓰 쓰는 이유로 100% 정답이라고 생각합니다. 때꾼 개발용으로 좋다 정도.

 

그리고 구조가 공고하다는 부분은 여러가지 장점이 있는데,

외부에서 공유되는 라이브러리들이 호출과 리턴 구조가 고정되어서 버전 업이 되어도 크게 문제없이 사용가능하다는 점

그리고 에디터에서 클래스 구조를 추적하기 쉬워서 도움말을 잘 해준다는 점

 

때꾼으로 개발하는 대형프로젝트 아니면, 클래스 사용하는 건 좀 겉멋들어거 그런게 아닌가...

클래스로 개발하면 개발 속도 엄청 느려집니다.

전 자율성과 속도가 느려진다는 점 때문에,  그리고 msa 방법론이 나온 이후로는

객체 지향을 좀 싫어라 합니다.

별도 class 형태로 구현해 관리를 용이하게 하기 위한 방식으로 사용하게 되기도 하는데요
꼭 상속의 기준으로만 결정하는게 아닌 구조적인 부분에 대해서 관리가 용이한쪽으로 결정하셔서 구현하시면 되십니다.

프로그램의 구현하는 분의 상황에 따라 객체지향부분으로 작업이 숙달되신분은 그게 편하다고 느낄수 있겠지만 만약 그렇지 않은 분은 조금 헷갈릴수도 있는 부분이라서요

상속은 그냥 하나의 기능일 뿐이고

객체지향은 class형태로 구현해서 사용하는 형식을 뜻한다 보시면됩니다.

영카트의 경우 상품관련쪽으로 class로 구현되어있으니

참고해보셔도 될듯합니다.

복잡성이 증대될 때 선택할 수 있는 개발방법론의 하나입니다.

말씀하신 것처럼 객체의 상속이 필요한 경우...
그누보드에서는 한 테이블에 저장되는 글, 답글(reply). 댓글(comment)을 다룰 때 객체로 만들고 상속시켜 특성에 따라 데이터만 다루거나 기능을 명확하게 분리할 수 있겠죠.

 

https://github.com/gnuboard/gnuboard5/blob/master/common.php#L524-L528

이 코드처럼 회원이 로그인할 때 탈퇴, 차단 상태에 따라 로그인을 거부하거나 이메일 인증, 본인인증을 하지 않은 회원 등을 구분할 때 날짜가 기록되어있는지, 날짜가 있다면 오늘보다 이전인지 등을 확인하는 코드들이 작성되는데 필요한 곳 모두에서 이런 복잡한 코드를 사용해야하므로 그누보드를 이용해 개발하는 사람들이 모두 회원테이블에 대한 구조를 파악해야만 가능한 일이죠.

 

이를 객체로 다룬다면 잘 아는 사람이 정상적으로 활성화된 계정인지 반환하는 코드를 하나만 작성해두면 그누보드를 잘 모르는 사람도 $member->isActivated() 이런 메소드 하나만 사용하면 아주 쉽게 사용이 가능해지죠.

 

위 사례처럼 복잡성을 낮추고 재활용성, 규격화된 API 제공 등 글/답글/댓글 형태처럼 객체 상속을 활용하여 if문을 덕지덕지 바르지 않고도 명확한 API를 제공할 수 있겠죠.

 

그누보드 자체가 절차지향적이다보니 객체지향을 어려워하시고 배척하는 분들이 많더라고요. 잘 구축해놓으면 API가 단순해져 사용하기 편리해지는데 말이죠.

답변을 작성하시기 전에 로그인 해주세요.
전체 59,608
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT