책 썸네일형 리스트형 Jetpack Compose Internals - 1장 함수들 1장 Composable 함수들 멱등성을 통해, composition 특정한 순서가 동일하다고 보장한다. 컴포저블 함수는 ui에 대한 순서를 보장하지 않는다. SideEffect는 리컴포지션을 통해 여러번 호출이 될 수 있는상황이 있어서, 여러번 호출 될 수 있음. 기본적으로 메모라이제이션을 통해 컴포지션을 id를 통해 기억하고, 리스트에서 상단에 뷰가 들어와 id가 변경될경우, 리컴포지션시 id가 변경된것으로 인식. 따라서 key값 설정을 통해 동일한 key값을 유지시켜줘야한다. 함수의 색깔론에 의해, composable 함수나, suspend 함수내 에서만 호출 된다. 내부적으로 inline 함수를 통해 실제 구현체가 실제 내부에 있는것처럼 호출 가능. Composable () { For() { .. 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.. ch.10 상속과 코드 재사용 추상화에 의존하자. NightlyDiscountPhone의 가장 큰 문제점은 Phone에 강하게 결합돼 있다. 즉 Phone이 변경될 경우 함께 변경될 가능성이 높다. 이 문제를 해결하는 가장 일반적인 방법은 자식 클래스가 부모클래스의 구현이 아닌 추상화에 의존하도록 만드는 것이다. 상속을 도입할 때 따르는 두가지 원칙 두 메서드가 유사하게 보인다면 차이점을 메서드로 추출하라. 메서드 추출을 통해 두 메서드를 동일한 형태로 보이도록 만들 수 있다. 부모 클래스의 코드를 하위로 내리지 말고 자식 클래스의 코드를 상위로 올려라. 부모 클래스의 구체적인 메서드를 자식 클래스로 내리는 것보다 자식 클래스의 추상적인 메서드를 부모 클래스로 올리는 것이 재사용성과 응집도 측면에서 더 뛰어난 결과를 얻을 수 있다. .. ch.09 유연한 설계 03. 의존성 주입 외부로 부터 독립적인 객체가 인스턴스를 생성한 후 이를 전달해서 의존성을 해결하는 방법을 의존성 주입이라고한다. 생성자 주입 : 객체를 생성하는 시점에 생성자를 통한 의존성 해결 setter 주입 : 객체 생성 후 setter 매서드를 통한 의존성 해결 메세드 주입 : 메서드 실행 시 인자를 이용한 의존성 해결 Movie movie = new Movie ("아바타", new 객체) 위와 같은 예시가 생성자 주입 movie.setName("아바타") 위와 같은 예시 setter 주입 movie.calculateDiscountAmount(screening, new AmountDiscountPolicy(....)) 위와 같은 예시가 메서드 주입 사실 위와 같은 메서드 의존성 주입의 한 종류.. DI(Dependency Injection) 와 IOC(inversion of control) 안녕하세요 남갯입니다 github.com/namget/object_study 오브젝트 5장 일단 오브젝트 스터디하는 내용의 과제로 오늘은 DI와 IOC를 알아보고 정리하는 시간을 가져보려고 합니다. DI 의존성 주입 의존성 주입이란? 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. [위키 백과] 의존성 주입 ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85 의존성 주입 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존.. 이전 1 2 3 4 ··· 6 다음