전체 글
컴포지션 패턴 (Composition Pattern)
컴포지션 패턴은 상속 대신 여러 객체를 조합해 기능을 구성하는 방식이다. "is-a(상속)" 관계보다는 "has-a" (구성) 관계를 통해 객체를 구성하자. 상속 기반 구조의 한계 class Bird { void fly() { System.out.println("I can fly"); }}class Penguin extends Bird { // 펭귄은 날 수 없는데도 fly()를 상속 받음} 문제: Penguin은 Bird를 상속받았지만, 실제로는 날 수 없는 동물입니다.이처럼 상속은 계층 구조가 고정되어 있어 잘못된 기능을 포함시킬 가능성이 있습니다.컴포지션으로 해결interface FlyBehavior { void fly();}class CanFly implements FlyBeh..

Flutter - extends, implements, with, mixin
Flutter를 공부하다 다양한 상속 관계 키워드를 보게 되었다. extends다중 상속 불가능부모 클래스의 메서드를 모두 구현하지 않아도 된다.class Animal { void makeSound() { print('Some sound'); }}class Dog extends Animal { void bark() { print('Woof!'); }}void main() { var dog = Dog(); dog.makeSound(); // 상위 클래스의 메서드 호출 dog.bark(); // 하위 클래스의 메서드 호출} implements다중 상속 가능모든 부모 클래스의 메서드를 오버라이딩해서 구현 해주어야 한다.abstract class Vehicle { void drive()..
Flutter - Scaffold
Scaffold 위젯은 앱의 기본적인 시각적 레이아웃 구조를 제공하는데 중요한 요소 중 하나이다.Scaffold는 Material Design 가이드라인을 따르며 대표적인 구성 요소는 아래와 같다.AppBar (상단 앱 바)BottomNavigationBar (하단 탭 바)Drawer (메뉴)body (본문간단한 예제import 'package:flutter/material.dart';void main() { runApp(MyApp());}class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold..

Android - UseCase 추상화
사이드 프로젝트를 진행하면서 Domain Layer의 비지니스 로직을 수행하는 각 UseCase의 리팩토링 필요성을 느끼게 되었다. 위 사진에 보이는 UseCase들은 API 응답을 받아 데이터 스트림을 방출하는 역할들을 하는데 개발을 하다보니 invoke 메서드의 코드들이 전부 중복되는 문제가 있었다. 아래 두 코드에서 확인할 수 있듯이 단순히 결과를 받아와 데이터 스트림을 방출하는 역할만 수행한다. 문제가 모든 UseCase 코드들이 같은 구조로 되어 있다. class GetToys @Inject constructor( private val toyLibraryRepo: ToyLibraryRepository ) { operator fun invoke(): Flow = channelFlow { toyLi..

JNI - Java Native Interface
Java Native Interface란? 자바에서 C, C++로 작성된 모듈을 호출할 수 있게 해주는 기능입니다. 자바는 JVM 위에서 실행되기 때문에 특정 운영체제에 종속되지 않고 사용할 수 있다는 장점이 있습니다. 하지만 반대로 JVM이 운영체제의 모든 기능을 JVM이 담지 못한다는 단점이 있습니다. 이러한 단점으로 인해 특정 기능들은 Java 언어로 구현을 하지 못하는 경우가 있습니다. 예를 들어) 성능 최적화, System call, 특정 하드웨어 장치 제어 이렇게 Java 언어로 특정 기능을 구현하지 못하는 경우 C, C++로 고유 기능을 만들어 Java 메서드와 연결해주는 역할을 합니다. 그럼 함께 예제 코드를 봐볼까요? 1단계) Java 클래스 생성 및 네이티브 메서드 선언 public c..

Android - CustomView
커스텀 뷰란? 기본적으로 제공되는 뷰 컴포넌트를 사용자의 필요에 맞게 확장하거나 새로 정의하여 사용자 인터페이스를 정의하는 방법이다. 언제 사용되는 걸까? 기본적인 뷰들로는 표현하기 어려운 복잡한 사용자 인터페이스를 구현할 때 (복잡한 애니메이션 효과, 정밀한 조작이 필요할 때) 안드로이드 표준 뷰에서 제공하지 않는 사용자 인터렉션을 구현할 필요가 있을 때 ex) 멀티 터치를 사용하는 그림판, 복잡한 제스처를 인식하는 인터페이스를 구현할 때 기존 뷰에 없는 기능을 추가하거나 기존 뷰의 동작 방식을 변경해야할 때 ex) Buttom에 추가적인 그래픽 효과 적용, TextView에 특별한 텍스트 렌더링 로직을 추가하는 경우 일반적인 UI 요소를 여러 프로젝트에서 재사용하려는 경우 CustomView를 만들어..