SlideShare a Scribd company logo
1 of 15
Download to read offline
상속 관련 이것저것
150621 에그
게임의 예
Player
Move()
OpenInventory()
Monster
Move()
DropReward()
NPC
Move()
OpenShop()
상속
Player
OpenInventory()
Monster
DropReward()
NPC
OpenShop()
Character
Move()
• 다른 클래스로부터 기능을 상속받는다.
• 서로 다른 클래스를 Character 하나로 퉁쳐서 관리할 수 있음
• 같은 기능의 소스코드를 복붙할 필요 없음
복붙 – 재앙의 불씨
• 같은 기능을 구현하기 위해 같은 소스코드를 여러 곳에 복사-붙
여넣기
• 예:
이벤트템 or 퀘스트템 -> 거래불가
이벤트템 or 퀘스트템 -> 드롭불가
이후 실수로 한 곳만 수정
이벤트템 or 퀘스트템 or 캐시템 -> 거래불가
이벤트템 or 퀘스트템 -> 드롭불가
드롭을 이용해 캐시템을 건내줄 수 있음!
상속 - Overriding
• 플레이어는 사다리를 탈 수 있게 해주세요.
• Player 가 Move 기능을 override 하여 사다리도 탈 수 있는
Move 기능 구현
Player
Move()
OpenInventory()
Monster
DropReward()
NPC
OpenShop()
Character
Move()
상속 – Overriding
class Character
{
func Move()
{
if (왼쪽 화살표 눌림)
왼쪽으로 이동
else if (오른쪽 화살표 눌림)
오른쪽으로 이동
}
}
class Player
{
func override Move()
{
if (위쪽 화살표 눌림)
사다리 타기
else if (아래쪽 화살표 눌림)
사다리 내려오기
else
base.Move()
}
}
상속?
• 몬스터도 사다리를 탈 수 있게 해주세요.
• Player 가 override 한 Move 를 복붙하면 되긴 함
• 아.. 앙대!
Player
Move()
OpenInventory()
Monster
Move() ???
DropReward()
NPC
OpenShop()
Character
Move()
• Character 의 Move 에서 모
든 캐릭터의 이동을 고려해
도 되긴 함
• Character 클래스가 점점
해짐
• Move, Skill, Stat 등등
• 결국 상속의 장점이 사라짐
• 아.. 앙대! (2)
class Character
{
func Move()
{
if (위쪽 화살표 & (P or M))
사다리 타기
else if (아래쪽 화살표 & (P or M))
사다리 내려오기
else if (왼쪽 화살표)
왼쪽으로 이동
else if (오른쪽 화살표)
오른쪽으로 이동
}
}
컴포넌트
• 클래스의 기능들도 클래스화 한다.
• 캐릭터 클래스의 상속구조와 기능의 상속구조를 분리할 수 있
음
AdvMoveComponent
Walk()
ClimbLadder()
MoveComponent
Walk()
컴포넌트
• MoveComponent 를 캐릭터에 부착
• Player, Monster는 다른 컴포넌트를 부착
• 이 부분을 데이터화 하면 기획자가 직접 기능을 바꿀 수 있음
• 이동 관련 기능이 Walk, Ladder, Jump 등으로 늘어나면?
• MoveComponent 의 기능들을 다시 컴포넌트로 나누면 됨
Player
AdvMoveComponent
OpenInventory()
Monster
AdvMoveComponent
DropReward()
NPC
OpenShop()
Character
MoveComponent
상속을 사용할 수 없을 때
• 캐릭터와 맵오브젝트에 이름표를 띄워주고 싶음
• 각각 함수를 만들어야 하나?
이름표 띄워줄 오브젝트 종류가 늘어나면?
• 그렇다고 이 기능 하나 때문에 캐릭터와 맵오브젝트가 같은 클
래스를 상속받을 수는 없다.
Character
Position
Name
MapObject
Position
Name
GUI.DrawNameTag(Character c) GUI.DrawNameTag(MapObject o)
인터페이스
• 내부가 어떻게 동작하든
“전원 마크가 그려진 버튼“ -> “기기가 켜짐“ 이라는 약속
• 실체와 무관하게 외부에서 접근 가능한 “약속”만 알면 됨
인터페이스
• INameTagDrawble.Position 은 출력위치를 의미한다는 약속
INameTagDrawble.Name 은 이름을 의미한다는 약속
• 어떤 클래스든 INameTagDrawable 인터페이스만 구현해주면
이름표를 달아줄 수 있다.
Character
: INameTagDrawable
Position
Name
MapObject
: INameTagDrawable
Position
Name
INameTagDrawable
Position
Name
GUI.DrawNameTag(INameTagDrawable o)
{
o.Position 위치에 o.Name 라벨 출력
}
상속 vs 인터페이스
• 상속: 한번에 하나의 클래스만 상속받을 수 있다.
인터페이스: 여러 인터페이스 붙일 수 있다.
인터페이스는 한 번 밖에 사용할 수 없는 귀중한 상속구조를 소
모하지 않아도 됨
• 인터페이스는 “약속”만 정의할 뿐 동작은 클래스에서 구현
• 전원 마크의 예
• Character.Move()를 인터페이스로 정의해버리면 Player와 Monster 에
서의 실제 동작은 복붙해야함
알아둘 내용
• 지금까지의 설명은 C# 기준
• C++은 다중상속 가능하지만 안 쓰는걸 추천
• C++은 인터페이스 개념을 언어차원에서는 지원하지 않음
• 다중상속을 이용해 클래스 상속을 인터페이스처럼 사용

