본문 바로가기

전체 글

(50)
1장 : item 1 1장은 안정성을 주제로 10가지 아이템을 다루고 있다. Item 1 : 가변성을 제한하라 가변성을 제한하는 이유 많은 부분에서 변화가 생기면 디버깅이 어려워진다 테스트하기 어렵다 멀티스레드 환경일 경우 동기화가 필요한데, 변경이 많을수록 충돌 지점도 많아진다 가변성 제한 방법 kotlin에서 가변성을 제한하기 위해서 보통 immutable(읽기전용) 객체, 컬렉션을 사용한다. val : immutable 프로퍼티 사용 immutable 컬렉션 mutable 컬렉션과 구분하여 사용 data class의 copy 활용하기 val : 읽기 전용 프로퍼티 사용하기 val 가 붙은 프로퍼티는 읽기 전용이지만 가변성 존재한다. 예를 들면 mutable 객체를 담고 있을 경우가 그렇다. 그럼에도 var 대신 val를..
MAC 터미널에서 자주 쓰는 명령어 ls : 파일 및 디렉토리 리스트 1. 현재 파일 디렉토리 파일 및 디렉토리 리스트 ls . 2. 파일 및 디렉토리 리스트 자세히 보기 ls -l + 옵션 -h : 파일 용량 단위 보기 (B, KB 등) -s : 파일 크기 순으로 보기 -t : 수정 시간 순으로 보기 + 추가
== 과 ===의 차이 값을 비교할 때 두 가지 연산자를 사용할 수 있다. 자바에서는 ==을 원시타입 값 비교, 참조타입의 주소값 비교에 사용한다. 참조타입의 값 비교를 위해선 equals()를 사용한다. 코틀린은 편의를 위해 기본적으로 == 사용 시 내부에서 equals()를 호출하여 값을 비교하도록 만들고 참조 타입의 주소값 비교를 위해선 ===을 사용할 수 있다. 코틀린에서의 동등성과 동일성 비교 연산 1. == (동등성) 호출 시 내부적으로 equals()를 호출하여 값 비교를 수행할 수 있다. 2. === (동일성) 참조 타입의 주소값을 비교하기 위해 사용할 수 있다.
Inner class 와 Nested Class 차이 작성 계기 두 class의 차이점에 대해 아느냐는 질문을 받은 적이 있는데, 사실 잘 몰라서 대답을 제대로 못했다 분명 썼을텐데 정확한 개념을 알고 쓰지는 않았던 것 같다 이제부터 알아보도록😄 inner class 와 nested class 모두 클래스 내부에 정의된 클래스를 말한다. kotlin 에서는 별다른 키워드를 붙이지 않으면 클래스 내부에 정의된 클래스는 nested class로 만들어지며, inner 키워드를 붙여야 inner class로 만들어진다. 여기서 몇가지 질문이 생기는데 1. 왜 클래스 내부에 클래스를 쓰는가? 2. 왜 코틀린에서는 기본적으로 nested class를 사용하는가? 이에 대해 알아보자 Q1. 클래스 내부에 클래스를 왜 쓰는 걸까? 1 ) 외부 클래스에 대한 쉬운 접근을..
Flow 생성 : flowOf(), flow { emit() } Flow를 생성하고 값을 방출하기 위해서는 flowOf() 를 사용할 수도 있고, flow { emit() } 을 사용할 수도 있다. flowOf()는 값을 넘겨받아 emit() 하여 Flow를 생성하는 함수다. 난 이 두개가 어떤 차이를 가지고 있는지 알지 못하고 flowOf는 더 간편하게 flow를 만들 수 있는거~ 라는 대략의 생각으로 사용했다. 근데요..? zip 함수에 대해 찾아보다가 StackOverFlow에서 한 댓글을 발견하게 됩니다 각 차이를 한번 보자면 2023.04.17 추가 수정 flowOf 도 결국에는 내부에서 flow { emit() } 방식으로 flow를 만들고 있다. 하지만 둘을 비교해봤을 때, flowOf 를 사용하면 병렬 실행이 되지 않는 이유는 인자를 받는 부분에서 차이..
Flow 결합 연산자 : zip, combine Coroutine Flow는 Flow를 결합할 수 있는 연산자 zip과 combine을 제공하고 있다. 두 연산자 동작에 어떤 차이가 있는지 알아보자 zip 결합된 모든 flow의 결과값이 올 때까지 기다렸다 방출한다. flow 결과값들이 1:1로 결합하는 방식 모든 flow의 방출이 완료될 때까지 작동한다. 그림으로 보면 이해가 쉽다 flow1 - Blue Circle이 방출되고 1초 후 Red Circle이 방출된다. flow2 - Blue Square가 방출되고 2초 후 Red Square가 방출된다. flow1.zip(flow2) 의 결과값은? 1. Blue Circle과 Blue Square가 결합된다. 2. 1초 후 방출된 Red Circle은 대응되는 값이 없기 때문에 기다린다. 3.다시 1..
operator fun invoke 안드로이드에서 클린아키텍처를 적용할 때 UseCase를 만드는데 다음과 같은 형식으로 작성하는걸 많이 봤다. class GetSomething @Inject constructor(private val repository: Repository) { operator fun invoke(val param: String) = repository.getSomething(param) } 코틀린 공부하다보니 여기에 숨겨진 비밀을 알게됐다. A value of a function type can be invoked by using its invoke(...) operator: f.invoke(x) or just f(x). 즉 GetSomething.invoke(param)이 GetSomething(param) 이런식으..
🐘 Groovy 에서 KTS로 전환하기 🐘 목표 gradle 관리 언어 Groovy -> kts로 바꾸기 🐘 Gradle 안드로이드 프로젝트에선 다양한 오픈 소스 라이브러리들을 활용할 수 있다는 게 장점입니다. 프로젝트에서 사용하는 많은 라이브러리를 관리하기 위한 도구가 필요한데, Android Studio에서는 그 도구로 Gradle을 사용합니다. Gradle은 JVM에서 동작하는 빌드 자동화 시스템으로, 라이브러리 관리 뿐 아니라 컴파일, 테스트, 패키징 등의 빌드 작업을 자동화하는 역할을 합니다. 기존에 존재하던 Ant, Maven에 비해 간결하게 작성할 수 있으며 속도가 빠르다는 것이 장점입니다. 🐘 Groovy vs KTS Gradle은 자바와 비슷한 Groovy 언어로 작성하였는데, 이제는 KTS(코틀린 스크립트)로 이를 대체할 수..