아이템 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에서 사용할 수 없는 파일 시스템 포맷으로 설정되어 있는 카메라에 넣고 사용하다가, 사진 데이터를 가져오는데 애를 먹었던 기억이 있습니다. 그래서 이번에는 외장 저장 장치를 새로 구매하여 카메라에 넣어 사용하기 전에 먼저 포맷을 진행했습니다. mac에서 외장 디스크 포맷하는 방법에 대해 알아보도록 하겠습니다.먼저, finder를 열어 응용 프로그램 > 유틸리티 폴더의 디스크 유틸리티를 더블클릭합니다.디스크 유틸리티에서는 현재 PC에 마운트되어 있는 디스크들을 확인할 수 있습니다. 왼쪽 탭의 디스크 목록에서 제거하고자 하는 디스크를 선택하고 오른쪽 상단의 지우기 버튼을 클릭합니다.지우기 버튼을 클릭하면, 위와 같은 팝업창이 뜹니다. 이는 디스크 내 파일 시스템 제..
목표멀티스레드 환경에서 코루틴을 활용한 성능 최적화 방법고성능 비동기 프로그래밍을 위한 코루틴 조정 전략성능 측정 및 분석을 통한 최적화 실습일시 중단 함수일시 중단 함수는 코루틴이 아니다일시 중단 함수는 코루틴이 아닌, 일시 중단 지점을 포함할 수 있는 코드의 집합이다.일시 중단 함수는, suspend fun 키워드로 선언된 함수로 함수 내에 일시 중단 지점을 포함할 수 있는 함수입니다. 일시 중단 함수는 일반 함수와 마찬가지로 복잡한 코드들을 구조화하고 재사용할 수 있는 코드의 집합으로 만드는 데 사용됩니다. 일시 중단 함수는 코루틴 내부에서 실행되는 코드의 집합일 뿐, 코루틴이 아닙니다.위 코드를 수행하면, 일시 중단 함수가 순차적으로 호출하여 2초 이상 걸린 것을 확인할 수 있습니다.위 코드에서 ..
System.out.print를 매 프로젝트마다 각각 구현해야 한다면 피곤한 일이 될 것이다.누군가가 한 번 만들어 놓고, 필요할 때 이를 활용할 수 있게 만든 것이 프로그래밍 언어의 핵심 특징 중 하나인 재사용성이다.재사용성은 큰 힘이 있는 만큼 잘 생각하고 사용해야 한다.아이템 19 - knowldeg를 반복하여 사용하지 말라여러 요소에 비슷한 부분이 있는 경우, 변경이 필요할 때 실수가 발생할 수 있습니다. 이런 부분은 추출하는 것이 좋습니다.다만, Don't Repeat Yourself라는 문장을 엄격하게 지키려고 해서, 비슷해보이는 코드를 모두 추출하려고 해서는 안됩니다.극단적인 것은 언제나 좋지 않으며, 항상 균형이 중요합니다.실용주의 프로그래머 책에서는 Don't Repeat Yourself..
들어가기 전에coroutine 스터디를 진행하면서, 매 실습마다 main()에서 돌게 하기 위해 변경해야 하는 점이 불편했습니다.이에 coroutine용 테스트에 대해 알아보게 되었고, kotlinx-coroutines-test라는 jetbrains에서 제공해주는 테스트 모듈이 있다는 것을 알게되어 해당 내용을 정리해보고자 합니다.kotlinx-coroutines-test프로젝트에 kotlinx-coroutins-test 추가하기dependencies { testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:[자신의 kotlinx-coroutines 버전]'}이 모듈은 테스트를 위한 유틸리티만을 제공하기 때문에, test에서만 사용되도..
목표코루틴 스코프(GlobalScope, coroutineScope, supervisorScope)의 사용법 및 차이점 파악구조화된 동시성에 대한 심도 깊은 이해와 예제 실습코루틴을 활용한 패턴과 모범 사례 공유구조화된 동시성구조화된 동시성(Structured Concurrency)의 원칙이란, 비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측할 수 있게 만드는 원칙입니다.코루틴에서는 구조화된 동시성의 원칙을 사용해 비동기 작업인 코루틴을 부모-자식 관계로 구조화하여 보다 안전하게 관리될 수 있도록 합니다.코루틴을 부모-자식 관계로 만드는 방법은 아래 예시처럼, 부모 코루틴을 만드는 코루틴 빌더의 람다식 내에 새로운 코루틴 빌더를 호출하면 됩니다. 구조화된 코루틴 특징구조화된 코루틴의..