CI 묻고 답하기

제목 private 모델 함수관련 질문입니다.
카테고리 CI 2, 3
글쓴이 브레인토스트 작성시각 2016/12/07 17:36:01
댓글 : 5 추천 : 0 스크랩 : 1 조회수 : 14011   RSS

지금까지 CI로 개발하면서 그냥 아무 생각없이??

프레임워크에서 해주니까?? 라는 이유로

public 만을 사용해왔습니다.

정말 일부만 빼고말이죠..

지금 model 함수를 여러개 만들던중에 갑자기 앞에 private을 붙여야할지 안붙여야할지 public을 써야할지..

라는 생각이 계속 머릿속을 맴돌아서요.

메뉴얼에는 일단 기본적으로 _함수명 이렇게 만들면 웹상에서 호출이 안된다고 되어있더군요.

그런데 스택오버플로우를 찾아보니 _표시는 필수는 아니라고도 하구요.

어찌됐든 컨트롤러도 중요하지만 직접 DB를 다루는 Model 클래스에 존재하는 메소드 멤버들은

private로 해주는게 좋을까요?? 아니면 public으로 해도 상관없을까요? 어차피 CI상에서는

모든 접근을 controller를 통해서하니 model함수를 사용하려면 model함수로 인스턴스를 만들어주고

사용하게되는 구조니 private이 굳이 필요 없을까요 ??

 다음글 따로 구축되어있는 서버에서 호스트는 다르고, 같은 도메... (1)
 이전글 환경변수 자동 설정? (2)

댓글

kaido / 2016/12/07 17:44:14 / 추천 0

private 에 의문을 품었다는 것은 OOP 구조에 의문을 품은것과 동일 합니다.

이 기회에 이론 부분을 차분히 진행 하시면 답이 나오실거라 생각 듭니다.

이제 객체에 대해서 받아들일 준비가 되었다고 생각 합니다.

변종원(웅파) / 2016/12/07 17:49:13 / 추천 0

모델 첫 줄에 아래 부분이 들어있다면 모델 파일로 직접 접근이 안됩니다. 컨트롤러도 마찬가지구요

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

현재 ci 구조에서는 모델단 보다는 컨트롤러단에서 사용하는게 맞습니다.

특정 기능은 하지만 외부에서 주소로 직접 접근하지 못하도록 하고자 할때 사용합니다.

브레인토스트 / 2016/12/07 19:54:16 / 추천 0

@kaido

감사합니다 ㅎ

@웅파

네 저 코드가 있지만 그래도 혹시나 하는 생각이 들더군요.. 감사합니다 ㅎ

한대승(불의회상) / 2016/12/08 05:17:16 / 추천 0

@브레인토스트

캡슐화에 대한 고민을 하고 계시는군요.

반드시 모델 내부에서만 사용되는 메소드나 변수라면 private로 선언하는게 좋습니다.

메소드를 작성하다 보면 나타나는 공통적으로 사용되는 부분을 별도의 메소드로 정리할 때 유용합니다.

브레인토스트 / 2016/12/08 14:15:54 / 추천 0

@불의회상

네 사실 위에 분들이 말씀하신대로 코드 상단에 defined()메소드를 통해서 파일에 직접 접근을 막고 있기는 하지만

이게 있는데 과연 controller를 제외한 곳에서의 private이나 protected와 같은 접근제한자가 과연 의미가 있나하는 생각이 들어서요..

컨트롤러야 유저가 직접 호출하는 곳이니 접근제한자가 의미가 있겠고 그렇게 사용도 하고있구요.. 근데 model에서 약간 의구심이 들었습니다 ㅎ