팀 프로젝트 발제날!
주제는 총 4가지로 2D 게임 두 가지와 3D 게임 두 가지..
3D가 하고 싶었지만 팀원 분들의 강의 진도를 고려해서 2D 게임으로 결정했다!
정할게 너무나도 많아서 하루종일 회의 끝에 클래스 설계는 각자 맡은 부분을 해오는 것으로..
class Duck
{
display()
quack()
swim()
fly()
}
class MallardDuck
{
display() // 오리 모양 출력
}
class RedheadDuck
{
display() // 오리 모양 출력
}
class RubberDuck
{
display() // 오리 모양 출력
fly() {
// 아무 동작 X
}
}
러버덕이나 나무로 만든 오리는 울거나 날 수 없음
코드의 재사용성을 위해 상속을 사용하였지만, 서브 클래스에 원치 않은 영향을 끼치게 됨
-> 모든 서브 클래스의 동작을 추정하기 어렵기 때문
quack이나 fly는 오리 종류에 따라 달라지는 부분이므로 Duck 클래스에서 분리해야 함
인터페이스를 사용 (QuackBehavior, FlyBehavior)
-> 특정 행동만을 목적으로 하는 클래스에서 구현하도록
-> quack() 메서드와 fly() 메서드는 Duck 클래스가 아닌 특정 행동 인터페이스를 구현한 별도의 클래스 안에 존재하게 됨
interface IFlyBehavior
class FlyWithWings
{
fly() {
// 난다
}
}
class FlyNoWay
{
fly() {
// 날개만 푸드덕
}
}
interface IQuackBehavior
class Quack()
{
quack() // 꽥꽥
}
class Squeak
{
quack() // 삑삑
}
class MuteQuack()
{
//
}
class Duck
{
IFlyBehavior flyBehavior;
void PerformFly()
{
flyBehavior.Fly();
}
}
void Main()
{
Duck mallardDuck = new MallardDuck();
Duck rubberDuck = new RubberDuck();
mallardDuck.Display();
mallardDuck.PerformFly();
mallardDuck.PerformQuack();
rubberDuck.Display();
rubberDuck.PerformFly();
rubberDuck.PerformQuack();
}
요기부터는 2D 강의 정리를 위해 따로 공부한 내용 ~.~
상속 (A is B) | 컴포넌트 (A has B) | |
---|---|---|
장점 | 부모 클래스로부터 물려받은 부분은 다시 쓸 필요가 없기 때문에 재사용 면에서 효율적 | 코드 의존성이 줄어들고 재활용성이 높아짐 |
컴포넌트들끼리 독립적이며 커플링이 없음 -> 유지보수가 편해짐 | ||
단점 | 부모, 조상 클래스가 될 공통된 최소 필수 집합을 개발자가 미리 예상하기 힘듦 완벽한 순수 Base Class를 만들기 힘들다 | |
컴포넌트들끼리 커플링이 심함 |
컴포넌트 정의 - 컴포넌트란 무엇인가?
Component Pattern(컴포넌트 패턴) in Unity C#
[C# Unity] 컴포넌트 패턴이란?
Unity Documentation 컴포넌트 사용
퇴 근 (아님)
끗 ~