전체 글

전체 글

    Flutter - extends, implements, with, mixin

    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 추상화

    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

    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

    Android - CustomView

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

    Android - Image Preloading Trouble Shooting

    Android - Image Preloading Trouble Shooting

    (Blinking Issue 발생) 360도 차량 이미지를 보여주는 기능 요구사항으로 인해, 이미지 60장을 한번에 불러와서 보여주는 프리로딩 기능을 구현하던 중 이미지 몇장이 깜박 거리는 현상이 발생했다. Coil의 Image Loader를 활용해 프리로딩 기능을 구현하던 중 이미지가 깜박 거리는 문제가 발생했다. 문제의 원인을 분석하기 위해 Log를 찍어 봤지만 서버에서 이미지 60장을 다 불러오고 프로그레스 바가 끝나기 때문에 문제가 없어 보였지만 여전히 이미지가 깜박거리는 현상이 발생했다. (문제 공유 및 페어프로그래밍을 통한 원인 분석) 데일리 스크럼때 해당 이슈를 공유하고 나서 혼자 문제 원인을 분석하던 중 프론트엔드 팀원분이 오셔서 함께 페어 프로그래밍 해보자고 제안을 하셨고 절박했던 나는 ..