개발/Android(48)
-
Retrofit API Test
대부분 restful API를 사용하는 안드로이드 네이티브 개발자들이라면Retrofit을 쉽게 사용할것이다. 구현 자체는 어렵지 않으나… API 개발은 프로젝트에서 독립적인 영역이고,때문에 시간이 지남에 따라 API의 변경이라든지, 구조의 변경..뭐 이런게 있을 수 있다. 변경 정도면 양반이고….API가 없는 상태에서 개발을 시작하게 되는 경우도 드물지 않다…… 이 말은 즉슨, mock test가 필수적이라는것 MockWebServer 전제 조건Retrofit 기반이므로 미리 준비되어 있어야 한다req /response 객체 있어야 한다단위 테스트의 기본을 이해해야 한다 구현 방법dependency 추가testImplementation ("com.squareup.okhttp3:mockwebserver: ..
2024.01.03 -
메모리 누수를 해결하는 조금 더 자세한 방법
이전에 관련된 글을 작성한 적 있으므로, 중복된 항목에 대해서 이유를 자세하게 적지는 않겠다. Inner class와 익명 class밖의 클래스보다 inner class의 주기가 더 길면 생기는 문제암시적 참조를 주의할것class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) val button = findViewById(R.id.myButton) button.setOnClickListener { // This is an anonymous inner class // I..
2024.01.03 -
Android SSL Pinning
Pinningssl 인증서에 의존하는 서비스나 사이트의 보안을 향상시키기 위한 선택적 메커니즘피닝을 쓰면 암호화 id와 호스트를 연결할 수 이씀.pinning은 보안 연결을 설정할때 허용할 특정 id를 클라이언트에 알려줌 SSL Pinning호스트를 해당 인증서 또는 공개 키와 연결하는 프로세스호스트의 인증서 / 공개키를 알게되면, 이를 해당 호스트에 pin→ 사전에 정의된 공개키가 아니면 모두 거부! 이걸 왜 쓰나요?ca로 인증받는 방식에서 끝나게되면, 디바이스의 루트 ca를 해킹하게 되거나, android trust store에 등록하게 되면, 중간에서 중간자 공격이 가능해짐→ 이를 막기위함!중간자 공격으로부터 보호할 수 있고ca손상에 영향을 받지 않으며 민감 정보를 보호할 수 있다 SSL Pinni..
2023.12.15 -
Android의 모듈식 접근 방식
모듈의 종류App Module : 메인 모듈. ui, android 구성요소, 부트스트랩 코드 포함Feature Module : 각각 앱의 기능을 담당하는 모듈. 독립적으로 개발하고 테스트가 필요한 친구들을 이렇게 구분함Library Module : 네트워크 계층, 데이터베이스 서비스 또는 유틸리티 클래스와 같은 재사용 가능한 구성 요소Dynamic Feature Module(DFM) : 필요하지 않은 기능은 다운을 받지 않는 등, 선택적인 기능을 위한 동적 모듈 (ex : 앱 초기 설치 후 필요하지 않은 기능인 온보딩 모듈 등) 예시 앱 모듈:app기능 모듈: feature_login, feature_dashboard라이브러리 모듈: network,database동적 기능 모듈:feature_extra..
2023.12.15 -
MenuProvider
setHasOptionsMenu() , onCreateOptionsMenu(), onOptionsItemSelected() 는 Deprecated 되었다……………. 그렇다면 대체제는 무엇일까? MenuProvider4개의 메소드를 포함한 인터페이스이다 onCreateMenu : menu를 inflate하는 부분onMenuItemSelected : option메뉴를 클릭할 때 발생하는 부분onPrepareMenu : menu item을 customizing하는 부분. visibility나 menuItem의 customize를 할 수 있다onMenuClosed : 메뉴 닫히면 발생하는 부분 MenuHostComponentActivity, AppCompatActivity에 implement된 인터페이스. me..
2023.12.15 -
메모리 누수의 원인 10가지
1. Non-Static Inner ClassesKotlin의 내부 클래스는 외부 클래스에 대한 암시적 참조를 보유할 수 있음Example:class MyActivity : AppCompatActivity() { private inner class MyThread : Thread() { override fun run() { // Task } } }해결 방법: 내부 클래스를 정적으로 만들거나, 별도의 클래스를 사용하기. 필요한 경우 외부 클래스에 대한 약한 참조를 전달 2. Handlers and Runnables핸들러가 외부 클래스에 대한 참조를 보유하는 경우 메모리 누수가 발생할 수 있음Example:class MyActivity : AppCompatActivity() { private val hand..
2023.12.15