다형성을 가장 잘 사용하는게 프레임워크 같은데,
또 다형성을 어디에 적용을 해야 하나...?
Character 클래스가 Weapon, Cloth 이런 인터페이스를 가지고 있는 전략패턴 이런거도
구지 클래스로 만들어야 하는지...
차라리 DB나 파일에서 무기, 공식, 이것저것 등등등..을 불러와서 처리하면 되지 않나?
그럼 따로 뭐 안만들고 DB나 파일에 추가하는걸로 직업같은거 추가할수 있을텐데..
실제 게임들은 또 어떻게 되있을라나 모르겠다...
어쨋든 핵심은 다형성을 어디에 적용해야하는가...
등등등 을 불러와서 담아두거나 처리하는 클래스가 그것들이지요
공통 속성을 많이 가지고 있고 비슷한 처리를 해야하는 클래스들이 많다면 공통되는걸 base class 로 묶으면 편하지 않겠음?
그런가;;? 게임 하나에도 아이템이 엄청나게 많은데, 거기에 대한 클래스들을 모두 만들어준다는 말씀??
그건 미친짓이고. Item 이라는 최상위 클래스를 만들고 그 하위로 무기/갑옷/물약/기타 잡 아이템/퀘스트아이템 뭐 이런식으로 나눈다는 얘기지.
그런식으로 카테고리를 나눠놓고 클래스의 프로퍼티로 아이템의 상세 스펙이 들어가는거지.
내 웹 유지보수할때는 일과중에는 소스수정을 할 수 없고 몇가지 과정들이 복잡해서, DB에 값 추가시켜주는걸로 해결보게 만들었거든... 그렇게 만들라고 해서
유리한 횽아 설명이 머리에 쏙쏙 들어오는거같아
ㅇㅇ 카테고리를 나눠놓고 클래스의 프로퍼티로 아이템의 상세 스펙이 들어가는게 내가 본문에서 말한거 아닌가염?
그러면 유리한 횽도 다형성이 이런 경우는 별로 필요없다고 하는거 같은데...
아니, 아이템이라는 최상위 클래스 밑으로 각각의 카테고리 별로 클래스가 있다고..
작은물약/큰 물약 은 클래스를 나눌 필요가 없지만 칼/물약 은 다른 클래스로 관리하는게 낫다고.
같은 카테고리 내에 있는 것들은 프로퍼티로 관리하고 다른 카테고리에 있는건 클래스 자체가 다른게 좋지.
게임을 예로들어서 좀 뭣한데, 내가 했던것 중에 지도 위에 이것저것 뭔가 그려야되는게 있었어.
이걸 얘로 들면, 지도위에 레이어를 깔아야되니 CDrawLayer 라는 놈을 뒀었고, 그려지는 객체들은 CDrawObject 라는 최상위 클래스를 상속하도록 했어.
아아..
결론은 클래스화 할꺼하고 데이터화 할꺼 경계를 잘 설정해놓는것이 중요하겠구나..
CDrawObject 의 기본 메소드로 DoDraw() 와 GetMBR() 따위를 가지고 있었지. 하위 클래스로는 아이콘/선/사각형/타원/글자/점 등이 있었고.
CDrawLayer 는 CDrawObject 를 갖는 vector<CDrawObject*> 를 가지고 있어. 하위클래스가 뭔지는 알 필요가 없지. layer 에서 하는 일이라고는 각 obj를 순회하면서 지금 지도의 좌표안에 해당 오브젝트가 포함되는지 확인해서 포함되면 DoDraw() 해주는거야.
만약 이렇게 안했다면 layer 가 각각의 object 에 대한 vector 들을 가지고 있게 하거나 CDrawObject 만 가지고 있되, 프로퍼티로 자신의 속성을 가지고 있다가
역시 막짜는건 어렵지 않은데, 깔끔하고 구조적인 프로그래밍을 하기 위해선 어느정도 경력이 필요한겠지 ㅠㅠ
DoDraw() 호출되면 switch 존나 돌리는거지.
다형성을 쓰든 안쓰든 관계는 없는데, 다형성을 잘 활용하는게 switch 로 막 분기하는것 보다는 깔끔해. 나중에 코드 유지관리도 편하고.
다형성 안쓰고 draw 를 관리했으면 아이콘 찍는 부분만 손댔는데 선이 이상하게 그려지는 좆같은 상황에 직면하게 될 수도 있어. 그래서 분리해두는게 좋아.
깨달음을 줘서 감사~!
이야 친절돋는 유리한형