:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
10/05/10 19:02
위의 코드는 Student 는 "학생" 을 추상화한 클래스입니다.
아래의 Student 는 "학생들" 을 추상화한 클래스입니다. 만약 "학생들"을 관리하고 싶다면 "학급" 클래스를 만들어야 하지 않을까요?
10/05/10 19:17
위의 코드도 그다지 은닉성을 해치는 것 같아 보이지는 않는데요.
백터 안에 넣을 객체가 Student 객체라는 것만 알지 그 안에 어떤 private 멤버들이 있는지는 알수가 없죠. 예를 들어 클래스 제작자가 아닌 다른 프로그래머가 Student 클래스를 사용한다고 가정할 때 private 안에 학번을 바로 얻어올 수 없습니다. GetSID(); 이런 public 멤버함수를 사용해야 얻어올 수 있겠죠.
10/05/10 19:32
Encapsulation을 시키는 것은 공통적으로 가지고 있는 정보가 있기 때문에 하나의 클래스로 묶어서 사용합니다.
그 중에 속성은 함부러 건드릴 수 없게 만든 정책이 은닉성이죠. 밑의 클래스 V_Student의 경우에는 해당 객체를 생성하기 위한 공통된 정보가 없습니다. 클래스화로는 타당하지 않다는 것입니다. 물론 은닉성의 정책에 대해서라면 좋은 효과 입니다. 내부의 객체를 마음대로 지우고 등록하는게 가능하니까 피해야 할 부분이겠지만 클래스의 요건을 만족하지 못하므로 클래스로 등록할 필요는 없다. 라는게 제 의견입니다.
10/05/10 21:08
information hiding 은 데이터를 다른 사람이 못 보게 하는 게 목적이 아니라,
잘못된 사용을 못하도록 만드는 것이 핵심입니다. 쉽게 말하면 private 으로 선언된 것은 외부에서 직접적으로 접근하지 못 하며 다른 public 함수 등을 통해서 제어하도록 하는 것이죠. 이 public 함수 안에서는 private 데이터를 다루지만 항상 안전하고 일관성 있게 다룹니다. V_student 클래스는 information hiding 의 문제는 없지만, 잘못된 클래스 설계입니다. 저렇게 만드는 것만으로 클래스의 쓰임새가 별로 없죠. 그냥 Student array 를 선언하는 것과 별 차이가 없습니다. 만약 특정한 목적에 의해서 Student 의 리스트를 stack 이나 queue 등과 같이 특수하게 사용하는 용도가 있고 그에 맞는 적절한 data 와 member function 이 추가된다면 문제는 없을 것 같습니다.
|