분류 전체보기 241

[코루틴 기초] CoroutineScope (=코루틴 영역, 코루틴 스코프)

CoroutineScope : (코루틴의 라이프사이클을 시작하고 제어하기 위해 생성되는) 코루틴 지정 범위 ㄴ> Ex) CoroutineScope가 전역 역역(global scope)인 경우(= 코루틴의 전역 영역에서 실행된 경우), -> 코루틴의 생명주기가 전체 어플리케이션의 생명주기에 의해서만 제약되는 영역이 된다. - (CoroutineScope의 확장 함수인) 'launch' 또는 'async'를 사용하여 코루틴 실행 및 생성한 모든 코루틴을 추적함 cf) 디스패처와 달리 CoroutineScope는 코루틴을 실행하지 않는다. 더보기 BuildersKt.class public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutin..

Android/Coroutine 2022.07.08

Coroutine 예제로 개념잡기

안드로이드 공식문서 예제 따라하는 포스팅입니다. 1. 백그라운드 스레드에서 실행 예제 - '네트워크 요청' 작업은 작업이 지연되거나 부하되는 경우 문제가 되므로 이 작업을 코루틴에서 백그라운드 스레드에서 이 작업을 실행해보고자 한다. ▽ 네트워크 요청을 기본 스레드에서 했을 때 위험상황 더보기 기본 스레드에서 네트워크 요청을 보내면 응답을 받을 때까지 스레드가 대기하거나 차단됩니다. 스레드가 차단되는 경우 이로 인해 OS는 onDraw()를 호출할 수 없으므로 앱이 정지되고 애플리케이션 응답 없음(ANR) 대화상자가 표시될 수 있습니다 위와 같은 문제를 가진 코드가 아래와 같으며 문제해결을 위해 코루틴을 적용한다. ▽ 1) 네트워크 요청 작업 (@Repository클래스) sealed class Resu..

Android/Coroutine 2022.07.08

Coroutine 기초

Coroutine 이란? : 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴 - 코루틴 은 일시 중단 가능한 계산의 인스턴스 코드의 나머지 부분과 동시에 작동하는 코드 블록을 실행한다는 점에서 개념적으로 스레드와 유사합니다. - 그러나 특정 스레드에 바인딩되지 않습니다(스레드 단위와 관련없음!) 한 스레드에서 실행을 일시 중지하고 다른 스레드에서 다시 시작할 수 있고, 한 스레드 내에서 여러 코루틴이 실행되기도 한다. - 실행을 일시중단 했다가 나중에 중단 시점부터 다시 실행 재개할 수 있다. - 모든 코루틴은 범위(Scope) 내에서 실행해야 합니다. 필요성 - 스레드는 값비싼 리소스이고 스레드를 차단하는 것은 비효율적이고 종종 바람직하지 않기 때문에..

Android/Coroutine 2022.07.08

Room

Room : SQLite(스마트폰 내장 DB)에 데이터를 저장하기 위해 사용하는 라이브러리 - SQLite를 활용해서 객체 매핑을 해주는 역할을 한다.(SQLite에 추상화 계층을 제공) - Room을 사용하면 다음과 같은 이점이 있습니다. 더보기 SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석 간소화된 데이터베이스 이전 경로 0.설정 dependencies { val roomVersion = "2.4.2" implementation("androidx.room:room-runtime:$roomVersion") annotationProcessor("androidx.room:room-compiler:$roomVersion") // To use Kotlin ..

ViewModel

ViewModel 안드로이드는 화면 회전과 같이 구성을 변경할 때 UI 컨트롤러를 제거하거나 다시 만들어지면서 UI 컨트롤러에 저장된 모든 일시적인 UI 관련 데이터가 삭제됩니다. cf) 그래서 기존에는 onSaveInstanceState() 메서드를 사용하여 데이터 삭제 전 보관하였으나 제한적이었습니다. 더보기 onSaveInstanceState() 메서드를 사용하여 onCreate()의 번들에서 데이터를 복원할 수 있습니다. 하지만 이 접근 방법은 1) 사용자 목록이나 비트맵과 같은 대용량일 가능성이 높은 데이터가 아니라, 직렬화했다가 다시 역직렬화할 수 있는 소량의 데이터에만 적합합니다. 2) 다른 문제는 UI 컨트롤러가 반환하는 데 시간이 걸릴 수 있는 비동기 호출을 자주 해야 한다는 점입니다. ..

LiveData

LiveData - LiveData는 구독 시 Android Lifecycle을 따르도록 구현되어 있다. - LiveData는 항상 최신 데이터만을 보증한다. 이유는 위에서 보았던 setValue를 보면 알 수 있다. setValue는 어떠한 처리도 없는 단순 변수이다. 변수는 항상 마지막 데이터만을 들고 있을 수 있다. - LiveData는 항상 MainThread에서 사용할 값을 보증한다. (setValue를 하든 postValue를 하든) 0. 설정 def lifecycle_version = "2.3.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // LiveData imple..

