예를 들어서 일반 프린터가 있고(베이스) 여기에는 어떤 프린터든지 공통으로 수행되는 기능들을 수행함.
프린터는 모두 데이터가 있어야 한다는 가정을 하겠음.
그리고 텍스트 프린터와 이미지 프린터가 있음. 당연히 텍스트 프린터는 텍스트 데이터를 가져야 하고 이미지 프린터는 이미지 비트맵 데이터를 가져야 함.
사진에 보이는 설계가 상당히 잘못된 건 알겠는데 약간의 코드가 다르다는 이유로 Print 함수를 거의 비슷하게 중복으로 만들 수도 없고(상속 수가 많아지면 중복 코드가 많아짐)
*Internal 함수 자체도 마음에 들지 않음.
이런 부류의 함수가 여러 개 생기면 함수의 수가 두배로 불어나는데 뭔가 크게 잘못된 것 같음.
거기다가 wow 라는 데이터도 공유하고 있는데 텍스트 프린터와 이미지 프린터 각각의 범위가 다르기도 함
이걸 어떻게 깔끔한 구조로 바꿀 수 있어?
data가 부모에 대체 왜 있는건데
그러면 만약에 텍스트에는 문자열 데이터, 이미지에는 문자열 데이터에 추가로 비트맵 데이터도 함께 있어야 한다면 그리고 Print 중간에 비트맵 관련 추가 처리만 필요한 경우에는 어떡해?
무슨 소린지 모르겠음 일단 니가 올린 코드에서 부모가 data 쓰는게 GetXXXData인데 이렇게 쓸려면 상속할 이유가 전혀 없다
혹시 data 필드가 '중복' 이라고 생각해서 void*를 넣은거면 그건 ㄹㅇ 아님
음.. 알게따 고맙따
이런건 걍 일반 프린터를 interface로 빼고 이미지, 텍스트 프린터를 concret class 정도로 빼면 보편적으로 괜찮은 구조강ㅌ은데
근데 그렇게 되면 텍스트랑 이미지에서 Print 구현이 중복되는 부분이 많아지는데 공통 부분은 어떻게 빼지
그 정도 중복은 별거 아닌거 같긴한데... 정 걱정이면 일케 하셈, interface 클래스 하나두고 여기에 밖으로 뺄 기능 뭐 print(); get_print_status(); 뭐 이런거 인터페이스로 만들고, 그밑에 concrete 클래스로 BasicPrinter만들고 여기에 중복되는 코드 넣고, Image랑 Text 프린터가 BasicPrinter 상속하게 하면 되겠네
근데 아무리 생각해봐도, 걍 중복코드 허용하셈 ㅇㅇ... 결국 요구분석이 틀어지거나 명세 바뀌고 이지랄나면 앞서서 중복코드 줄이려고 했던게 독이됨
이게 예시로는 중복이 얼마 없는 것 처럼 보이지만 만약에 10라인 이상 중복이 되는 경우에는 문제가 되지 않아? 상속 받는 클래스가 5개씩 되는데 5개 싹 다 바꿔줘야 하는 일도 생기고
일단은 니 말대로 인터페이스로 빼고 함수명만 공유하게 만들었다가 뭔가 이것도 좀 아니다 싶으면 또 질문할게 그러니까 Print() 에서 이미지를 출력하느냐 텍스트를 출력하느냐는 내부 구현이 다를 수 밖에 없으니 중복 좀 있어도 아예 따로따로 구현하는게 낫다 이말이지?
ㅇㅇ\
일부분만 구상 가능한 추상 클래스는 어떠신가얄
일부분만 구상한다는게 뭔가얄
템플릿좀 써봐
템플릿 잘 쓸 자신이 없어...
일단 버추얼부터 붙이구요 - dc App
데이터랑 게터가 베이스에 있는건 윗분이 얘기해줬구요 - dc App
구현이 달라지는 부분에서 내부 버추얼 함수 만든걸 콜하고 하위 클래스에서 구현 하던지(템플릿 메서드) 이 동작을 상속없이 객체나 콜백으로 받아서 처리하던지 - dc App
보통 이렇게 확장하고 싶을땐 제어를 베이스 클래스 밖이나 하위 클래스로 넘기고 거기서 구현을 하고 베이스에선 호출만 하면됨.. 제어역전이라 부르는게 이런거고 - dc App
그냥 Printer 를 인터페이스로 빼고 중복허용을 하는게 가장 맞는거 아님? - dc App
위 애들말대로 인터페이스만 남기고 각 프린터는 인터페이스 각각 구현해야 좋을듯 프린터만 보면 중복 많아 보이는데 이제 프린터를 사용하는 객체 생기고 하면 인터페이스로 접근하는 진가가 나타날듯 - dc App