Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ FAQ
[5] 프렌드는 OOP에 충실하지 않은 메커니즘인가요?
김백일 [cedar] 21652 읽음    2002-08-05 13:34
[ QUESTION ]

프랜드함수는 클래스의 멤버함수가 아니니까
클래스의 데이타멤버에 아무런 제약없이 엑세스가 가능하게 되잖아요?
이점이 바로 클래스의 캡슐화(데이터 은닉)에 위배된다는 것 아닌가요?
클래스의 데이타멤버는 멤버함수를 통해서만 엑세스가 가능해야 하는데
일반함수에서도 가능하게 되잖아요?

[ ANSWER ]

결론부터 말씀드리면, 그렇지 않습니다.

다음은 성안당 번역의 C++ 기초 플러스(C++ Primer Plus)에 있는 글입니다.

------------------------------------------------------------------------------------

프렌드는 OOP에 충실하지 않을 것일까?

멤버가 아닌 함수가 개별 데이터에 접근할 수 있게 하는 프렌드 메커니즘은, 얼핏보면 데이터 은닉이라는 OOP의 원칙을 위반하는 것 같다. 그러나 그것은 지나치게 좁은 시각이다. 그러지 말고, 프렌드 함수를 확장된 클래스용 인터페이스의 일부라고 생각해 보라.
예를 들어 개념적으로 보면, double을 Vector에 곱하는 것은, Vector를 double에 곱하는 것과 거의 같은데, 전자는 프렌드 함수를 요구하는 반면, 후자는 멤버 함수로도 수행할 수 있다. 이것은 아주 깊은 개념적인 차이가 아니라, 단지 C++ 문법의 결과일 뿐이다. 프렌드 함수와 클래스 메소드(멤버 함수)를 모두 사용하면, 같은 사용자 인터페이스를 가지고 두 연산을 모두 표현할 수 있다. 또한 클래스 선언만이 어느 함수가 프렌드인지를 결정할 수 있으므로, 개별 데이터에 접근하는 함수를 제어하는 것은 여전히 클래스 정의이다. 쉽게 말해서 클래스 메소드와 프렌드는, 클래스 인터페이스를 서로 다른 방법으로 표현하는 메커니즘이다.

+ -

관련 글 리스트
5 프렌드는 OOP에 충실하지 않은 메커니즘인가요? 김백일 21652 2002-08-05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.