'is a'란 것이 포함되는 것은 포함하는 것이 하는 것을 똑같이 해야 한다는 것을 의미하나요?
글쓴이: dltkddyd / 작성시간: 월, 2014/06/02 - 5:46오후
Effective C++ p269를 읽고 있습니다. 'is a'에 대한 설명이 잘 이해가 안 됩니다. 전 다음과 같이 엉성하게 이해를 했는데요.
학생과 사람이라는 관계를 볼 때, 학생은 사람이다. 이런 경우를 'is a' 관계라 하는 것 같았습니다. 학생은 사람에 포함되기 때문에 사람의 모든 특징을 물려받는다라고 볼 수 있고, 그래서 사람에 해당하는 것에 대한것(멤버)을 학생에서 변경을 가하게 되면, 그것은 'is a'의 관계에 어긋나는 것이다라는 설명을 하는 것으로 이해했습니다. 그렇기 때문에 사람 클래스의 함수를 학생 클래스에서 재정의하는 일이 생긴다면, 이는 'is a'에 부합되지 않는다라고요. 가령 '사람다운 행동을 하는 모든 이는 사람이다'라는 명제에서 사이코 패스인 학생이 반인륜적인 행동을 범했다고 한다면, 이 학생을 사람으로 볼 수 있느냐의 문제. 사람은 모름지기 사람다운 행동을 할 때만 사람이라고 할 수 있다면 이 학생 클래스는 is a에서 벗어났다고 할 수 있다는 것을 말하는 것일까요? 즉 절대로 오버라이딩 해서는 안 되는 관계가 is a 관계인지요? 조금 예시가 극단적이고 좋지는 않네요. 글재주가 없는 것이 아쉽네요.
Forums:
문법책부터 보세요.
문법책부터 보세요.
네, 죽보고 있습니다.
지금 p279 보고 있습니다. 생각보다 빨리 읽히지 않네요. 이 부분에서 언급이 될 것 같은 느낌이 드는데요. 계속 읽어봐야 겠습니다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
is a는 변경을 할 수 있는 것이군요.
학생은 사람에 포함되지만 오버라이딩도 할 수 있으니 변경을 가할 수도 있는 것이군요. 연역 추론에 따라 포함되면 is a, 포함하면 composition(has a 또는 is complemented in terms of)로 봐여 겠네요.
'is-a' 관계라는 말을 듣고 느낌이 바로
'is-a' 관계라는 말을 듣고 느낌이 바로 안오시면,
영어 공부가 좀 필요해보입니다.
'is-a' 관계에 대한 한국말로된 설명을 듣고도 잘 이해가 안되면,
수학, 특히 집합에 대한 공부가 필요한 상태입니다.
상속이니, 오버라이딩이니 하는 기술이 중요한게 아닙니다.
논리적으로 생각하는 능력이 있으면, 기술은 그냥 저절로 따라옵니다.
젊은 시간을 좀 더 생산적으로 사용하실 수 있을텐데,
안타깝네요..
그 정도는 알고 있습니다.
구체적인 내용으로 들어갔을 때가 문제가 되는 거죠. 그리고 어느 때 상속을 써야 하는지의 문제도 여기 질문 내용에서는 중요한 겁니다. 그게 중요한 게 아니라는 정도의 답변을 하시는 수준이라면 답변도 달지 마세요. 그리고 님은 프로그램을 느낌으로 하시나보군요. 감으로 코드 짜는 프로그래머라.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
이곳은 님의 개인적인 공간이 아닙니다. 님이 아무리
이곳은 님의 개인적인 공간이 아닙니다.
님이 아무리 한심한 질문을 올려도 아무도 글을 올리지 말라고 하지 않습니다.
자기가 듣기 싫은 이야기라고 남에게 하지마라할 권리는 없기때문입니다.
그리고 자기가 무엇을 모르는지 모르는 것. 또는
모르는 것을 알고 있다고 잘못 알고 있는 경우가 가장 심각한 무지의 단계입니다.
지 수준으로 남을 보니 그 수준이죠.
답변 다운 답변이 아니기 때문입니다. 단서 달지 않았습니까. 그런 수준의 답변이라면(단서, 조건, 프로그래밍에서는 if에 해당함) 답변 달지 말라고요. 단서를 조건으로 이해하지 못 하고 트집을 잡는 것을 보면 님의 머리에서 프로그램 코드 짜는 수준이 어느 정도인지 알겠습니다. 게다가 익명 뒤에 숨어서 은근히 남을 무시하는 돼 먹지 못한 태도.
님께시 답변 다운 답변을 달면 그러겠습니까. 남의 수준을 넘겨짚으니 드리는 말씀입니다. is a를 보고 느낌이 안 오면 영어를 공부하셔야 합니다. 무슨 말씀이 그러십니까. is a란 말 뜻 자체를 몰라서 질문한 것이 아닌데, 그렇게 질문의 뜻을 이해했다면 너의 남에 대한 공감능력은 애들 수준이라고 밖에 볼 수 없습니다. 또는 남을 너의 수준으로 보는 그렇고 그런 잡스런 수준이든지요. 아마 너는 is a 를 접했을 때 사전 찾고 수학 집합을 공부하셨나 보군요. 그런 정도는 안 보고도 아셔아지.
만약 그런 수준이 아니라면 다시 이 질문에 제대로 된 답변을 달 수 있는지 봅시다. 자식 클래스가 public으로 부모클래스를 상속받았다면 이 둘의 관계를 is a라 할 수 있을까요? 어떤 답변을 달지 그쪽 수준좀 봅시다. 이미 난 알고 있으니 어설프게 답변달 생각은 하지 않기를 바랍니다.
그리고 덧붙여서 말하건데, 내가 그쪽 앞에 있다고 생각하고 말한다면 내 수준을 넘겨짚고 그렇게 말할 용기가 있을까? 과연. 그런 점에서도 그쪽은 상당히 비겁자고 야비한 부류로 보인다. 특히 익명을 쓰는 것을 보아서는. 이런 사람 실세계에서는 남한테는 빌빌대고 아첨이나 떨겠지.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
is-a 관계가 뭔지야 잘 아시겠으나 제시하신 예시의
is-a 관계가 뭔지야 잘 아시겠으나 제시하신 예시의 수준과, 그리고 그 예시가 좋지 않은 이유로 "극단적"이라고 표현하는 것으로 짐작하건대 님 수준은 충분히 넘겨짚고도 남음이 있습니다.
상황에 맞는 한 가지 행동이
상황에 맞는 행동 하나가 상황에 맞지 않는 열 가지 행동보다 낫다.
이 말은
상황에 맞는 public 상속이 상황에 맞지 않는 열 가지 경우의 public 상속보다 낫다.
본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.
제가 이해하기로는...
저도 Head First Java란 책을 읽는데 java도 c++처럼 object-oriented 언어라서 제가 도움을 줄수 있을지 모르겠습니다.
java에는 c++처럼 super class가 있지만 interface란 것도 있습니다.
사람이 super class 이고 학생이 sub class 라면 학생은 사람 이다( is a )가 되지요.
그러면 interface 폐륜인이 있으면 학생은 사람의 subclass 지만 학생이 폐륜인을 implement하면은
학생은 사람의 성질을 모두 받지만 폐륜인의 성질도 모두 받지요. 하지만 학생은 폐륜인의 sub class가 아닙니다.
dog is canine. canine is animal. 개는 개과 이고 개과는 동물이다.
동물이 개과의 super class이고 개과는 개의 super class입니다.
java에는 interface가 있어서 interface 애완동물이란게 있으면 개가 애완동물을 implement하면은
개는 개과와 동물과 애완동물의 모든 성질은 받지요. 모든 개는 애완동물이 아니지만 개는 개과 이고 동물이지요.
단지 그 개는 애완동물의 성질도 받는 것입니다.
학생은 사람이고 폐륜인이라는 interface가 있으면 모든 학생은 폐륜인이 아니지만 학생은 사람이지요.
학생이 폐륜인을 implement하면 학생이 사람의 성질과 폐륜인의 성질을 모두 받지요.
그림으로 제가 이해하는 is-a 시험을 설명할수 있겠는데 말로는 좀 애매하네요.
댓글 달기