ViewBinding vs DataBinding

ViewBinding ViewBinding을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다. View Binding은 각 XML 레이아웃 파일의 Binding 클래스를 생성한다. Binding 클래스의 인스턴스에서 레이아웃에 ID가 있는 모든 뷰의 직접참조를 할 수 있다. 즉, 간단하게 findViewByID를 쓰지 않고 XML의 view component에 접근하는 object를 반환받아서 view에 접근하는 방식이다. 여기서 object는 Android Studio에서 자동으로 대신 만들어준다. viewBinding은 findViewById를 대체하기 위한 방법으로만 사용된다. 따라서 기존에 제공되는 dataBinding과 viewBinding을 같은 모듈에서 동시에 사용할 수도 있다. (v..

OAuth, OAuth2.0, OpenID Connect

OAuth("Open Authorization")는 - 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. - 소위 말하는 '구글, 페이스북, 카카오, 네이버 등으로 로그인하기' 기능들 OAuth 2.0(Open Authorization 2.0, OAuth2)은 - 인가을 위한 개방형 표준 프로토콜 - Third-Party 프로그램에게 리소스 소유자를 대신하여 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식을 제공 - 구글, 페이스북, 카카오, 네이버 등에서 제공하는 간편 로그인 기능도 OAuth2 프로토콜 기반의 사용자 인증 기능을 제공..

Android 2022.07.03

[SOLID] DIP(=Dependency Inversion Principle, 의존관계 역전 원칙)

SOLID 원칙 중 마지막인 5. DIP(=Dependency Inversion Principle, 의존관계 역전 원칙) " '고수준 모듈'은 '저수준 모듈'의 구현에 의존해서는 안 된다. '저수준 모듈'이 '고수준 모듈'에서 정의한 추상 타입에 의존해야 한다." - 다른 말로 "자신보다 변하기 쉬운 것에 의존하 지 마라" - Ex) 고수준 모듈은 자동차 / 저수준 모듈은 스노우 타이어 - '추상화'를 이용해 문제 해결 - Ex) DIP 위반 사례 ⓐ 고수준 모듈인 자동차가 저수준 모듈인 스노우 타이어에 의존하는 상태 ⓑ 일반 타이어로 교체하기로 결정 ⓒ [문제] 의존하고 있던 자동차의 코드도 연쇄적으로 영향을 끼치게 됩니다.(개방-폐쇄 원칙을 위반) class Car(val tire: SnowTire)..

[SOLID] ISP(=Interface Segregation Principle, 인터페이스 분리 원칙)

SOLID 원칙 중 4번째인 1. ISP(=Interface Segregation Principle, 인터페이스 분리 원칙) " 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다." - 다른 말로 "클라이언트는 자신이 사용하는 메소드에만 의존해야 한다." - 클라이언트를 기준으로 인터페이스를 분리함으로써, 클라이언트로부터 발생하는 인터페이스의 여파가 다른 클라이언트에 미치는 영향을 최소화하는 것을 목표로 한다 - Ex) ISP 위반 사례 ⓐ interface Machine 에는 copy(), print(), fax(address: Address) 와 같은 모든 기능별 메소드가 선언되어 있다. ⓑ Machine을 상속받은 'class CopyMachine'는 copy() 외의 기능을..

[SOLID] LSP(=Liskov substitution principle, 리스코프 치환 원칙)

SOLID 원칙 중 3번째인 1. LSP (=Liskov substitution principle, 리스코프 치환 원칙) " 특정 메소드가 상위 타입을 인자로 사용한다고 할 때, 그 타입의 하위 타입도 문제 없이 정 상적으로 작동을 해야 한다." - 다른 말로 "상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한 다."를 의미 public int calculate(final Item item) { return item.calculate(); } ㄴ> 상위 타입인 Item이 있고, 그 하위 타입이 Apple이라면, LSP원칙 준수 시 위 인자로 item이 아닌 apple을 넘겨도 코드가 동작해야 합니다. - LSP 원칙이 제대로 지켜지지 않으면 다형성에 ..

카테고리 없음 2022.06.28

[SOLID] OCP (=Open-Closed Principle, 개방 폐쇄 원칙)

SOLID 원칙 중 두번째인 1. OCP (=Open-Closed Principle, 개방 폐쇄 원칙) "확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다." - 다른 말로 "기능변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다."를 의미 - 적용방법 (2가지) => 변화하는 부분을 추상화함으로써 기존 코드를 수정하지 않고도, 확장을 할 수 있게 만들어 줍니다. #1) 변화하는 부분을 추상화하는 것 -> 주로, 인터페이스를 통해서 구현을 합니다. #2) 상속을 이용하는 것 더보기 - ex) 상속을 사용 ⓐ HTTP 응답 프로토콜에 맞춰 데이터를 전송해 주는 ResponseSender 클래스가 존재한다. ⓑ 이때, 기존 기능에 압축 기능을 추가 필요한 상황 발생 ⓒ Respon..

