전체 글 412

[Android] 코틀린 확장 함수(kotlin extention)에 대해 알아보자

[Android] 코틀린 익스텐션(kotlin extention)에 대해 알아보자 유용한 함수 🟩 sort() collection의 각 요소들을 정렬해줍니다. fun main(args: Array) { val a: MutableList = mutableListOf(3, 2, 1) a.sort() //a.sorted() 는 새로운 collection을 반환 println(a) val sorted = a.sortedByDescending { it } // 내림차순 println(sorted) //sortBy() : Object 의 특정 Property 들을 기준으로 정렬 val list = mutableListOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 ..

코틀린 & Java 2022.10.05

[Android] 네비게이션(Navigation)에 대해 알아보자

[Android] 네비게이션(Navigation)에 대해 알아보자 # Navigation Component는 왜 등장 했을까? 기존 네비게이션 방식의 어려운 점들 Fragment Transaction(Lifecycle Dancing) 상황마다 목적지가 다른 Up and Back Action Passing Arguments Deep Links 위의 문제들로 인한 *Error-prone Boilerplate Code Error-prone : 발생하기 쉬운 오류 # 왜 Navigation Component를 쓸까? 우선 Navigation Component를 사용하면 여러 화면 (Fragment)를 하나의 Activity로 묶어서 그래프라는 개념으로 관리하게 된다. (Single Activity - Multi..

안드로이드 2022.09.22

[Android] 가비지 컬렉터(Garbage Collector), 참조(Reference)에 대해 알아보자

[Android] 가비지 컬렉터(Garbage Collector), 참조(Reference)에 대해 알아보자 # Java의 Garbage Collector 1. 힙(heap) 내의 객체 중에서 가비지(garbage)를 찾아낸다. 2. 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. # GC와 Reachability - Java GC는 객체가 Garbage인지 판별하기 위해서 Reachability라는 개념을 사용 - 어떤 객체에 유효한 참조가 있으면 'reachable', 없으면 'unreachable' - unreachable 객체를 가비지로 간주해 GC를 수행 - 유효한 최초의 참조가 있어야 하는데 이를 객체 참조의 root set # Reference - java.lang.ref는 Strong r..

코틀린 & Java 2022.09.21

Stack vs Heap

스택 VS 힙 # 메모리 구조 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드되어야 한다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간 1. 코드(code) 영역 2. 데이터(data) 영역 3. 스택(stack) 영역 4. 힙(heap) 영역 코드(Code) 영역 실행할 프로그램의 코드가 저장되는 영역 cpu는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 데이터(data) 영역 전역 변수와 정적(static)변수가 저장 프로그램의 시작과 함께 할당되며, 프로그램이 종료 되면 소멸 스택(stack) 영역 함수 호출과 관계되는 지..

안드로이드 2022.09.20

TextView Ellipsize end가 OS낮은 버전에서 많이 줄여질 때

# 문제 저는 안드로이드 OS 8.0이하에서 발생하였습니다. (실제 더 높아도 발생할지도..?) TextView에 ellipsize="end"를 주었고 maxLines="1"을 적용한 상황 해당 텍스트 = "문자열이 길어요길어요길어요길어요길어요" 8.0이하 텍스트뷰 : 문자열이... (나머지는 여백) 뷰크기는 늘어나 있었습니다. 다른 정상 텍스트뷰 : 문자열이 길어요길어요길어요... "길어요길어요길어요길어요길어요" 부분이 띄어쓰기 없이 길다 보니 단어 전체를 말줄임 하는 문제가 발생하였습니다 singleLine="true"로 적용하니 다른 정상 텍스트뷰와 같게 나옴! # 궁금 singleLine은 Deprecated로 되어진 것으로 알고 있는데, 추후에 문제가 없을지..?

안드로이드 2022.09.20

[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