안드로이드 스튜디오에서 프래그먼트(fragment)를 프로그램을 통해 만들면 팩토리 메소드를 사용할 것인지 체크하는 항목이 있다. 예전에는 아무 것도 모르고 일단 얘네가 추천해주는(즉, 기본으로 체크되어 있는) 항목이니 그렇게 해보자고 하고 코드를 짜곤 하다가 조금의 구글링을 통해 팩토리 메소드가 어떤 것이고 어떤 점에서 의미 또는 장점이 있는지 알 수 있었다.
하지만 여전히 풀리지 않는 미스테리가 하나 있었으니, 팩토리 메소드를 사용할 때는 빈 생성자가 필요하다는 것이었다. 이는 안드로이드 스튜디오가 자동으로 만들어주는 코드의 주석에서 확인할 수 있었는데, (역시나) 구글링을 해보니 이유를 알 수 있었다. 안드로이드의 프래그먼트 매니저(FragmentManager)가 프래그먼트를 만들 때 기본 생성자를 호출하기 때문이고, 만약 프래그먼트 생성시에 필요한 초기 값들을 기본이 아닌 생성자를 통해 만들었을 경우 해당 값들이 모두 초기화되어 있지 않기 때문에 프래그먼트에 기본이 아닌 생성자 사용을 지양하고 setArguments(), getArgument() 등의 방법을 사용하거나 그보다 조금 더 나아가 팩토리 메소드를 사용하는 것을 장려하는 것이다.
하지만 여전히 그렇게 아무 코드도 없는 빈 기본 생성자가 필요한 것인지에 대해서는 조금 의문이 드는 것이, 생성자가 전혀 정의되어 있지 않은 경우 컴파일러가 super()만이 포함된 기본 생성자를 만드는 것으로 알고 있기 때문이다. 만약 기본 생성자가 없이도 실제 코드 동작에 문제가 없다면 빈 기본 생성자를 명시해주는 것은 일종의 코딩 컨벤션으로 간주하면 되겠다. 구글에서 그렇게 해보라고 하는 거니 분명히 무슨 의미가 있을 것이(라고 구글빠는 믿숩니)다.
'CODE' 카테고리의 다른 글
코드스쿨(CodeSchool.com)에서 제안하는 웹디자인의 기초 중 알맹이들 (0) | 2015.09.14 |
---|---|
객체지향적으로 생각하라! (0) | 2015.04.28 |
동적 컨텐츠의 무한 스크롤 방식을 구현할 때 고려해야 할 점 (0) | 2015.03.17 |
이클립스(Eclipse) 안드로이드 프로젝트를 그레이들(Gradle) 안드로이드 프로젝트로 바꾸는 이야기 (1) | 2015.03.11 |
비동기 방식에서는 절대 플래그(flag)로 문제를 해결하려 들지 말라 (0) | 2015.03.06 |
Rails로 다중 언어 지원 애플리케이션 만들기 (0) | 2015.01.18 |
프로그래밍 숙제에서 발리지 않는 법 (0) | 2014.12.13 |
Ssign.net 서버 개발기 (0) | 2014.11.15 |
COMODO 보안서버 SSL 인증서 설치하기 (0) | 2014.11.03 |
워드프레스를 재설치할 때는 꼭 기존의 데이터베이스를 날려주자 (0) | 2014.10.31 |