전체 글 889

[안드로이드/Android] Parcelable 과 Serializable

What is Parcelable and Serializable Android 에서 Activity 간 이동이나 다른 앱으로 Component 이동 시 Intent를 사용한다. 이런 경우 데이터 객체를 같이 전달해야하는 경우가 새인다. 이 때 데이터 객체 즉, Class를 직렬화 하는 부분을 추가하여 사용하는데, Parcelizable 과 Serializable을 사용한다. 개발자 편의성 측면에서는 Serializable이 런타임시 성능 측면에서는 Parcelable 낫다고 함. But, 그것에 반대 의견을 제시하는 사람들도 있음. 반대의견보기 Serializable 예시 import java.io.Serializable data class User(val name: String?, val age: In..

안드로이드 2023.02.15

[안드로이드/Android] WebRTC PeerConnection.IceServer() is deprecated.

안드로이드에서 WebRTC 구현 시 stun server, turn server 가 있어야 하는데요. 해당 서버들을 직접 만들지 않고 제공 받아서 구현합니다. 물론 만들 수도 있겠죠? 해당 서버들을 제공받아 구현할 때 Peerconnection.IceServer("url", "username", "password") 을 사용했었는데요. IceServer(...) 는 deprecated 되었습니다. 대신에 builder() 를 호출하고 각 값들을 알맞게 set 해주시면 됩니다. PeerConnection.IceServer.builder("turn:aaawrelay.metered.ca:80").setUsername("username").setPassword("password").createIceServer()

안드로이드 2023.02.13

[안드로이드/Android] local.properties 활용하기/변수저장하기

안드로이드에는 local.properties 라는 파일이 있습니다. 위치 파일을 열어 이미지 처럼 변수를 저장해주면 됩니다. buid.gradle 이나 settings.gradle 에서도 사용할 수 있습니다. 사용할 때는 아래 코드처럼 사용하면 됩니다. kotlin settings.gradle.kts 에서 외부 라이브러리 경로를 불러올 때 사용했습니다. // 호출 project(":externalLibrary").projectDir = File(getExternalModuleDir()) // 메서드 선언 fun getExternalModuleDir(): String { val properties = java.util.Properties() properties.load(File(rootDir.absolut..

안드로이드 2023.02.10

[안드로이드/Android] Android Photo Picker directions.

안드로이드에서 갤러리 이미지, 동영상을 별도 권한 없이 더욱 쉽게 가져올 수 있도록 Photo Picker 라는 녀석이 생겼습니다. API 30 이상에서, androidx.activity 버전 1.6.1이상에서 사용할 수 있습니다. // 싱글 이미지 또는 비디오 선택 private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> if (uri != null) { Log.d("Photo Picker", "Selected URI: $uri") selectedImageView.setImageURI(uri) } else { Log.d("`Photo Picker", "No media select..

안드로이드 2023.02.07

[깃/Git] What is Git? 깃이란? 깃 명령어 정리

안녕하세요. 알통몬입니다. 오늘은 회사 내부에서 공유했던 깃에 대한 저의 정리 자료를 공유합니다.발표 내용: Git 에 관하여 발표 내용: Git 에 관하여 Git 이란? 깃이 사용하지 않던 시절을 생각해볼까요? 우리는 파일명을 수정하며 버전관리를 했습니다. 20xx.xx.xx-1차.txt 20xx.xx.xx-2차.txt 20xx.xx.xx-최종.txt 20xx.xx.xx-진짜최종.txt 20xx.xx.xx-피드백반영.zip 피드백반영2.zip [김진아, 안호서으 최준채] … : 위 방식의 가장 큰 단점은 어떤 것이 최종본인지 알 수 없고, 해당 버전에 어떤게 수정되었는지 제대로 파악하기가 어렵다는 점입니다. 그리고 하나의 파일을 동시에 두명이 수정한 경우는 어떻게 될까요? 마지막에 수정한 사람 것으로 ..

깃(Git) 2023.02.03

맥에서 새파일 만들기 touch

윈도우는 새 파일을 만드려면 우클릭 해서 새 파일 만들기를 하면 되지만 맥에서는 우클릭했을 때 새롭게 뭔가를 만드는 탭은 존재하지 않습니다. 터미널에서 touch 라는 명령어를 사용해야 하는데요. 먼저 터미널을 열고 파일을 만들고자 하는 디렉토리로 이동합니다. 이동했다면 touch 원하는파일명.원하는확장자 를 입력하면 해당 디렉토리에 파일이 생성됩니다. ex) touch aaa.txt

아무거나 2023.01.27

[Android/안드로이드] Flow colect 취소하기/cancellable Flow

Flow를 취소할 수 있는 거 아시나요? 상황에 따라 Flow의 collect() 를 취소해야할 수 있습니다. val combineJob = lifecycleScope.launch { combine( viewModel.socketClose, connectionViewModelV2.networkState, viewModel.state ) { socketClose, networkState, selfStudyListState -> Timber.tag("socketClose").d("$socketClose") Timber.tag("networkState").d("$networkState") when (networkState) { is NetworkState.Connected -> { network = true ..

안드로이드 2023.01.26

[Flutter/플러터] 플러터 화면 이동 Navigator.push(), Navigator.pop(), MaterialPageRoute

class MainScreen extends StatelessWidget { const MainScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Main Screen"), ), body: GestureDetector( child: Image.network("https://picsum.photos/250?image=9"), onTap: () { Navigator.push(context, MaterialPageRoute(builder: (_) { return DetailScreen(); })); // 아래처럼 사용할 수도 있습..

Flutter(플러터) 2023.01.19