분류 전체보기 426

[Kotlin] inline함수 reified키워드

# 람다의 패널티 고차 함수에 람다를 사용할 경우 런타임 시 특정 패널티가 발생한다, 라는 문구로 코틀린의 '인라인 함수' 참조 문서는 시작한다. 람다를 사용하면 각 함수는 객체로 변환되어 메모리 할당과 가상 호출 단계를 거치게 되는데, 이는 런타임 오버헤드를 초래한다는 것이다. # inline function 인라인(inline) 키워드는 자바에서는 제공하지 않는 코틀린만의 키워드입니다. 람다를 매개 변수로 사용하는 고차 함수를 '인라인 함수(Inline Function)'로 정의하여 오버 헤드를 줄일 수 있는 방법을 제공하고 있다. 인라인 함수로 정의된 함수는 컴파일 단계에서 호출하는 방식이 아니라 코드 자체가 복사되는 방식으로 컴파일 된다. # 람다식을 사용했을 대 무의미한 객체 생성을 예방 인라인..

안드로이드 2022.08.30

[Android] 제네릭(Generic)에 대해 알아 보자

[Android] 제네릭(Generic)에 대해 알아 보자 제네릭 이란? 데이터의 타입을 일반화한다는 것을 의미합니다. 제네릭을 통해 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 타임에 미리 지정하는 방법입니다. 제네릭 장점 객체의 타입 안정성 증가 반환값에 대한 타입 변환 및 타입 검사 x 모든 객체에 대한 확장성 런타임 환경에 아무런 영향이 없는 컴파일 시점의 전처리 기술이다 기존의 방식 JDK 1.5 이전에서는 여러 타입을 사용하는 클래스나 메소드에서 인수나 반환값으로 최상위 객체인 Object 타입 을 사용했습니다. : 원하는 타입으로 변환해야 하며, 오류가 발생할 가능성도 존재 제네릭 도입 JDK 1.5부터 도입된 제네릭 컴파일 시에 미리 타입이 정해지므로, 안정성이 증가하고 타입 변환..

안드로이드 2022.08.24

SOLID 원칙

출처: https://mangkyu.tistory.com/194 https://black-jin0427.tistory.com/192 객체 지향 프로그래밍의 5가지 핵심 원칙인 SOLID에 대해 알아보자 SRP(단일 책임 원칙) OCP(개방-폐쇄 원칙) LSP(리스코프 치환 원칙) ISP(인터페이스 분리 원칙) DIP(의존 역전 원칙) [단일 책임의 원칙(Single Responsibility Principle, SRP)] 하나의 모듈은 한 가지 책임을 가져야 한다. 모듈이 변경되는 이유가 한가지여야 함을 의미한다. 단일 책임 원칙을 적용하여 적절하게 책임과 관심이 다른 코드로 분리하고, 서로 영향을 주지 않도록 추상화 함으로써 애플리케이션의 변화에 손쉽게 대응할 수 있다. [개발 폐쇄 원칙 (Open-C..

개발 2022.08.24

자바 == 와 코틀린 === 비교

자바와 코틀린의 동등성 연산 자바 자바에서 원시타입 비교시 ==를 사용한다. 참조변수에서 ==를 사용할 경우 주소값을 비교한다. (동일성) 자바에서 두 참조변수의 동등성을 알기 위해서는 .equals를 사용해야한다. (동등성) 코틀린 코틀린에서는 자바와 달리 ==를 사용시 내부적으로 .equals를 호출한다. (동등성) 주소값을 비교하고 싶다면 ===을 사용한다. (동일성) 참조 : https://jinn-blog.tistory.com/5

안드로이드 2022.08.05

[Android] MVVM ViewModel과 AAC ViewModel의 차이

