소프트웨어 엔지니어링에서 의존성 주입(Dependency Injection, DI)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할 수 있는 객체이다. 또한 공유 변수를 이용한 구성이 필요할 때 추후 유지보수와 메모리 효율 등을 위해 상태 관리(State Management)가 필요하다. 이와 관련된 수단으로 Singleton, Provider 등이 있다. 이 중 싱글톤 패턴(Singleton Pattern)을 알아보려 한다. 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴(Singleton Pattern)은 객체의 인스턴스가 오직 1개만 생성하여 사용하는 패턴을 의미한다. 생성자를 여러 번 호출하더라도 실제 생성되는 객체는 하나이며 최초로 생..
PC의 보급이 빨라지고 스마트 폰을 많은 사람들이 소유하게 되며 보다 쉽게 사람들은 파일들을 정리할 기회가 생기게 되었다. 옛날 2G 핸드폰은 주어진 구조 및 GUI 환경에서 여러 기능들을 수행하였지만 지금은 좀 더 커스터마이징 하기 간편한 구조가 되었다. 예를 들어 여러 위젯들을 이용해 바탕화면을 꾸미거나 자신만의 디렉토리를 만들어 여러 응용 프로그램들을 하나로 묶어 관리한다. 하지만 A라는 사람의 핸드폰을 B가 잠깐 사용한다면 어디에 무슨 앱이 있는지 또는 어떤 파일을 찾을 때 한 번에 찾는 건 어려울 것이다. 소스 코드도 마찬가지이다. 타인의 네이밍 규칙과 여러가지 의도를 한 눈에 파악하는 것은 매우 힘들다. 기존 레거시 코드를 유지보수 하거나 협업을 하게된다면 더더욱 정형화된 방식 또는 약속된 규..
PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null) Flutter를 이용해 Android에서 Google 소셜 로그인 기능을 구현할 때 이 에러가 발생하게 되는데, 이미 이 에러를 띄웠을 때는 소셜 로그인을 이용하여 구글 로그인을 위한 API 요청은 실행이 되었을 것으로 생각된다. 아마도 대부분은 아이디와 비밀번호를 정상적으로 입력한 후 로그인을 위한 요청을 보냈을 때 이 에러를 반환한다. 일반적으로 인증서와 관련된 문제가 발생했을 때 아래 에러가 발생한다. 해당 에러가 발생하기 전에 놓친 부분들은 여러가지가 있겠지만 직접 경험해본 케이스는 아래와 같다. Firebase에 디버그..
BLoC(Business Logic Component) BLoC(Business Logic Component)란 UI와 Business Logic을 분리하여 만드는 방식을 의미한다. BLoC는 Flutter의 state를 관리하는 디자인 패턴 중 하나이며 Google 개발자에 의해 고안되었다. Flutter는 state에 따라 렌더링이 일어나기 때문에, 상태 관리가 매우 중요하다. 또한 상태 관리는 Flutter에서 만의 문제가 아닌 모든 개발에서 중요하게 고려되어야 할 사항이다. 그러므로 이 BLoC Pattern은 Flutter를 위해 설계되었지만 다른 프레임워크나 언어에서도 적용 가능한 디자인 패턴이다. 예를 들어 React Native에서 setState라는 Hook을 이용해 상태를 갱신시키며 ..