본문 바로가기

728x90

Develop

(21)
[Design Pattern] 인터프리터 (Interpreter) 패턴 1. 개요 인터프리터 디자인 패턴 (Interpreter Design Pattern)은 주어진 언어나 문법에 따라 표현식을 해석하고 처리하는 패턴이다. 2. 상황 언어 해석기, 컴파일러, 수식 계산기 등을 구현하고자 할 때 3. 다이어그램 3.1. 설명 Expression 표현식을 해석하기 위한 인터페이스를 정의한다. TerminalExpression Expression의 구현 클래스이다. 더 이상 분해되지 않는 단일 표현식을 나타낸다. 주로 터미널 기호, 변수, 상수 등으로 구성된다. NonterminalExpression Expression의 구현 클래스이다. 여러 개의 하위 표현식으로 구성된 표현식을 나타낸다. 주로 문법 규칙을 나타내고, 문장, 조건식 등을 해석하는 역할을 한다. Context 해..
[Design Pattern] 디자인 패턴 (Design Patterns) 1. GoF Design Patterns 생성 패턴구조 패턴행위 패턴클래스Factory MethodAdaptorInterpreter, Template객체Abstract Factory, Builder, Prototype, SingletonBridge, Composite, Decorator, Façade, Flyweight, ProxyChain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Visitor 클래스객체생성패턴Factory MethodAbstract Factory, Builder, Prototype, Singleton구조패턴AdaptorBridge, Composite, Decorator, Faç..
[Design Pattern] 어댑터 (Adaptor) 패턴 1. 개요어댑터 디자인 패턴 (Adaptor Design Pattern)은 서로 다른 인터페이스를 implements 하는 클래스를 함께 동작하도록 하는 패턴이다.2. 상황서로 다른 두 인터페이스가 유사한 method 를 가질 때기존 인터페이스를 변경할 수 없을 때3. 다이어그램3.1. 설명Target과 Adaptor가 유사한 method 를 가지고 있고,Adaptee를 수정하기 힘든 상황이라면Adaptor 디자인 패턴을 사용할 수 있다.4. 구현interface Target { void method(); }interface Adaptee { void similarMethod(); }class Adaptor implements Target { private final Adaptee adaptee; p..
[Flutter] 순환 캐러셀 (Circular Carousel) 위젯 만들기 1. 개요 1.1. 캐러셀 (Carousel) 캐러셀 (Carousel) 은 회전목마라는 뜻으로 일련의 위젯을 슬라이드 쇼 형태로 나열해놓은 위젯을 가리킨다. 1.1.1. 일반 캐러셀 일반 캐러셀은 위와 같이 단일 위젯이 직선 위에서 이동하는 특징이 있다. 1.1.2. 순환 캐러셀 순환 캐러셀은 일반 캐러셀과 달리 단일 위젯이 타원을 그리면서 회전한다. 1.2. 순환 캐러셀의 필요 Flutter 로 개발 중인 어플리케이션 (Fitween) 이 있는데, 디자이너로부터 다음과 같은 위젯의 구현을 요청받았다. 1.3. 구현 관련 패키지가 있는지 확인해보았지만, 굉장히 적고, 존재하는 것들도 마음에 들지 않았다. 적당한 꼼수를 발휘해서, 정적 이미지와 동적 이미지 (gif) 를 미리 준비하고, 좌우 드래그 제스..
[Flutter] 토스 스타일의 Pressable 커스텀 위젯 만들기 1. 개요 Flutter 의 대부분의 누를 수 있는 위젯은 InkWell animation 이 채택되었다. 위젯을 탭하면 위젯 색상이 highlight 되고 탭 위치부터 원이 splash 되어 퍼져나간다. TextButton, IconButton, InkWell 위젯의 예시 위 gif 의 코드는 아래와 같다. import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( debugShowChecke..

728x90