[Android] MVVM ViewModel과 AAC ViewModel의 차이 결론부터 얘기하자면 2개는 같다고 할 수 없습니다. # MVVM ViewModel MVVM의 ViewModel의 역할은 View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할입니다. # AAC ViewModel AAC의 ViewModel은 화면 회전 같은 환경에서 데이터를 보관하고 라이프사이클을 알고있어서 Activity나 Fragment의 Destroy시 onClear함수를 통한 데이터 해제의 역할을 하고있습니다. 구글에서 ViewModel의 목적은 데이터를 관리하고 바인딩하라는 목적으로 만든게 아니라고 한다. 하지만 AAC ViewModel이라고 그게 안될리가 없다. AAC ViewModel에 LiveData..

안드로이드 2022.08.04

[Android] Android12에서 File에 대한 직렬화(Serialization) 문제

[Android] Android12에서 File에 대한 직렬화(Serialization) 문제 gms:play-services-* 관련 버전 update > targetSdkVersion = 31 관련 기존에 play service 라이브러리 버전 17을 사용했는데, PendingIntent에서 FLAG_IMMUTABLE 관련 에러가 com.google.android.gms:play-services-auth:17.0.0에서 발생합니다. 해결 방안은 라이브러리 버전을 올리면 됩니다. # File 객체의 직렬화(Serialization) 와 역직렬화(Deserialization) 가 가능하도록 어댑터 추가 Android12 에서 File에 대한 직렬화가 이루어지지 않아 업로드 할 때 intent에서 값을 가..

[Android] 서비스(Service)에 대해 알아보자

[Android] 서비스(Service)에 대해 알아보자 # 서비스란? Service는 백그라운드 작업을 위한 애플리케이션 구성 요소이다. Activity가 사용자에게 직접 보이는 화면이라면 Service는 뒤에서 수행된다. ex. 음악 재생, 파일 입출력, 네트워크 트랜잭션, 전화 앱을 켜놓지 않은 상태에서도 전화를 받을 수 있는 것은 앱을 화면에서 직접 쓰고 있지 않아도 백그라운드에서 서비스가 돌아가고 있기 때문이다. # 서비스의 특징 유저와 상호작용 할 수 없다. 액티비티의 생명주기에 종속되어 있지 않다. 별도의 스레드에서 동작하지 않는다. 호스팅 프로세스의 "메인 스레드"에서 작동한다. 현재 비활성화된 액티비티보다 우선순위가 높다. # 서비스의  종류 서비스에는 여러 종류가 있습니다. Star..

안드로이드 2022.07.05

[Android] 힐트(Hilt)에 대해 알아보자

Android 힐트(Hilt)에 대해 알아보자 # Hilt Hilt는 Google의 Dagger를 기반으로 만든 Dependency Injection 라이브러리. Android에서 DI를 위한 Jetpack의 권장 라이브러리 프로젝트의 모든 Android 클래스에 컨테이너를 제공하고 수명 주기를 자동으로 관리함으로써 애플리케이션에서 DI를 실행하는 표준 방법을 정의 build.gradle파일에 추가 buildscript { ... dependencies { ... classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha' } } Gradle 플러그인을 적용하고 app/build.gradle파일에 다음 종속 항목을 추가 ... apply plu..

안드로이드 2022.06.20

Dependency(의존성), Dependency Injection

# Dependency(의존성) 코드에서 두 모듈간의 연결 객체지향 언어에서는 두 클래스 간의 관계라고도 말함. 일반적으로 둘 중 하나가 다른 하나를 어떤 용도를 위해 사용함 # Dependency가 위험한 이유 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경이 이루어지기 때문 테스트 가능한 어플을 만들 때 의존성이 있으면 유닛테스트 작성이 어려움 # DI란? Dependency Injection의 약자로 의존성 주입을 의미합니다. 특정 객체의 인스턴스가 필요한 경우 이를 외부에서 생성하여 전달하는 기법. # Dependency Injection(의존성 주입)이 필요한 이유 위 Dependency가 위험한 이유를 해결하기 위해서 사용 # 클래스 외부에서 종속성을 제공하면 생기는 이점 유닛 테스트가 쉬워진..

안드로이드 2022.06.14