More Related Content

Viewers also liked

[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션Nexon Korea
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기Mingu Heo
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용Sunwung Jin
 
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현Hoyoung Choi
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICkhalbora
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인승명 양
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기Jinuk Kim
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람Wooram Hwang
 
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNSYounger Jo
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀Young Keun Choe
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계tcaesvk
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]Imseong Kang
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 Jungsoo Lee
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법Lee Sangkyoon (Kay)
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)Seungmo Koo
 
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅Kloud Kim
 
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인Eunseok Yi
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 

Viewers also liked (20)

[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
[NDC 14] '미쿠미쿠하게 해줄게' - MMD MV 제작 사례와 매력적인 캐릭터 애니메이션
 
[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기[NDC14] A Mass of Dead 스팀 입성 성공기
[NDC14] A Mass of Dead 스팀 입성 성공기
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
 
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현
[NDC 14] 가죽 장화를 먹게 해달라니 - <야생의>의 자유도 높은 아이템 시스템 구현
 
THE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLICTHE_NPCMASTER_PUBLIC
THE_NPCMASTER_PUBLIC
 
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
[NDC14] 모바일 게임의 다음 혁신 - 야생의 땅 듀랑고의 계산 프로세스 중심 게임 디자인
 
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
NDC14 모바일 게임서비스를 위한 사설 클라우드 구축/운영 분투기
 
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
[NDC14] (공개용)게임 QA에 적용할 수 있는 테스팅 기법과 패턴 활용_황우람
 
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
[NDC14] 타임라인 던전 포스트모템 - 스마트폰 시대의 머드게임과 SNS
 
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
NDC14 - 엄마와 누나가 게임을 즐기는 법 : [에브리타운 for kakao] 서비스 포스트 모텀
 
NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계
 
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
NDC 2014 [48시간 만에 게임 만들기: '수줍은 메두사' 포스트모템과 게임 개발의 왕도]
 
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인 [ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
[ NDC 14 ] 가죽 장화를 먹게 해주세요 - [ 야생의 땅 : 듀랑고 ] 의 자유도 높은 아이템 시스템 디자인
 
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
바라는 대로 라이터가 쓰게 만드는 시나리오 디렉팅 기법
 
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
[NDC 14] 게임 개발사에서 개발PM(팀장)의 역할과 책임-김영웅
 
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
NDC 2014 이은석 - 온라인 게임의 창발적 플레이 디자인
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 

Similar to 상속 관련 이것저것

Port polio게임 소개
Port polio게임 소개Port polio게임 소개
Port polio게임 소개Seo YoungHoon
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰승민 백
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Dong Chan Shin
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017devCAT Studio, NEXON
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2Jubok Kim
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIYEONG-CHEON YOU
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례EG Lim
 
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Changwon National University
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기flashscope
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
01 액션스크립트기초
01 액션스크립트기초01 액션스크립트기초
01 액션스크립트기초Ansan University
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
Open jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptxOpen jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptxJinwook On
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁창규 김
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 

Similar to 상속 관련 이것저것 (20)

Port polio게임 소개
Port polio게임 소개Port polio게임 소개
Port polio게임 소개
 
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
[NDC_16] 캐릭터 한 달에 하나씩 업데이트 하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
Project anarchy로 3d 게임 만들기 part_3_움직여라 움직여
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
Hacosa j query 7th
Hacosa j query 7thHacosa j query 7th
Hacosa j query 7th
 
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
메카 액션 게임 『DAEMON X MACHINA』 신념과 피와 강철의 개발사례
 
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)Flappy bird 만들기 세미나 자료(유니티 4.3버전)
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
 
ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차ES6 for Node.js Study 2주차
ES6 for Node.js Study 2주차
 
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
[NHN NEXT]실전프로젝트 밴드 게임 만들기 후기
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
01 액션스크립트기초
01 액션스크립트기초01 액션스크립트기초
01 액션스크립트기초
 
Kotlin with fp
Kotlin with fpKotlin with fp
Kotlin with fp
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
Open jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptxOpen jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptx
 
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
R.java가 사라졌어요 어떻하죠?:Aquery라이브러리와 안드로이드 개발팁
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 

More from EG Lim

칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서EG Lim
 
빌드 좀 깨먹지 마라!
빌드 좀 깨먹지 마라!빌드 좀 깨먹지 마라!
빌드 좀 깨먹지 마라!EG Lim
 
코드네임 이것저것
코드네임 이것저것코드네임 이것저것
코드네임 이것저것EG Lim
 
MD5 이것저것
MD5 이것저것MD5 이것저것
MD5 이것저것EG Lim
 
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상EG Lim
 
Elo 평점 시스템
Elo 평점 시스템Elo 평점 시스템
Elo 평점 시스템EG Lim
 
디미터의 법칙
디미터의 법칙디미터의 법칙
디미터의 법칙EG Lim
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리EG Lim
 
네이밍 관련 이것저것
네이밍 관련 이것저것네이밍 관련 이것저것
네이밍 관련 이것저것EG Lim
 

More from EG Lim (9)

칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서칼리굴라 오버도즈의 UE4 데이터 이식 안내서
칼리굴라 오버도즈의 UE4 데이터 이식 안내서
 
빌드 좀 깨먹지 마라!
빌드 좀 깨먹지 마라!빌드 좀 깨먹지 마라!
빌드 좀 깨먹지 마라!
 
코드네임 이것저것
코드네임 이것저것코드네임 이것저것
코드네임 이것저것
 
MD5 이것저것
MD5 이것저것MD5 이것저것
MD5 이것저것
 
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상
FlatBuffers 를 이용한 안드로이드에서의 페이스북 성능 향상
 
Elo 평점 시스템
Elo 평점 시스템Elo 평점 시스템
Elo 평점 시스템
 
디미터의 법칙
디미터의 법칙디미터의 법칙
디미터의 법칙
 
SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리SonarQube 로 Unity 프로젝트 관리
SonarQube 로 Unity 프로젝트 관리
 
네이밍 관련 이것저것
네이밍 관련 이것저것네이밍 관련 이것저것
네이밍 관련 이것저것
 

상속 관련 이것저것

  • 3. 상속 Player OpenInventory() Monster DropReward() NPC OpenShop() Character Move() • 다른 클래스로부터 기능을 상속받는다. • 서로 다른 클래스를 Character 하나로 퉁쳐서 관리할 수 있음 • 같은 기능의 소스코드를 복붙할 필요 없음
  • 4. 복붙 – 재앙의 불씨 • 같은 기능을 구현하기 위해 같은 소스코드를 여러 곳에 복사-붙 여넣기 • 예: 이벤트템 or 퀘스트템 -> 거래불가 이벤트템 or 퀘스트템 -> 드롭불가 이후 실수로 한 곳만 수정 이벤트템 or 퀘스트템 or 캐시템 -> 거래불가 이벤트템 or 퀘스트템 -> 드롭불가 드롭을 이용해 캐시템을 건내줄 수 있음!
  • 5. 상속 - Overriding • 플레이어는 사다리를 탈 수 있게 해주세요. • Player 가 Move 기능을 override 하여 사다리도 탈 수 있는 Move 기능 구현 Player Move() OpenInventory() Monster DropReward() NPC OpenShop() Character Move()
  • 6. 상속 – Overriding class Character { func Move() { if (왼쪽 화살표 눌림) 왼쪽으로 이동 else if (오른쪽 화살표 눌림) 오른쪽으로 이동 } } class Player { func override Move() { if (위쪽 화살표 눌림) 사다리 타기 else if (아래쪽 화살표 눌림) 사다리 내려오기 else base.Move() } }
  • 7. 상속? • 몬스터도 사다리를 탈 수 있게 해주세요. • Player 가 override 한 Move 를 복붙하면 되긴 함 • 아.. 앙대! Player Move() OpenInventory() Monster Move() ??? DropReward() NPC OpenShop() Character Move()
  • 8. • Character 의 Move 에서 모 든 캐릭터의 이동을 고려해 도 되긴 함 • Character 클래스가 점점 해짐 • Move, Skill, Stat 등등 • 결국 상속의 장점이 사라짐 • 아.. 앙대! (2) class Character { func Move() { if (위쪽 화살표 & (P or M)) 사다리 타기 else if (아래쪽 화살표 & (P or M)) 사다리 내려오기 else if (왼쪽 화살표) 왼쪽으로 이동 else if (오른쪽 화살표) 오른쪽으로 이동 } }
  • 9. 컴포넌트 • 클래스의 기능들도 클래스화 한다. • 캐릭터 클래스의 상속구조와 기능의 상속구조를 분리할 수 있 음 AdvMoveComponent Walk() ClimbLadder() MoveComponent Walk()
  • 10. 컴포넌트 • MoveComponent 를 캐릭터에 부착 • Player, Monster는 다른 컴포넌트를 부착 • 이 부분을 데이터화 하면 기획자가 직접 기능을 바꿀 수 있음 • 이동 관련 기능이 Walk, Ladder, Jump 등으로 늘어나면? • MoveComponent 의 기능들을 다시 컴포넌트로 나누면 됨 Player AdvMoveComponent OpenInventory() Monster AdvMoveComponent DropReward() NPC OpenShop() Character MoveComponent
  • 11. 상속을 사용할 수 없을 때 • 캐릭터와 맵오브젝트에 이름표를 띄워주고 싶음 • 각각 함수를 만들어야 하나? 이름표 띄워줄 오브젝트 종류가 늘어나면? • 그렇다고 이 기능 하나 때문에 캐릭터와 맵오브젝트가 같은 클 래스를 상속받을 수는 없다. Character Position Name MapObject Position Name GUI.DrawNameTag(Character c) GUI.DrawNameTag(MapObject o)
  • 12. 인터페이스 • 내부가 어떻게 동작하든 “전원 마크가 그려진 버튼“ -> “기기가 켜짐“ 이라는 약속 • 실체와 무관하게 외부에서 접근 가능한 “약속”만 알면 됨
  • 13. 인터페이스 • INameTagDrawble.Position 은 출력위치를 의미한다는 약속 INameTagDrawble.Name 은 이름을 의미한다는 약속 • 어떤 클래스든 INameTagDrawable 인터페이스만 구현해주면 이름표를 달아줄 수 있다. Character : INameTagDrawable Position Name MapObject : INameTagDrawable Position Name INameTagDrawable Position Name GUI.DrawNameTag(INameTagDrawable o) { o.Position 위치에 o.Name 라벨 출력 }
  • 14. 상속 vs 인터페이스 • 상속: 한번에 하나의 클래스만 상속받을 수 있다. 인터페이스: 여러 인터페이스 붙일 수 있다. 인터페이스는 한 번 밖에 사용할 수 없는 귀중한 상속구조를 소 모하지 않아도 됨 • 인터페이스는 “약속”만 정의할 뿐 동작은 클래스에서 구현 • 전원 마크의 예 • Character.Move()를 인터페이스로 정의해버리면 Player와 Monster 에 서의 실제 동작은 복붙해야함
  • 15. 알아둘 내용 • 지금까지의 설명은 C# 기준 • C++은 다중상속 가능하지만 안 쓰는걸 추천 • C++은 인터페이스 개념을 언어차원에서는 지원하지 않음 • 다중상속을 이용해 클래스 상속을 인터페이스처럼 사용