Xamarin.Forms Quickstart를 시도했습니다.

Xamarin을 사용한 크로스 플랫폼 개발의 공부 제1보로서, 이 페이지에 있는 입문용 튜토리얼을 해 보고 있습니다.
Xamarin.Forms Quickstart

Xamarin.Forms를 사용한 앱의 근거로서 좋은 소재군요. 이것을 사용한 크로스 플랫폼 개발이 어떤 것인지 왠지 알 수 있습니다.

1. 이 자습서에서 할 수 있는 앱



이것은 미국에서 볼 수있는 알파벳으로 표시된 전화 번호를 일반 전화 번호로 변환하여 전화를 걸 수있는 앱입니다 (참고 : 미국 전화번호 알파벳 표기)

만들어 보면 아래 그림과 같은 움직임을하는 앱이 완성됩니다.



2. 이 프로그램의 구조



실제로 이 튜토리얼대로 프로그램을 만들어 보면 알겠습니다만, 아래 그림과 같은 구조로 되어 있네요.



UI나 비즈니스 로직은 각 OS 공통으로 쓸 수 있는 것 같습니다만, 디바이스의 조작을 하는 부분(이 튜토리얼에서는 전화를 걸는 부분)은, 개별적으로 로직을 만들 필요가 있는 것 같습니다.
그래서, 아마도, 예를 들면 GPS 정보의 취득과 같은 것은, 개별적으로 쓸 필요가 있을 것 같네요.

그리고, 이 공통 부분과 각 OS 개별적으로 쓰는 부분의 데이터의 전달을,
 (1) 인터페이스
 (2) DependencyService.Get();
 (3) [assembly: Dependency(typeof(<클래스명>))]
의 3개를 사용해 실현하고 있습니다.

각 OS마다의 프로그램을 짜는 부분을, 이 튜토리얼에서는
・「IDialer」인터페이스를 준비
· 각 OS마다 "PhoneDialer"클래스로 구현
라는 방법을 채택하고 있습니다. 보통의 객체 지향의 구현 방법이군요.

이 구현한 클래스의 인스턴스를 취득하기 위해서, 「DependencyService.Get();」와 「[assembly: Dependency(typeof(<클래스명>))]」」를 사용하고 있습니다.

이 인스턴스의 취득을 하고 있는 부분이 아래 그림의 부분입니다. 여기에 브레이크 포인트를 넣어 보면 지금 현재 실행중인 단말기의 인스턴스를 얻을 수 있음을 알 수 있습니다.



DependencyService.Get(); 라는 프로그램으로 인스턴스를 얻을 수 있음을 알 수 있습니다.

여기서, 시험에 각 OS마다 쓴 프로그램(PhoneDialer.cs)에 있는 「[assembly: Dependency(typeof(PhoneDialer))]」를 코멘트 아웃하고, 한번 더 디버그 실행해 보겠습니다.



그러면 그림에 표시된 것처럼 인스턴스를 얻을 수 없어 null이 됩니다. 「[assembly: Dependency(typeof(<클래스명>))]]」가 없으면 안되는 것 같네요.

아직 다루는 정도의 지식밖에 없지만, Xamarin.Forms로 개발하는 경우,
 (1) UI, 비즈니스 로직은 로직을 공통화할 수 있다
 (2) 디바이스를 직접 사용하는 부분은 개별적으로 로직을 쓸 필요가 있다
그렇죠?

디바이스의 기능을 사용하는 부분이라고 해도, 예를 들면 HTTP 통신이나 전파가 권외가 되어 있을지 어떨지도 개별적으로 로직이 필요한지, 아직 아직 조사하지 않으면 안 되는 것은 있군요.

좋은 웹페이지 즐겨찾기