안드로이드 [Kotlin] - 프로가드(Proguard) 설정하기
2022. 12. 26. 14:28
Android
프로가드(Proguard)란? 앱은 IP 도난, 앱 복제, 민감한 데이터 손실, 브랜드 평판 손상 등과 같이 다양한 위협에 취약하다. 또한 보안 위협과 함께 또 하나의 중요하게 고려해야 하는 것은 앱 성능이다. 애플리케이션에서 불필요한 코드와 요소를 제거하면 더 작고 빠른 앱을 만들 수 있다. 코드 난독화는 오픈 소스 애플리케이션에서 매우 중요하다고 할 수 있다. 프로가드는 컴파일된 앱 패키지의 코드를 난독화해서 다른 사람이 해당 패키지를 디컴파일 했을 때 해독하기 어렵게 만드는 일종의 보안 장치이다. 프로가드가 필요한 이유 코드 난독화를 통해 디컴파일시 본인의 코드가 노출되는 것을 방지 할 수 있다. 불필요한 메서드를 제거하여 멀티덱스를 피할 수 있다. 프로가드의 특징 축소(Shrinking) 축소는 ..
안드로이드 [Kotlin] - 핸들러와 루퍼(Handler & Looper)
2022. 12. 25. 21:34
Android
안드로이드에서 Thread 안드로이드에서의 메인 스레드(Main Thread, UI Thread)란? 앱이 실행됐을 때 시스템에서는 메인(Main)이라고 불리는 스레드를 생성한다. 메인스레드는 안드로이드 이벤트 생성 및 처리를 담당할 뿐 아니라 안드로이드에서 발생되는 여러 이벤트를 그와 관련된 위젯으로 연동시키는 중요한 역할을 수행한다. 또한 안드로이드에서 제공하는 다양한 뷰와 위젯을 표현하는 역할과 사용자로 하여금 그것을 사용할 수 있게 해 주어 UI 스레드라고도 불린다. 앱에 메인 스레드만 존재한다면? 앱이 단일 스레드 즉 메인 스레드만 존재하는 모델에서는 형편없는 성능을 낳게 된다. 메인 스레드에서 모든 작업을 처리한다면 네트워크 처리 및 데이터베이스 쿼리와 같이 오래 걸리는 작업을 하는 동안 UI..
안드로이드 [Kotlin] - Data Class의 copy()는 얕은 복사다.
2022. 12. 10. 22:39
Android
Data Class란? 데이터 보관이 목적인 클래스로, toString(), equals(), hasCode(), copy()가 기본적으로 오버라이딩 및 추가되어 있어 데이터 출력, 비교, 복사가 편하다. 얕은 복사? 깊은 복사? 얕은 복사란 "주소 값"을 복사하다는 의미이다. 깊은 복사란 "실제 값"을 복사한다는 의미이다. 코틀린에서는 기본적으로 '='을 사용해서 다른 인스턴스를 넣어주면 얕은 복사가 수행된다. 얕은 복사가 수행되게 되면 같은 주소 값을 참조하기 때문에 복사된 객체가 변경되면 원본 객체의 값도 변경된다. data class Car(private val name: String = "", var position: Int = 0) { fun move() { position++ } } clas..
안드로이드 [Kotlin] - 안드로이드에서의 싱글톤패턴(Singleton Pattern) with object & DCL
2022. 12. 9. 14:16
Android
싱글톤 패턴이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러 개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. - 위키피디아 싱글톤 패턴의 이점 위의 설명과 같이 싱글톤 패턴을 사용하면 이점이 어떤 것이 있을까? 메모리 측면 가장 먼저 떠올릴 수 있는 이점은 아무래도 "메모리 측면" 일 것이다. 최초 한 번의 생성을 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 ..
안드로이드 [Kotlin] - 안드로이드 테스트 자동화
2022. 11. 27. 21:13
Android
안드로이드에서 기능을 작성하면 필연적으로 기능의 테스트를 수행해야 한다. 이는 애뮬레이터나 단말기에서 앱을 실행하고 구현한 기능을 이것저것 동작해보며 내가 기대하는 동작과 일치하는지 확인하는 것이다. 테스트 유형 기능 테스트 : 앱이 제대로 기능을 수행하는지 확인 성능 테스트 : 앱이 빠르고 효율적으로 수행하는지 확인 접근성 테스트 : 접근성 서비스와 잘 연동되는지 확인 호환성 테스트 : 모든 기기와 API 수준에서 잘 작동하는지 확인 수동 테스트 테스트 자동화에 대해 알지 않아도 즉 초보라도 쉽게 수행할 수 있다. 하지만 앱의 기능이 많아지고 구조가 복잡해지면 점점 빌드시간이 증가하고, 코드를 수정할 때마다 앱의 모든 기능을 수동으로 일일이 확인하는 것은 비효율적이다. 자동 테스트 사람이 수동으로 일일..