본문 바로가기

IT

[flow] coroutine flow 문서 읽기 -2 안녕하세요 남갯입니다. https://developer.android.com/kotlin/flow/stateflow-and-sharedflow?hl=ko StateFlow 및 SharedFlow | Android 개발자 | Android Developers StateFlow 및 SharedFlow StateFlow와 SharedFlow는 흐름에서 최적으로 상태 업데이트를 내보내고 여러 소비자에게 값을 내보낼 수 있는 Flow API입니다. StateFlow StateFlow는 현재 상태와 새로운 상태 업데이트를 developer.android.com StateFlow StateFlow는 현재상태와 새로운 상태를 업데이트 수집하는 관찰 가능한 상태 홀더 flow입니다. 상태를 업데이트를 하기 위해서는 Mu..
[flow] coroutine flow 문서 읽기 -1 안녕하세요 남갯입니다. 오늘은 Coroutine flow 문서를 읽어볼 예정입니다. https://developer.android.com/kotlin/flow?hl=ko Flow란? flow는 기존 단일값만 반환하는 정지함수와는 달리 여러값을 순차적으로 보낼수 있는 유형입니다. 기존 Rx를 사용해보셨다면 비슷한 개념으로 이해할 수 있을것 같은데요. 코루틴기반으로 빌드되며, 여러값을 제공할 수 있는 데이터스트림의 개념입니다. Flow의 데이터 스트림 Flow의 데이터 스트림에는 3가지의 항목이 존재합니다. 1. 생산자 : 스트림에 추가되는 데이터를 생산합니다. 코루틴 덕분에 흐름을 비동기적으로 데이터가 생산 가능 2. 중개자(선택사항) : 스트림에 내보내는 값을 수정 가능 3. 소비자 : 스트림에서 받아온..
[안드로이드] - Compose 문서 읽어보기 - 2 안녕하세요 남갯입니다 오늘은 컴포즈 2번째 문서 부분 정리입니다. 컴포지션의 생명주기 컴포지션은 초기 컴포지션을 통해서만 생성되고 리컴포지션을 통해서만 업데이트될 수 있습니다. 컴포지션을 수정하는 유일한 방법은 리컴포지션을 통하는 것입니다. 컴포저블이 여러 번 호출되면 컴포지션에 여러 인스턴스가 배치됩니다. 컴퍼지션의 각 호출에는 자체 수명 주기가 있습니다. @Composable fun MyComposable() { Column { Text("Hello") Text("World") } } 컴포지션 내 컴포저블 리컴포지션 시 컴포저블이 이전 컴포지션 시 호출한 것과 다른 컴포저블을 호출하는 경우 Compose는 호출되거나 호출되지 않은 컴포저블을 식별하며 두 컴포지션 모두에서 호출된 컴포저블의 경우 입력이..
[안드로이드] - Compose 문서 읽어보기 -1 안녕하세요 남갯입니다 오늘은 Compose 문서 읽어보면서 내용을 정리 해보려고 합니다. https://developer.android.com/jetpack/compose/state?hl=ko 명령형 선언형의 차이 선언형 ViewB( color : red, child: viewC() ) 명령형 View = b = new View() b.setColor(Red) b.clearChildren() ViewC c3 = new ViewC() b.add(c3) 명령형에서 findViewById를 통해 트리를 탐색하고 뷰를 가져와서 setText() , addChild등과 같이 메서드를 호출해서 노드를 변경하게 되는데, 뷰를 수동으로 조작하게 되면 오류가 발생할 가능성이 커지고 여러 데이터를 표시하는경우 뷰를 업데이..
ch.15 프레임워크와 코드 재사용 코드 재사용 대 설계 재사용 디자인패턴은 프로그래밍 언어에 독립적으로 재사용 가능한 설계 아이디어를 제공하는 것을 목적으로 한다. 따라서 언어에 종속적인 구현 코드를 정의하지 않기 때문에 프로그래밍 언어의 특성에 맞춰 가공해야 하고 매번 구현 코드를 재작성해야하는 단점이 있다. 재사용 관점에서 설계 재사용보다 더 좋은 방법은 코드 재사용이다. 컴포넌트를 조립해서 애플리케이션을 구축하는 방법을 추구해왔다. 해당 아이디어는 이상적이지만 실제로 작용하는 과정에서 현실적이지 않다라는 사실이 드러났다. 프레임워크란 추상 클래스나 인터페이스를 정의하고 인스턴스 사이의 상호작용을 통해 시스템 전체 혹은 일부를 구현해 놓은 재사용 가능한 설계. 또는 애플리케이션 개발자가 현재의 요구사항에 맞게 커스터마이징할 수 있는 ..
ch.13 서브클래싱과 서브타이핑 04. 리스코프 치환 원칙 한마디로 정리하면 서브타입은 그것의 기반 타입에 대해 대체 가능해야 한다. 즉 리스코프 치환 원칙에 따르면 자식 클래스가 부모클래스와 행동 호환성을 유지함으로써 부모 클래스를 대체할 수 있도록 구현된 상속 관계만을 서브타이핑이라고 불러야한다. 직사각형은 사각형이다. 하지만 직사각형은 정사각형이 아닐 수 있다. 사실 직사각형과 정사각형의 상속 관계는 리스코프 치환 원칙을 위반하는 고전적인 사례중 하나다. public class Rectangle { private int x, y, width, height; public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width..
ch 12. 다형성 04. 동적 메서드 탐색과 다형성 객체 지향 시스템은 다음 규칙에 따라 실행할 메서드를 선택한다. 메세지를 수신한 객체는 먼저 자신을 생성한 클래스에 적합한 메서드가 존재하는지 검사하고 존재하면 실행 메세드를 찾기 못했다면 부모 클래스에서 탐색, 이 과정은 적합한 메서드를 찾을때 까지 상속 계층을 따라 올라가며 계속된다. 상속 계층의 가장 최상위 클래스에도 메세드가 없다면 예외를 발생시키며 탐색을 중단한다. self 참조 객체가 메세지를 수신하면 컴파일러는 self 참조라는 임시 변수를 자동으로 생성한 후 메세지를 수신한 객체를 가리키도록 설정한다. 동적 메세드 탐색은 self가 가리키는 객체의 클래스에서 시작해서 상속 계층의 역방향으로 이뤄지며 메세드 탐색은 종료되는 순간 자동으로 소멸된다. 메세드 탐..
ch11. 합성과 유연한 설계 04. 믹스인 상속을 사용한다면 다른 클래스를 간편하게 재사용하고 점진적으로 확장할 수 있지만 부모 클래스와 자식 클래스와 강하게 결합되기 떄문에 수정과 확장에 취약한 설계를 낳게 된다. 믹스인은 객체를 생성할 때 코드 일부를 클래스 안에 섞어 넣어 재사용하는 기법을 가르키는 용어다. 합성이 실행 시점에 객체를 조합하는 재사용 방법이라면 믹스인은 컴파일 시점에 필요한 코드조각을 조합하는 재사용 방법 기본 정책 구현하기 abstract class BasicRatePolicy { def calculateFee(phone: Phone): Money = phone.calls.map(calculateCallFee(_)).reduce(_ + _) protected def calculateCallFee(call: C..