PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/05/10 18:59:42
Name AriENai
Subject C++ OOP 관련 질문 드립니다.
리포트를 하다 의문점이 생겨서 질문 남깁니다.

OOP의 목적이라고 하나요?? 데이터의 은닉성, 캡슐화..
이런 것들을 위해서 C++ 에서는 class의 private에 데이터를 저장한다고 알고 있는데요..

class Student
{
private : ....
public : ...
}

int main(void)
{
    Student student;
    vector<Student> v_student;
        ....
}

이런식으로 코드를 짠다고 하면, OOP의 특징 중 하나인 데이터의 은닉성을 훼손 하는 것 아닌가요??
즉, 제가 만든 클래스를 벡터형태로 사용 하고 싶으면 아래와 같이 클래스를 새로 정의해서 사용해야 OOP의 원칙에 어긋나지 않는건가요?

class Student
{
private : ....
public : ...
}

class V_student
{
private :
            vector<Student> m_student;
public : ...
}

int main(void)
{
    Student student;
    V_student v_student;
        ....
}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
10/05/10 19:02
수정 아이콘
위의 코드는 Student 는 "학생" 을 추상화한 클래스입니다.
아래의 Student 는 "학생들" 을 추상화한 클래스입니다.
만약 "학생들"을 관리하고 싶다면 "학급" 클래스를 만들어야 하지 않을까요?
MoreThanAir
10/05/10 19:17
수정 아이콘
위의 코드도 그다지 은닉성을 해치는 것 같아 보이지는 않는데요.
백터 안에 넣을 객체가 Student 객체라는 것만 알지 그 안에 어떤 private 멤버들이 있는지는 알수가 없죠.
예를 들어 클래스 제작자가 아닌 다른 프로그래머가 Student 클래스를 사용한다고 가정할 때 private 안에 학번을 바로 얻어올 수 없습니다.
GetSID(); 이런 public 멤버함수를 사용해야 얻어올 수 있겠죠.
10/05/10 19:32
수정 아이콘
Encapsulation을 시키는 것은 공통적으로 가지고 있는 정보가 있기 때문에 하나의 클래스로 묶어서 사용합니다.

그 중에 속성은 함부러 건드릴 수 없게 만든 정책이 은닉성이죠.

밑의 클래스 V_Student의 경우에는 해당 객체를 생성하기 위한 공통된 정보가 없습니다. 클래스화로는 타당하지 않다는 것입니다.

물론 은닉성의 정책에 대해서라면 좋은 효과 입니다. 내부의 객체를 마음대로 지우고 등록하는게 가능하니까 피해야 할 부분이겠지만

클래스의 요건을 만족하지 못하므로 클래스로 등록할 필요는 없다.

라는게 제 의견입니다.
10/05/10 19:35
수정 아이콘
많은 참고가 되었습니다.
노.안님// MoreThanAir님// EZrock님// 감사합니다!
10/05/10 21:08
수정 아이콘
information hiding 은 데이터를 다른 사람이 못 보게 하는 게 목적이 아니라,
잘못된 사용을 못하도록 만드는 것이 핵심입니다.
쉽게 말하면 private 으로 선언된 것은 외부에서 직접적으로 접근하지 못 하며
다른 public 함수 등을 통해서 제어하도록 하는 것이죠.
이 public 함수 안에서는 private 데이터를 다루지만 항상 안전하고 일관성 있게 다룹니다.

V_student 클래스는 information hiding 의 문제는 없지만, 잘못된 클래스 설계입니다.
저렇게 만드는 것만으로 클래스의 쓰임새가 별로 없죠. 그냥 Student array 를 선언하는 것과 별 차이가 없습니다.
만약 특정한 목적에 의해서 Student 의 리스트를 stack 이나 queue 등과 같이 특수하게 사용하는 용도가 있고
그에 맞는 적절한 data 와 member function 이 추가된다면 문제는 없을 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
81326 C++ OOP 관련 질문 드립니다. [6] AriENai2080 10/05/10 2080
81325 [야구]잠실구장예매 관련 [3] 와이2426 10/05/10 2426
81324 미드 How I Met Your Mother 어떤가요? [9] 거침없는몸부2175 10/05/10 2175
81323 기적이라는게 존재하는 걸까요?(경험해보신 분?) [26] IHG CP2625 10/05/10 2625
81322 스타2 베타키.. [6] Dream2094 10/05/10 2094
81321 건대 근처 원룸및오피스텔 질문 드립니다. [3] Ovv_Run!2100 10/05/10 2100
81320 해외인턴쉽 가야할까요? [10] journey212140 10/05/10 2140
81319 운전면허 질문 [8] 게발선인장1788 10/05/10 1788
81317 핸드폰 번호 거래되나요? [1] 아레스2231 10/05/10 2231
81316 스타 2 베타키 필요하신 분~ [5] 나해피2032 10/05/10 2032
81315 미드로 영어 공부하기에 관한 질문입니다. [16] 나다2341 10/05/10 2341
81314 파이어폭스 쓰시는분 계신가요? [3] 엔마2134 10/05/10 2134
81312 게임아이디가 해킹당했습니다. siach1826 10/05/10 1826
81311 그래픽 드라이버 다시 질문드립니다. [2] 도시의미학2029 10/05/10 2029
81310 자동차 보험 문의 [1] 리쌍택뱅1810 10/05/10 1810
81309 영어 듣기 공부하기 좋은 교재추천바랍니다.(시험대비는 아닙니다.) [3] 시오리1922 10/05/10 1922
81307 파트너게임 으로 할만한 게임 추천좀 해주세요 [9] 동네노는아이3470 10/05/10 3470
81306 일본 지샥매장에서 아직도 프로그맨을 파나요? 총사령관2664 10/05/10 2664
81305 스타크래프트 관련 오프닝을 제작하려고 합니다. Alan_Baxter1834 10/05/10 1834
81304 컴퓨터가 도중에 멈추는 문제. [3] 마타하리2039 10/05/10 2039
81303 단맛드립에 대한 질문입니다.. [9] 하나3522 10/05/10 3522
81300 운동 후 뭉친 근육은 파스로라도 풀어 줘야 하나요?? [4] 살콤한그대4985 10/05/10 4985
81299 1:7 저그 테란 리플레이 입니다 [16] umangil2174 10/05/10 2174
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로