• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

모델 User 등에서 속성들을 protected 나 private 으로 설정하지 않는 이유가 있습니까?

22.07.22 10:27 작성 조회수 187

0

강사님 강의 잘 듣고 있습니다~ ^^*

역시 후반부에 오니 핵심들이 꼭꼭 쌓여있습니다.
앞에서 잘 설명해 주셨던 것들이 잘 조합되어서,
저의 이해도도 많이 높아 졌습니다.

그런데 궁금한게 User 클래스와 같은 Model을 만드실때,
속성을 protected 나 private으로 미리 선언하지 않고
모델의 메서드 내에서 매직메서드 __set() 을 통한 할당을 함으로써,
public 접근이 가능하게 됩니다.

강의에서 말씀하셨듯이 VO나 DTO에 대한 언급을 하지 않는 이유는 이해가 갑니다만,
뷰 등에서 모델의 객체(vo)가 수정되지 않을 것을
보장(immutable)해 주는 것은 중요하지 않습니까?

혹시 별다른 이유가 있는지 궁금해서 질문드립니다.

MVC 아키텍처에서 VO가 중요한 이유는
VO가 변하지 않음을 보장하는 것이라고 생각하거든요~^^

강사님의 다음 라라벨 강의도 기대되네요~ ^^*

답변 1

답변을 작성해보세요.

1

안녕하세요.

그 이유는 PHP 언어의 느슨함을 이용한 것이라고 볼 수 있습니다. 실제로 라라벨의 모델에서도 데이터 매퍼(Data Mapper)가 아닌 엑티브 레코드(Active Records)을 사용하여 모델에 실제로 명시하지 않고 정의되지 않은 프로퍼티임에도 접근할 수 있는 형태를 띄고있습니다. (물론 해당 프로젝트 한정에서는 모델에 protected 로 프로퍼티를 정의한다고 해서 문제가 되진 않고 더 좋겠지만) 만약 제가 사용하는 또 하나의 언어인 Golang 과 같은 언어였다면 분명하게 구조체(Structure)를 이미 정의하고 가기 때문에 애초에 그것은 안티패턴이라 지향하지 않았겠지만 PHP 를 할 때만큼은 다릅니다.

언어가 가지고 있는 고유 특색이자 어느정도의 느슨함을 적극적으로 활용하고 있는 것이 라라벨이기에 단지 그것을 비슷하게 모방하려고 했을 뿐이죠. 타입에 극히 엄격한 Java 와 같은 언어에서는 상상도 하기 어려운 일이겠지만, 라라벨에서는 __set() 및 __get() 을 사용한 동적 메서드를 파사드(Facades)라는 개념을 통해 적극적으로 사용하고 있기도 합니다.

PHP 가 가지는 이러한 점은 개발자들에게 있어 호불호가 나뉘게 되는 이유가 됩니다. 차후 PHP 9.0 에서는 보다 견고함을 유지하기 위해 이러한 느슨함을 점점 줄일 것이라고는 하고 있으나 라라벨을 비롯한 현재까지의 PHP 언어의 활용현황이 그렇다는 점을 참고해주셨으면 좋겠습니다~