클래스는 객체 지향 프로그래밍(OOP) 패러다임에서 가장 중요한 추상화입니다. 이번 장에서는 코틀린에서 자주 볼 수 있는 클래스 사용 패턴에 대해 알아보고자 합니다. 이런 패턴을 어떻게 활용하고, 어떤 점을 기대하고 사용하는 지 등 규약에 대해서 알아보겠습니다. 해당 규약들을 잘 따르면, 안전하고 깔끔한 코드를 만드는 데 도움이 됩니다.아이템 36 - 상속보다는 컴포지션을 사용하라상속은 굉장히 강력한 기능으로, IS-A 관계의 객체 계층 구조를 만들기 위해 사용됩니다. 상속은 관계가 명확하지 않을 때 사용하면, 여러 문제가 발생할 수 있으므로 신중하게 사용해야 합니다.일반적으로, 일부 코드 추출 또는 재사용이 목적이라면 상속보다는 컴포지션을 사용하는 것이 좋습니다.간단한 행위 재사용프로그레스 바를 특정 ..
목표코루틴 효율적으로 테스트하기단위 테스트단위(Unit)명확히 정의된 역할의 범위를 갖는 코드의 집합을 의미하며, 정의된 동작을 실행하는 개별 함수나 클래스 또는 모듈 모두가 단위가 될 수 있습니다.단위 테스트란, 이런 단위에 대한 자동화된 테스트를 작성하고 실행하는 프로세스를 말합니다. 객체 지향 프로그래밍에서는 책임을 객체에 할당하고 객체간 협력을 구축하고 있기 때문에, 객체 지향 프로그래밍에서의 단위 테스트는 주로 객체에 대해 이루어집니다.코틀린 또한 객체 지향 언어이기 때문에 코틀린에서는 일반적으로 객체가 단위 테스트 대상이 됩니다.테스트는 보통 객체가 예상한 대로 동작하는지 확인하게 되며, 확인하는 대상은 아래와 같이 다양합니다.결과값이 제대로 반환되는지결과값이 원하는데로 잘 변화하는지객체간 의..
목표코틀린 공식 문서의 Asynchronous Flow 학습Asynchronous Flow중단 함수는 비동기적으로 하나의 값을 반환합니다. 비동기적으로 계산된 여러 가지 값들을 반환하고 싶을 때는 어떻게 해야 할까요? 이를 위해 등장한 것이 Kotlin Flow입니다.여러 값들을 표현하는 방법코틀린에서는 collections을 이용해서 여러 값들을 표현할 수 있습니다.forEachcollections의 값들을 표현할 때에는 아래와 같이 간단하게 forEach를 사용할 수 있습니다.Sequence만약, CPU를 소비하는 로직을 포함한다면 sequence를 활용하기도 합니다. 아래 코드는 앞선 forEach와 결과는 동일하지만, CPU 연산처럼 동작하기 위해 100ms 대기하는 로직을 포함하여 프로그램 수..
아이템 33 - 생성자 대신 팩토리 함수를 사용하라클래스의 인스턴스를 만드는 가장 일반적인 방법은 기본 생성자(primary constructor)를 사용하는 방법입니다. class Shop( val name: String, val isOpen: Boolean,)val shop = Shop(name = "hello", isOpen = true)생성자 외에도 객체를 만들 수 있도록 다양한 생성 패턴(creational pattern)이 존재합니다. 일반적으로 이런 생성 패턴은 객체를 생성자로 직접 생성하지 않고, 별도의 함수를 통해 생성합니다.class Shop( val name: String, val isOpen: Boolean,) // 팩토리 함수fun createOpenShop(..
목표Flow API를 이용한 반응형 데이터 스트림 처리 방법 학습StateFlow와 SharedFlow의 사용법 및 적용 사례실시간 데이터 처리를 위한 코드 예제 실습플로우(Flow)플로우란 비동기적으로 계산해야 할 값의 스트림을 나타냅니다. Flow 인터페이스 자체는 원소들을 모으는 역할을 하며, 플로우의 끝에 도달할 때까지 각 값을 처리합니다. Flow의 유일한 멤버 함수는 collect로, 그 외 함수들은 확장 함수로 정의되어 있습니다. iterator만 멤버 함수로 가지고 있는 Iterable이나 Sequence와 비슷하다고 볼 수 있습니다.그래서 Flow가 뭐야?예를 들어 여러 개의 값을 반환하는 함수가 필요하다고 가정합니다. 한 번에 모든 값을 만들때는 List나 Set과 같은 컬렉션을 사용합..
추상화추상화(abstraction)는 프로그래밍 세계에서 중요한 개념 중 하나입니다. 컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다.즉, 추상화는 복잡성을 숨기기 위해 사용되는 단순한 형식을 의미하며, 대표적으로 사용되는 추상화로는 인터페이스가 있습니다.인터페이스는 클래스라는 복잡한 것에서 메서드와 프로퍼티만 추출해서 간단하게 만들었으므로 클래스의 추상화라고 할 수 있습니다.어떤 대상(객체)에 대한 추상화는 여러 가지가 나올 수 있습니다. 위 사진들은 집을 추상화한 예시 두가지이며, 중점을 두는 대상이 다릅니다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지를 결정해야 합니다.프로그래밍에서의 ..
mac에서 외장 디스크 포맷하기이전에 mac에서 사용할 수 없는 파일 시스템 포맷으로 설정되어 있는 카메라에 넣고 사용하다가, 사진 데이터를 가져오는데 애를 먹었던 기억이 있습니다. 그래서 이번에는 외장 저장 장치를 새로 구매하여 카메라에 넣어 사용하기 전에 먼저 포맷을 진행했습니다. mac에서 외장 디스크 포맷하는 방법에 대해 알아보도록 하겠습니다.먼저, finder를 열어 응용 프로그램 > 유틸리티 폴더의 디스크 유틸리티를 더블클릭합니다.디스크 유틸리티에서는 현재 PC에 마운트되어 있는 디스크들을 확인할 수 있습니다. 왼쪽 탭의 디스크 목록에서 제거하고자 하는 디스크를 선택하고 오른쪽 상단의 지우기 버튼을 클릭합니다.지우기 버튼을 클릭하면, 위와 같은 팝업창이 뜹니다. 이는 디스크 내 파일 시스템 제..
목표멀티스레드 환경에서 코루틴을 활용한 성능 최적화 방법고성능 비동기 프로그래밍을 위한 코루틴 조정 전략성능 측정 및 분석을 통한 최적화 실습일시 중단 함수일시 중단 함수는 코루틴이 아니다일시 중단 함수는 코루틴이 아닌, 일시 중단 지점을 포함할 수 있는 코드의 집합이다.일시 중단 함수는, suspend fun 키워드로 선언된 함수로 함수 내에 일시 중단 지점을 포함할 수 있는 함수입니다. 일시 중단 함수는 일반 함수와 마찬가지로 복잡한 코드들을 구조화하고 재사용할 수 있는 코드의 집합으로 만드는 데 사용됩니다. 일시 중단 함수는 코루틴 내부에서 실행되는 코드의 집합일 뿐, 코루틴이 아닙니다.위 코드를 수행하면, 일시 중단 함수가 순차적으로 호출하여 2초 이상 걸린 것을 확인할 수 있습니다.위 코드에서 ..