전체 글 7

Kotlin 범위 함수 Scope Functions (let, with, run, apply, also)

범위 함수란? 컨텍스트 객체와 함께 코드 블록을 실행하는 것을 목적으로 하는 함수를 말합니다. 이해하기 쉽게 말하자면 특정 객체를 이용해서 만든 임시 범위 블록 내에서 특정 객체의 이름 없이 객체에 접근할 수 있도록 도와주는 함수를 말합니다. 코틀린 표준 라이브러리에는 이러한 범위 함수가 몇 가지 있습니다. 이 글에서는 let,with,run,apply,also 이렇게 5가지를 알아보겠습니다. 범위 함수를 쓰면 좋은 점? 매번 같은 객체의 이름을 반복적으로 쓰는 경우 범위 함수 내에서는 this(생략 가능), it을 통해서 접근 및 사용을 할 수 있어서 코드를 간결하고 가독성 좋게 만들 수 있습니다. 객체를 이용하는 상황에 따라 적절한 범위 함수를 사용하는 것이 중요합니다. 범위 함수 사이의 차이점? 기..

Kotlin 2021.10.22

Kotlin DSL과 buildSrc 적용하기

DSL이란? Domain Specific Language의 약어로 특정 응용 프로그램 도메인에 특화된 컴퓨터 언어입니다. 예를들어 관계형 데이터베이스 시스템에서 자료를 관리 및 처리하기 위해 설계된 언어인 SQL도 DSL 중 하나입니다. Kotlin DSL이란? Kotlin DSL은 코틀린의 언어적인 특징으로 가독성이 좋고 간략한 코드를 사용하여 Gradle 스크립팅을 하는 것을 목적으로 하는 DSL입니다. 안드로이드 디벨로퍼스 가이드 문서에는 KTS(코틀린 스크립트)라는 용어를 사용하는데 KTS와 Kotlin DSL은 Groovy에서 이전하는 맥락에서 서로 바꿔 사용할 수 있는 용어입니다.. 빌드 스크립트에서 사용하는 객체, 함수, 속성들은 Gradle API와 적용한 plugin API에서 가져옵니다..

의존성 주입 DI(Dependency Injection) - 디자인 패턴

의존성 주입이란? 프로그래밍에서 구성요소간의 의존 관계가 내부에서 생성하는 관계아닌 외부를 통해 정의되게하는 디자인 패턴 중에 하나입니다. 의존성 주입 도입시 이점 프로그래밍을 할 때 의존성 주입을 구현하면 다음과 같은 이점을 누릴 수 있습니다. 코드 재사용 가능 리팩터링 편의성 테스트 편의성 음... 분명 한글로 쓰여있는데 뭔 소린지 한 번에 이해하기 힘듭니다. 단어를 쪼개서 이해해봅니다. 의존성? 프로그래밍에서 의존성이란 예를 들어 어떤 클래스 A가 다른 클래스 B를 이용할 때 A가 B에 의존한다고 말할 수 있습니다. 즉 A는 B가 없으면 어떤 행위를 할 수 없기에 A가 B에게 일방적인 의존관계를 가진다고 할 수 있습니다. 코틀린 코드를 통한 예시를 보겠습니다. 위 코드의 경우 Car 클래스는 Eng..

소프트웨어 설계 원칙 SOLID

설계 원칙 SOLID SOLID 원칙은 함수와 데이터 구조를 클래스로 배치하는 방법, 그리고 이들 클래스를 서로 결합하는 방법을 설명한다. '클래스'라는 단어를 사용했다고 해서 SOLID 원칙이 객체 지향 소프트웨어에만 적용된다는 뜻은 아니다. 여기에서 클래스는 단순히 함수와 데이터를 결합한 집합을 가리킨다. SOLID 원칙은 이러한 집합에 적용된다. SOLID 원칙의 목적 중간 수준(모듈 수준)의 소프트웨어 구조가 아래의 특징을 같도록 만드는 데 있다. 코드 수준보다는 조금 상위에서 적용되며 모듈과 컴포넌트 내부에서 사용되는 소프트웨어 구조를 정의하는데 도움을 준다. * 변경에 유연하다. * 이해하기 쉽다. * 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 된다. SRP: 단일 책임 원칙 ..

Android Navigation Component 안드로이드 네비게이션 컴포넌트

Android Jetpack에는 크게 4가지 카테고리가 있습니다. 그 중 아키텍처 카테고리에 속한 컴포넌트 중 하나인 네비게이션 컴포넌트 기본적인 내용을 학습하기 위해 새 프로젝트를 만들고 하나씩 설명하겠습니다. Navigation Component 란? 네비게이션 컴포넌트는 API이자 앱 내에서 탐색 흐름을 기존보다 훨씬 쉽게 만들고 편집할 수 있게 해주는 안드로이드 스튜디오 디자인 도구입니다. Navigation Component의 장점 * 프래그먼트 트랜잭션 처리. * 기본적으로 '위로'와 '뒤로' 작업을 올바르게 처리. -> AppBar를 사용하는 UI라면 '위로'와 '뒤로' 작업을 기본적으로 동일하게 처리합니다. 백 스택이 없을 경우 '위로'는 앱을 종료하지 않습니다. * 애니메이션과 전환에 표..

Android/Jetpack 2021.05.27

git .gitignore 파일 수정 후 적용 안되는 문제 해결 (git cache 삭제)

안드로이드 스튜디오에서 git을 연동하여 사용하다가 git에 변경사항이 감지되지 않았으면하는 폴더가 생겨서 .gitignore 파일을 수정했는데 적용이 되지않는 이슈가 발생습니다. 찾아보니 git cache 를 지우고 다시 add 해서 해결할 수 있었습니다. 주의!! 혹시 모르니 캐시를 삭제하기 전에 기존에 작업하고 있던 내용들을 저장해서 원격 저장소와 동기화하세요! 실수로 이제까지 작업한 내용을 날리는 불상사를 방지할 수 있습니다! 1. 먼저 터미널로 .gitignore 파일이 있는 경로로 이동합니다. git rm -r --cached . 2. git cache를 지웁니다. git add . 3. add 명령을 한 후 변경된 .gitignore 파일의 내용이 잘 적용됐는지 확인합니다. git commi..

Git 2021.05.26

안드로이드 Q 내부 외부 저장소 간단 정리 ( Scoped Storage )

Scoped Storage 란 무엇인가? Scoped Sorage는 Android Q를 출시하면서 제시한 저장소에 대한 새로운 접근 방식입니다. 사용자에게 더 많은 파일 제어 권한을 제공합니다. Android 10 (API 레벨 29) 이상을 대상으로하는 앱에는 기본적으로 범위가 지정된 외부 저장소 또는 범위가 지정된 저장소에 대한 액세스 권한이 부여됩니다. 이러한 앱은 앱이 만든 특정 유형의 미디어뿐 아니라 외부 저장소의 앱별 디렉터리에만 액세스 할 수 있습니다. 왜 Scoped Storage라는라는 새로운 접근 방식을 적용했을까? Android Dev Summit '19에서 Preparing for scoped storage 발표자에 의하면 요즘 사용되는 앱의 절반 가량이 저장소 접근 권한을 요청하는..

Android 2020.10.03