누군가 getter / setter 메소드를 사용하지 않고 내부 변수 $ _fields에 액세스 할 수 있도록 코드를 작성하는 경우이를 설명하는 데 적절한 용어가 있습니까?
관리와 함께 사용할 정도로 공손한 것 :)
누군가 getter / setter 메소드를 사용하지 않고 내부 변수 $ _fields에 액세스 할 수 있도록 코드를 작성하는 경우이를 설명하는 데 적절한 용어가 있습니까?
관리와 함께 사용할 정도로 공손한 것 :)
답변:
예의 바른 사회에서 개인을 노출시키는 것은 결코 좋은 일이 아닙니다 ...
이 관행은 캡슐화 부족 / 불량입니다.
private
)에는 캡슐화 개념의 또 다른 구현이 있습니다.
__
이름 맹 글링에 사용해야 함 ). 다른 언어도 캡슐화가 잘못 될 수 있습니다 (예 : Java에서의 리플렉션 및 C ++의 포인터 산술)는 개인 변수를 얻습니다. 파이썬은 구문을 성가 시게하지 않습니다.
__
이름 맹 글링을 거의 사용하지 않습니다 . 이 없으면 __
디자인은 여전히 우수한 캡슐화를 반영합니다. "공개"는 "캡슐 부족 / 부족"을 의미한다고 잘못 주장했습니다. 개념은 여전히 존재합니다. 소스 코드에는 적절한 장식이 없습니다.
"특정 코딩 표준을 따르지 않음"이라고합니다.
OP는 다음과 같이 썼다.
getter / setter 메소드를 사용하지 않고 내부 변수 $ _fields에 액세스 할 수 있습니다.
그것은 표준에 위배 될 수 있으며, 따라서 코드 냄새 일 수 있습니다. 그러나 반드시 그런 것은 아닙니다 캡슐화 나쁜 . 게터와 세터에 대한 내부 변수 ( "내부 전용")를 외부 세계에 노출시키는 것은 훨씬 더 나쁠 것입니다.
문제는 : $_fields
외부 세계에 접근 할 수 있어야 하는가?
그렇다면 getter / setter 메소드를 추가하는 경우가 있습니다. 이 메소드는 $_fields
어떤 종류의 변수 인 것을 제외하고는 아무것도 캡슐화하지 않습니다 (즉석에서 계산 / 가져 오기 / 등이 아닌). 언어에 따라 유형 (일부 구현 세부 사항)을 외부로 유출 할 수 있습니다. 항상 getter / setter를 원하는지 또는 "필요"가 코딩 표준 문제인 경우에만.
경우는 $_fields
해야 하지 액세스 할 수 있습니다, 다음, 음, 액세스하지 않습니다. 다른 사람이 언어 수준 (비공개 및 친구)에서 액세스하지 못하게해야하는지 여부 (특정 상황에서 디버깅이 쉬울 수 있음)는 다시 코딩 표준 문제입니다.
캡슐화 문제는 이것과 완전히 직교합니다. 게터 및 세터를 사용하면 캡슐화를 위반할 수 있습니다. 심지어있어 쉽게 코드를 보이는 모범 사례를 다음과 같은 것 - 그들은 getter 및 setter의 무리를 볼 때 대부분의 사람들의 경종이 울리지 않기 때문에,에 슬립. $_fields
로 지정된 변수보다 내부 구현 세부 사항에 훨씬 더 많은 종속성을 도입 할 수있는 코드 private
입니다.
나는 나쁜 유추의 팬입니다. 열악한 캡슐화를 부르는 것은 총을 든 사람을 살인자로 부르는 것과 같습니다.
나는 그런 변수들을 public 멤버 변수 라고 부를 것이다 .
setter / getter 메소드가 그 이상일 경우
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
그런 다음 음모 변수를 만드는 것은 차이점이 중요한 몇 가지 경우를 제외하고 타이핑을 저장하는 것입니다.