본문 바로가기

코딩

(102)
백준 17069 파이프 옮기기2, 17070 파이프 옮기기1 #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long lld; int N; int arr[32][32]; lld memo[32][32][3]; lld dp(int i, int j, int mode) { if (i 31 || j 31) { return 0; } lld& m = memo[i][j][mode]; if (m != -1) return m; if (i == 0 && j == 1 && mode == 0) { m = 1; return m; }..
Git : 내 컴퓨터에도 필요하고 원격에도 필요한데 변경사항을 반영하기 싫을 때 보통 깃에서 잘 쓰던 파일을 ignore 하고싶으면 .gitignore에 해당 파일을 추가하고 git rm --cache . 와 같은 명령어로 깃 캐시를 초기화 하게 된다. 이렇게 하면 내 컴퓨터에는 파일이 남아있지만 원격에는 파일이 사라지게 된다. 그런데, 내 컴퓨터에서도 파일이 있어야 되고, 원격에도 있어야 되는데, 향후의 변경사항만 반영하기 싫으면? 그럴 경우 git update-index --assume-unchanged [해당 파일 주소] 를 쓰면 된다. 예를 들어, google_maps_api.xml의 파일은 미리 남겨두고, 해당 내용에 들어가있는 google api key만 원격에 올리지 말아야 할 상황이 있다고 생각해보자. 이런 상황이 되면 google_maps_api.xml의 파일을 먼저..
Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 5. SingleLiveEvent, SnackbarMessage S4장에서 계속 사용하던 LiveData의 문제점이 뭘까요? 예를들어 LiveData의 Observing을 이용해서 startActivity()를 한다고 생각해봅시다. 우리는 그럼 뷰모델에선 startActivityLiveData.value = SOME_DATA 와 같이 setValue를 하고, 액티비티에선 viewModel.startActivityLiveData.observe(this, Observe{startActivity(어쩌구 저쩌구 클래스::class.java)}) 와 같이 실행을 하겠죠. 그렇다면 여기서 문제점이 생깁니다. 만약 startActivityLiveData를 observe하고 있는 액티비티가 회전을 하게되면? 그럼 액티비티는 startActivityLiveData가 이전에 가지고 있..
Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 4. Livedata를 통한 데이터 바인딩 이번에는 저번 글에 이어서 Livedata를 이용하여 View 와 ViewModel간의 데이터 바인딩에 대해 글을 써보겠습니다. 저번 글에서도 설명한것처럼, View는 ViewModel 객체를 멤버로 가지고 있지만, ViewModel은 View의 객체를 가지고 있지 않습니다. 그럼, ViewModel에서 View의 함수를 호출하거나 View의 내용을 변경하거나, 혹은 Context나 Activity 객체의 함수를 호출해야 할 때는 어떻게 해야 할까요? 물론 Context를 이용하고 싶으면 AndroidViewModel을 상속하면 되지만, 지금은 넘어가도록 합시다. 해답은 바로 View가 ViewModel의 특정한 데이터를 Observing하고 있다가, 그 데이터가 변경될 때 View의 로직을 수행하면 됩..
Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 3. RxJava + Retrofit를 통한 네트워킹 및 옵저빙 이번 글에서는 Retrofit으로 네트워크 통신을 하고 그 결과값을 RxJava로 받아오는 과정을 수행해보겠습니다. 일단 Retrofit에 대해 간단히 알아보도록 하죠. Retrofit 저도 최근에 알았는데, 레트로핏 한글 문서가 있더라구요. http://devflow.github.io/retrofit-kr/ 길지 않으니 한번 정독하셔도 됩니다. 간단하게 레트로핏을 요약하자면 public interface GitHubService { @GET("/users/{user}/repos") Call listRepos(@Path("user") String user);} 이렇게 인터페이스 형태의 서비스를 먼저 만듭니다. 자바 어노테이션으로 @Get이나 @Post 등을 적어주고, 파라미터로 라우팅 정보를 적어줍니다...
Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 2. Koin을 통한 의존성 주입 의존성 주입.. Dependency injection ... 줄여서... DI.... 이걸 왜하느냐! 라고 물으시면.. 아주 간단하게, 테스팅을 위해서! 라고 답할 수 있지 않을까요..? 지금과 같은 MVVM패턴에서 뷰모델을 테스팅한다고 칩시다. 그럼 뷰모델을 테스팅하려면 뷰모델이 의존하고 있는 모델은.. 어떻게 만들어서 뷰모델에게 줘야 뷰모델을 테스팅 할 수 있을까요? 간단한 방법으로는 모델을 내부에서 생성하지 않고 생성자의 인자로 주는 것입니다. ViewModel{val model = Model()} 과 같이 하지 않고 ViewModel(val model){} 이렇게 그러면 뷰모델을 테스팅모듈에서 생성할 때 테스팅용 모델을 뷰모델의 생성자로 '주입' 해줌으로서 뷰모델을 테스팅하기 쉽게 할 수 있는 것..
Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 1. BaseView, BaseViewModel을 작성하여 MVVM의 토대 만들기 MVVM 패턴과 Kotlin으로 간단한 앱을 만드는 것에 대해 글을 써보려고 합니다. 저도 정리를 좀 하고, 다른 분들도 도움이 좀 되셨으면 하는 의미에서.. 일단 어떤 앱을 만들고자 하냐면, 간단하게 카카오 Api로 이미지 검색을 해서 그 내용을 화면에 리사이클러뷰로 그리드하게 쭉 뿌려주는 앱을 샘플로 만들어 볼 예정입니다. 이렇게요! 그 과정에서 MVVM패턴을 위한 Livedata, 통신을 위한 Retrofit + RxJava, 이미지를 뿌려주기 위한 Picasso 의존성주입을 위한 Koin, 그리고 com.android.support를 대채하는 AndroidX 를 활용해 볼 예정입니다. AndroidX에 관해서는 https://thdev.tech/google%20io/2018/05/12/Androi..
androidx view.doOnLayout androidx의 view.doOnLayout에 대해 짧게 글을 써본다 공식 문서에는 이렇게 되어있다 레이아웃이 놓여졌을 때 주어진 액션을 수행. 뷰의 포지션을 구하고 싶을 때 (Kotlin)my_image_view.run{ doOnLayout { getLocationOnScreen(startPos) Logger.d("start dot rect : ${startPos[1]}") } }와 같이 하면 된다 onWindowFocusChanged() 를 사용하면 안드로이드 멀티뷰를 쓸 때 좀 이상해진다. 호출이 약간 늦거나 이르거나.. 저걸 쓰면 잘됨