Skip to content

대학 학부 과제 University undergraduate assignment

Notifications You must be signed in to change notification settings

LiteHell/SoftwareProjectPainter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

(대학 학부) 소프트웨어프로젝트 과목 과제

2020년 1학기 소프트웨어프로젝트 과목에 제출한 그림판 과제이다. 교수가 제시한 easyUML 플러그인이 NetBeans 구버전에서만 작동하는 관계로, NetBeans 8.2버전으로 작성했다. 또한 NetBeans 8.2버전은 최신버전의 JDK(프로젝트 작성당시 JDK 최신버전 : 14)를 쓰면 버그가 발생하는 관계로, JDK 8(8u231)을 설치해 실행했다.

과제에 어려운 학우들에게 도움이 됐으면 좋겠으나, 베끼지 않았으면 한다.

설명

수업에서 MVC 개념을 설명하고, MVC의 개념을 적용해 작성할 것을 요구했기에 Model, View, Controller를 나누어 작성되어 있다. painter.Shape 네임스페이스의 도형 클래스들과 그림 자체를 나타내는 painter.Canvas 클래스가 모델 클래스에 해당하고, painter.PainterController 클래스와 painter.PainterView 클래스가 각각 컨트롤러 클래스와 뷰 클래스에 해당된다. painter.Shape 내부의 도형 클래스들은 모두 painter.Shape.Shape 클래스를 상속한다. painter.Shape.Shape 클래스는 도형 구현에 필요한 여러가지 메소드들이 있으므로 참고하면 좋다.

이 그림판에서는 어떤 도형의 배경색을 바꾸거나, 이동하거나, 확대/축소하는 등의 (도형 추가, 삭제, 선택을 제외한 모든) 행위를 Action이라고 정의한다. 그리고 이 Action은 드래그를 해야 하는 Action과 드래그를 하지 않아도 되는 Action으로 나누어진다. 전자에 해당하는 Action들을 나타내는 클래스는 painter.Action.DraggableAction을 상속하고, 후자에 해당하는 Action들은 painter.Action.DisposableAction을 상속한다. 그리고 painter.Action.DraggableActionpainter.Action.DisposableActionpainter.Action.Action을 상속한다. 행위를 나타내는 모든 클래스들이 결과적으로 painter.Action 클래스를 상속하게 됨으로써 깔끔하고 객체지향적인 코드를 작성할 수 있었다.

MouseEventProcessing 클래스는 뷰에서 발생하는 마우스 이벤트를 처리하기 위한 클래스다. 원래는 컨트롤러 클래스에 마우스 이벤트 처리 코드도 같이 넣었었는데, 수업에서 마우스 이벤트를 처리하는 별도의 클래스를 만드는 식으로 설명하길래 바로 설계를 변경했다.

PaintablePanelShape 클래스들의 컬렉션을 받아 그리는 패널로, 선택된 도형을 설정할 수 있다.(선택된 도형이 없을 시에는 선택된 도형을 null로 설정한다) 선택된 도형은 도형 주변에 사각형 형태의 움직이는 점선을 그리게 했는데, 이 점선에 움직이는 효과를 주기 위해 내부 타이머로 repaint 메소드를 주기적으로 호출해 다시 렌더링하도록 했다. 또한 이 PaintablePanel 클래스는 커서가 변경가능하다는 것을 나타내기 위해 명시적으로 painter.CursorChangable 인터페이스를 상속하도록 했다. 이 CursorChangable 인터페이스는 Action 클래스 인스턴스에서 커서를 바꿀 때 이용된다.

프로젝트를 구현하면서 나름 최대한 객체지향적으로 작성하고자 했다. 더 많은 시간이 있었다면 더 깔끔하고 아름다운 코드를 볼 수 있지 않았을까 싶다.

이 프로젝트의 메인 클래스는 painter.Painter다.

About

대학 학부 과제 University undergraduate assignment

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages