전체 글

BOJ

[ 백준 2473 ] - 세 용액 (Kotlin)

2473번: 세 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 www.acmicpc.net 먼저 풀어보면 좋을 문제 2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net 문제 이해 & 기본 개념 세 용액의 합이 최소가 되는 경우를 구하는 문제 용액(2467번) 문제에서 하나의 용액이 더 추가 되었다. 용액(2467번) 문제는 투 포인터..

안드로이드/이론

[ 안드로이드 ] 클릭 가능한 모든 뷰에 반투명 효과 넣기

졸업 작품 앱을 만들던 중 뷰를 클릭했을 때 반투명 효과를 적용하고 싶었다. 단, 클릭 가능한 모든 뷰에 자동으로 적용하고 싶었다. 일일이 xml에서 지정해주는게 아닌 자동으로 할 방법이 없을까를 생각하다가 이 글을 작성하게 되었다. 해당 글에선 TouchListener를 Override 하여 모든 뷰에 클릭 효과를 넣는 방법을 소개한다. TransparentTouchListener.kt 생성 뷰를 클릭했을 때 반투명 효과를 주기 위해 아래와 같이 OnTouchListener를 재정의한다. class TransparentTouchListener( private val onTouchChanged: ((View, MotionEvent) -> Unit)? = null ) : View.OnTouchListene..

JAVA

[ JAVA ] MVP 패턴 + 코드 예시

MVP 패턴 구조 Model : 데이터를 처리하는 부분 View : 사용자에게 보여지는 UI 부분 Presenter : View의 요청을 받아 Model에게 전달하는 부분 (Model이 처리해준 결과를 받아서 View로 반환) 기타 클래스 Entity Entity 클래스는 DB 테이블과 직접적으로 매핑 되는 클래스를 뜻함 쉽게 생각하면 DB 테이블(또는 Json으로 저장된 파일)과 형태가 일치 Playlist.json 플레이리스트 데이터가 아래와 같은 Json 형태로 저장되어 있는 경우 { "id": "P0000001", "title": "플레이리스트 제목", "author": "작성자", "inform": "설명", "likes": 999, "downloads": 1023, "createTime": "..

안드로이드/이론

[ 안드로이드 ] Retrofit2를 이용하여 서버와 통신하기 (2) - 예시

[ 안드로이드 ] Retrofit2를 이용하여 서버와 통신하기 안드로이드에서 Retrofit2으로 서버와 통신하는 경우가 많은데, 에러 처리를 제대로 해주지 않아 앱이 강제 종료 되는 경우가 많다. 모든 에러를 다 처리해줄 수도 없고, 서버에서 어떤 문제가 발 dongx2.tistory.com 이전 글에서 서버의 요청을 안전하게 처리할 수 있는 방법을 소개했다. 이번 글에선 실제 요청을 보내는 코드 예시를 작성하고자 한다. 일단, 서버로부터 데이터를 받아올 Dto 클래스를 생성하기 위해서 서버의 Api 문서를 확인해야한다. 서버 Api 형식 확인 Dto 클래스를 생성하기 전 서버에서 어떤 형식으로 요청을 받는지, 응답은 어떻게 주는지를 확인해야 한다. 서버의 API Docs (Swagger 등)을 확인하..

안드로이드/이론

[ 안드로이드 ] Retrofit2를 이용하여 서버와 통신하기 (1) - 안전하게 통신하기 (SafeApiCall)

안드로이드에서 Retrofit2으로 서버와 통신하는 경우가 많은데, 에러 처리를 제대로 해주지 않아 앱이 강제 종료 되는 경우가 많다. 모든 에러를 다 처리해줄 수도 없고, 서버에서 어떤 문제가 발생할 지도 모르기 때문에 Retrofit 요청을 안전하게 보내는 방법을 작성하고자 한다. Response를 위한 공통 클래스 작성 안전한 통신을 위해 몇 가지 필요한 작업이 있다. Parcelize 일단 기본적으로 서버에서 받은 응답을 직렬화하기 위해서 Parcelable를 사용한다. @Parcelize는 @Serialize와 비슷한데, 직렬화를 가능하게 해주는 인터페이스인 Parcelable을 구현해주는 어노테이션이다. (Parcelize 설정 방법) 더보기 build.gradle (앱 수준) plugins ..

안드로이드/에러 해결

[ 안드로이드 ] StateFlow 동일한 값 방출(emit)하기

문제 상황 MVVM + 클린 아키텍쳐 형태로 블루투스 기능을 구현하던 도중 StateFlow에 관한 문제가 발생했다. 블루투스 장치가 새로 검색 되어도 StateFlow에서 값이 발행되지 않아 화면에 장치 리스트가 표시 되지 않았다. 처음 한 번만 발행되고 그 이후엔 발행이 안되었는데, 그 이유를 적어보고자 한다. 일단 State 패턴을 이용하여 UI의 State를 관리하는 방식을 사용하고 있는데, Bluetooth 검색 화면의 State 클래스가 아래와 같이 작성 되어 있었다. sealed class BluetoothSearchFragmentState { object Init : BluetoothSearchFragmentState() /.../ data class IsScanning( val scanR..

Docker

[Docker] Docker에 Mysql 설치하기

Docker를 이용한 Mysql 컨테이너 설치 Mysql 설치 1. Mysql 이미지 다운 docker pull mysql:[version] 2. Mysql 컨테이너 생성 docker run -dit -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --name [container name] mysql:[version] // root 계정의 비밀번호를 초기화해줘야 컨테이너가 실행된다. -dit : -d -i -t 옵션을 한 번에 적용 시킨 것 -e : 컨테이너에 환경 변수를 설정, -e MYSQL_ROOT_PASSWORD=root → root 계정의 비밀번호를 root로 설정 -e MYSQL_USER : user → user라는 이름의 계정을 생성 -e MYSQL_PASSWORD ..

Docker

[Docker] Docker에 Tomcat 설치하기

Docker를 이용한 Tamcat 컨테이너 설치 Tomcat 설치 1. tomcat 이미지 다운 docker pull tomcat:[version] 2. tomcat 컨테이너 생성 // 방법 1 docker run -d -it -p 8080:8080 --name [tomcat_container_name] tomcat:[version] // 방법 2 (로컬 경로를 바인딩하여 컨테이너 생성) docker run -d -it -p 8080:8080 -v [host path]:[docker path] --name [tomcat_container_name] tomcat:[version] -> -v 옵션으로 Docker Container의 경로 대신 내 컴퓨터(Host)의 경로로 대체된다. ex) docker ru..

dongx._.2
DongZip