2018년 2월 4일 일요일

C# Optional parameter & default value.



이전 포스팅에서 나온 얘기인데 좀 더 봐야할 필요가 있어 정리함.

C# API를 만드는 입장에서는 Optional parameter를 사용할 때 주의 해야 한다고 함.


1. "Default value의 변경" 과 관련해서
"C# 7.0 in a Nutshell"을 보면

Optional parameters의 default value는 빌드시 default value를 포함시켜 빌드 한다고 함. 예를 들어

public Car(string name, bool isSedan = false가 있고
var myCar = new Car("AAA"); 일 경우 
빌드 시 isSedan 값이 false로 지정되어 빌드 된다고 함.

나중에 Car의 signature의 isSedan optional parameter가 true로 바뀌어도 
기존에 컴파일 된 API client에서는 어차피 false값을 사용하고 있으므로
API 변경과는 상관이 없는 것임.

결국 변경된 API의 optional parameter의 defulat value를 적용하기 위해 모든 API client들이 재컴파일 되어야 함.


2. "Optional parameter가 있는 API가 Overload 될 때" 특이한점이 있는데

위 링크를 참조하면 Overload 된 methods들을 선택할 때 
아래와 같은 느낌?으로 호출할 대상을 선택한다고 함.
Optional parameter가 없는 함수 중 동일한 parameter 개수의 함수를 최우선으로 선택.
> 없다면 optional parameter를 가진 함수 중에서 일치하는 함수를 선택한다.
> 하지만, API들의 parameter 중 default value를 가지고 있지 않는 개수가 동일한 경우 같은 함수로 취급되어 호출 할 대상을 찾지 못해 에러가 발생한다고 한다.

public void Drive(string destination, int speed = 30) 이 있고
API client에서 Drive("Seoul")로 사용하고 있는 상황에서
public void Drive(string destination, int speed = 30, bool byBus = false) 이 추가되며 API가 업데이트 된다면

컴파일 되지 않은 기존 API client에서 호출하는 Drive("Seoul") 실행 시 에러가 발생한다.
사실상 두 Drive API가 모두 Optional parameter를 적용하면 같은 함수나 마찬가지이므로 runtime 시 어떤 API를 호출해야 할지 몰라 에러가 발생하는 것임.

public void Drive(string destination, int speed = 30)
public void Drive(string destination, int speed = 30, bool byBus = false) 

하지만 아래와 같이 optional parameter가 없는 함수가 있다면 우선적으로 해당 API를 호출하게 되므로 에러는 발생하지 않는다.

public void Drive(string destination)
public void Drive(string destination, int speed = 30)
public void Drive(string destination, int speed = 30bool byBus = false) 

2018년 2월 1일 목요일

Xamarin.Forms app을 Google Play store에 올리기

초간단 Xamarin.forms app을 만들어 Google Play store에 올림.

https://github.com/hallower/WhooingNewsReader
https://play.google.com/store/apps/details?id=kr.blogspot.charlie0301.NewsReader

리스트뷰만 있는 앱이다 보니 생각보다 Android에서 돌아가는게 느리진 않고
C# 으로 만들앱이다 보니 Google Play store에 올리는데 문제가 있진 않을까 했는데 생각보다 잘 올라가서 신기함.

일단 Google Play store에 올리는 방법
https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/publishing_an_application/

Apple App Store에 올리는 방법
https://developer.xamarin.com/guides/ios/deployment,_testing,_and_metrics/app_distribution/app-store-distribution/publishing_to_the_app_store/


Google Play Store에 올리는 방법은 다음과 같이 나눠져 있고
사실 간단한 앱은 Part 1-3까지만 진행하면 등록이 된다.


위 Part 1,2,3를 따라하면서 큰 문제점은 없었고
워낙 잘 정리가 되어 있어서 따라하기만 하면 되지만!

- 모든 절차를 따라해야 나중에 APK를 업로드할 때 문제가 없다.
 : APK 업로드 시 문제점이 무엇인지 알려주므로 문제점이 있다면 Guide를 참고하여 수정 후 다시 수행하면 된다.

- 처음 업로드, 앱 등록 시 Visual Studio에서 자동 처리가 되지 않는다.
 : 처음에는 수동으로 APK를 signing한 뒤 play store에 업로드 해야 한다.

- APK 업로드 시 Signing된 APK를 업로드 해야 한다.
 : 아래 예시 그림에서 signed-apks 폴더 내의 APK를 업로드 해야 한다. 아래 그림에 보이는 MyApp.MyApp.apk는 아니다.
 : 당연한 거겠지만 signing 할 때는 Google Play에 등록된 upload 인증서를 사용해서 signing해야 한다.
  . 참고 http://charlie0301.blogspot.kr/2018/01/google-play-app-signing.html