앱 설명



- 캔버스 요소 추가, 이동, 색상, 투명도 변경 기능
- 여러개의 Scene을 활용가능
경험한 것
- 다형성을 기반으로 작동하는 코드를 짜보았습니다.
- SceneDelegate를 기반으로 여러개의 Scene을 보여주는 앱을 만들어보았습니다.
- 이미지 공유를 해보았습니다.
- PanGesture를 통해 Drawing 기능을 만들어보았습니다.
- MVC 구조에서, Notification Center 기능을 통하여 Model과 Controller 간의 의존성을 끊었습니다.
- Factory 패턴을 사용하여, 컨트롤러가 쉽게 캔버스 요소를 생성하여 사용할 수 있도록 해보았습니다.
- Test Code를 작성하여, 각 파일의 Code Coverage를 확인하고 동작의 유효성을 확인해보았습니다.
- NSKeyedArchiver를 사용하여 현재 유저가 올린 Canvas Plane을 저장하고 다른 Scene이 실행될 때 로드하여 보여주었습니다.
고민한 것
- 계속해서 추가되는 캔버스 요소에 대해 빠르게 대응하는 방법을 고민했습니다. 각 요소들의 기본적인 특성을 가지는 Layer 객체를 시작으로 상속하여 추가적인 요소를 구현하고, 이 요소들에 대한 움직임을 관장하는 비즈니스 로직에서 다형성을 기반으로 동작하도록 하였습니다.
- MVC 구조에서 Controller와 Model의 의존성을 끊기 위해, Notification Center를 사용하여 의존성을 끊으려 노력하였습니다. 실제 호출관계를 단방향으로 가져감으로써 구조를 단순하게 만들기 위해 노력했습니다.
- 사용자가 작성한 Plane에 대해서 다른 Scene을 복수로 실행시킨 경우, 해당 두개의 Scene을 동기화하기 위해 NSKeyedArchiver를 사용하여 객체를 저장하고 불러와서 보여주었습니다.
아쉬운 점과 배운점
- 다형성을 통해 직접 앱을 구현해본 경험이 처음이었습니다. 기존에는 학문적으로만 배웠다는 것에 그쳤다면, 이번에는 실제 도입해보면서 왜 객체지향 프로그래밍이 강력한지 이해할 수 있었습니다. 점점 프로젝트의 규모가 커지면서, 재사용성이 커져 생산성이 많이 증가했습니다.
- NSKeyedArchiver를 사용해보면서, 객체 그래프에 대해 간단히 이해할 수 있었습니다. 이전에 CustomView를 사용하는 경우 init(coder: )를 왜 구현해주어야 하는지 몰랐는데, 이것이 Bundle에 저장되었을 때 불러올 때 호출되는 생성자라는 사실도 이해할 수 있었습니다.