팩토리 메소드를 사용할 때 빈 기본 생성자가 필요한 이유

| 2015. 4. 3. 10:51

안드로이드 스튜디오에서 프래그먼트(fragment)를 프로그램을 통해 만들면 팩토리 메소드를 사용할 것인지 체크하는 항목이 있다. 예전에는 아무 것도 모르고 일단 얘네가 추천해주는(즉, 기본으로 체크되어 있는) 항목이니 그렇게 해보자고 하고 코드를 짜곤 하다가 조금의 구글링을 통해 팩토리 메소드가 어떤 것이고 어떤 점에서 의미 또는 장점이 있는지 알 수 있었다.

하지만 여전히 풀리지 않는 미스테리가 하나 있었으니, 팩토리 메소드를 사용할 때는 빈 생성자가 필요하다는 것이었다. 이는 안드로이드 스튜디오가 자동으로 만들어주는 코드의 주석에서 확인할 수 있었는데, (역시나) 구글링을 해보니 이유를 알 수 있었다. 안드로이드의 프래그먼트 매니저(FragmentManager)가 프래그먼트를 만들 때 기본 생성자를 호출하기 때문이고, 만약 프래그먼트 생성시에 필요한 초기 값들을 기본이 아닌 생성자를 통해 만들었을 경우 해당 값들이 모두 초기화되어 있지 않기 때문에 프래그먼트에 기본이 아닌 생성자 사용을 지양하고 setArguments(), getArgument() 등의 방법을 사용하거나 그보다 조금 더 나아가 팩토리 메소드를 사용하는 것을 장려하는 것이다.

하지만 여전히 그렇게 아무 코드도 없는 빈 기본 생성자가 필요한 것인지에 대해서는 조금 의문이 드는 것이, 생성자가 전혀 정의되어 있지 않은 경우 컴파일러가 super()만이 포함된 기본 생성자를 만드는 것으로 알고 있기 때문이다. 만약 기본 생성자가 없이도 실제 코드 동작에 문제가 없다면 빈 기본 생성자를 명시해주는 것은 일종의 코딩 컨벤션으로 간주하면 되겠다. 구글에서 그렇게 해보라고 하는 거니 분명히 무슨 의미가 있을 것이(라고 구글빠는 믿숩니)다.