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 이 추가된다면 문제는 없을 것 같습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
81352 싸이월드에 고용량 움짤을 올리고 싶은데 [3] 테란완전정복2707 10/05/10 2707
81351 [경제]재할인율을 구체적으로 어떻게 적용하는지 궁금합니다. 기적의미학1947 10/05/10 1947
81350 벌꿀이 하얗고 단단하게 변질 되면... [9] 악학궤범a3032 10/05/10 3032
81349 dslr 캐논400d 렌즈 질문입니다 ~ [6] 미술토스2120 10/05/10 2120
81348 3D산업에 관해서.. 동방박사1959 10/05/10 1959
81347 만화책 추천 부탁드립니다~ [12] 유안2539 10/05/10 2539
81346 태연 노래모음에대해 [2] 쿠샤2509 10/05/10 2509
81345 미국에서 제일 인기있는 히어로는 누구인가요? [11] nokjung7772775 10/05/10 2775
81344 동원훈련에 대해서 묻고싶습니다. [7] Dorothy1942 10/05/10 1942
81343 중요한날에 식당에 갔는데 식당이 미칠듯 맘에 안들었다면... 어떻게 하시나요?? [10] 티나한 핸드레1715 10/05/10 1715
81342 프야매 1성도 재계약 해야할까요? [7] 독수리의습격1934 10/05/10 1934
81341 죽기전에 꼭 들어봐야 할 신나는 팝송 추천바랍니다... [8] 쓰고이5700 10/05/10 5700
81340 슬램덩크 결말은 무엇인가요?(만화책, 애니메이션) [6] Kaga9687 10/05/10 9687
81339 이번에 이영호선수가 양대우승하면 5대본좌가 될까요?? [20] hazers2157 10/05/10 2157
81338 혼자서 간단히 회화 독학하려고 하는데 [2] QWERTY2163 10/05/10 2163
81337 영상 편집, 제작쪽에 조예가 있으신분 계신가요 ㅠㅠ [3] 낭만원숭이2027 10/05/10 2027
81334 신림역 근처에 있는 백화점좀 알려주세요. [2] 박지용2462 10/05/10 2462
81333 오토보단스틱이 더 연비 좋다는 말이 있는데 사실인가요? [13] DynamicToss2929 10/05/10 2929
81331 유니클로 반팔티에 대해서~ [5] Blazing Souls2929 10/05/10 2929
81330 회귀분석 좀 가르쳐주세요 ㅠ.ㅠ GogoGo2116 10/05/10 2116
81328 야구장 자리 질문입니다 [6] 자판2596 10/05/10 2596
81327 프로그램 질문입니다! 유안1630 10/05/10 1630
81326 C++ OOP 관련 질문 드립니다. [6] AriENai2092 10/05/10 2092
목록 이전 다음
댓글

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