[SOLID] SRP(=Single Responsibility Principle, 단일 책임 원칙)

SOLID 원칙 중 첫번째인 1. SRP : Single Responsibility Principle = 단일 책임 원칙 " 하나의 클래스는 하나의 책임을 가지고 책임을 캡슐화해야 한다. " - 다른 말로 "어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함"을 의미 - 책임 이란? ㄴ> 기능변경 시 변화되는 부분을 하나의 책임의 단위로 묶을 수 있다. ㄴ> 각각의 책임은 서로 다른 이유로 변경되어야 한다. ex) 데이터를 읽어 오는 책임의 기능이 변경될 때 데이터를 보여주는 책임은 변하면 안 됩니다. - 왜 '단일 책임'을 가져야 하는가? ㄴ> 책임의 개수가 많아질수록 한 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가하기 때문에 확장 및 유지보수가 어려워진다. ㄴ> ex)..

[SOLID] 객체지향 SOLID 원칙 (=객체지향 5대 원칙=SOLID원칙)

본 포스팅에서 Design Pattern이라고 매번 쓰기 귀찮아 'DP'로 일컫으려고 합니다. 객체지향 SOLID 원칙 - [대략설명] 객체 지향 개발 시 가급적 지켜야할 5개 원칙의 약자 모음 - [상세설명] SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. - [종류] 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. - [배경] 로버트 마틴[1][2]이 2000년대 초반[3]에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 SOLID 원칙 종류 SRP 단일 책임 원칙 (Single responsibility pr..

코드 스멜(code smell←코드 냄새)

코드 스멜(= code smell = 코드 냄새) : 컴퓨터 프로그래밍 코드에서 더 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 가리킨다. 특징 - 애자일 프로그래머가 사용하는 용어이기도 하다 - 코드 스멜인지 아닌지의 여부를 결정하는 일은 주관적 - 자동으로 특정한 종류의 코드 스멜을 확인하기 위한 도구들이 있으며, 그 예로는 체크스타일, PMD, 파인드벅스 등 점점 안 좋은 단어만 많이 알아가는 기분이다 ㅋㅋㅋ 출처 https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%EC%8A%A4%EB%A9%9C 코드 스멜 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org

[book][공부중] 코틀린 완벽 가이드 "4장 클래스와 객체 다루기"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "4장 클래스와 객체 다루기" 1. 주 생성자 (Primary constructor) - 클래스 헤더의 파라미터 목록이며 생략해도 무관 - 실행문 포함되지 않음 => 초기화 처리는 init 블록에서 가능 class Person(name: ..

Android/Kotlin 2022.06.18

[book][공부중] 코틀린 완벽 가이드 "3장 함수 정의하기"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "3장 함수 정의하기" 1. 파라미터 - 파라미터 앞에 var 나 val 사용불가 - 반드시 타입 지정해야함 - 함수 호출 시 인자값으로 초기화되는 불변 지역변수 - 파라미터가 참조타입(Call by Ref)인 경우 파라미터는 변경 불가하..

Android/Kotlin 2022.06.14

[book][공부중] 코틀린 완벽 가이드 "2장 코틀린 언어 기초"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "2장 코틀린 언어 기초" 1. 주석 자바와 달리 코틀린은주석 안에 주석을 쓸 수 있음 /** * 여러 줄 주석 * /** 주석 안에 주석도 주석 처리 cf) 자바에서는 닫힘 쓰는 순간 주석 풀림 */ */ /** * 여러 줄 주석 * /..

Android/Kotlin 2022.06.13

Android 인증서 관련 문제 발생 시 참고한 사이트

[이슈] 서버 인증서 갱신 시점에서 구단말에서 최신 서버인증서를 통한 인증이 수행되지 않아 javax.net.ssl.SSLHandshakeException 발생하며 서버 연동하지 못하는 이슈 발생 [도움]아래 '12.SSL 인증서 확인 사이트 - HiSEON'에서 인증서 추적하여 도움받았다. :-)bbb 진짜 막막했는데 관련 모든 사이트 감사드리며ㅠㅠ 추후 더 공부하여 포스팅하겠습니다. 1. 인증서 파일 형식 및 확장자의 차이점 비교 설명 (Certificate file format & extensions) | Knowledge Logger https://www.letmecompile.com/certificate-file-format-extensions-comparison/ 인증서 파일 형식 및 확장자의..

Study Programming 2022.05.23