프로그램을 설계할 때에는 객체지향적 구조적 이해가 가장 중요하다. 재사용이 가능한 코드를 만들어서 업무의 효율화를 실행할 수 있어야 한다. 때문에 Toolbar와 DrawingPanel 클래스의 코드를 전부 일반화 시켰다. 그리고 가변되는 코드는 전부 Constants 클래스 안에 eTools에 몰아넣었다. 이렇게 설계함으로써 도형을 추가할 때에도 독립된 eTools 클래스만 수정해주면 된다.
컨테이너(자식을 가지고 있는 컴포넌트)에 자식을 등록하면 add() 컨테이너가 가지고 있는 벡터 안에 차례대로 들어간다. 때문에 인덱스 순서대로 자식 컴포넌트를 조회할 수 있다.
마우스를 움직일 때 커서가 변경되는 기능을 추가했다. 기능 추가를 구현할 때 제약조건을 먼저 생각해야 한다. 제약조건이라는 것은 항상 상태를 떠올리면 된다.
user 이벤트 발생 → (제약조건) 상태 고려 → 이벤트가 1개인지 멀티 이벤트인지 고려
커서를 변경하는 기능은 마우스 move 이벤트가 발생하면 실행되어야 한다. 드로잉패널 내의 상태가 Idle일 때 실행되고, 커서 밑에 도형의 존재 여부에 따라 커서 모양이 변한다.
mouseMoved() : state == Idle → changeCursor()
커서 변경 함수 : changeCursor() : 기본 커서 모양, if(onShape()) → 십자가 커서 모양
도형 존재 여부 판단 함수 : onShape()