LetSwift 2023에서 발표한 객체-함수형 아키텍처 만들기 자료 공유합니다. 객체지향과 함수형 프로그래밍을 조합하여, MVVM 기반으로 아키텍처를 설계해보았습니다. 선언적 프로그래밍을 통한 런타임의 안정성과 가독성, 객체지향을 통한 책임 분배와 설계에 대한 관점에서 보면 좋을 것 같습니다.
감사합니다.
아키텍처 코드 : https://lnkd.in/ghRVR_SS
적용 데모 : https://lnkd.in/gGfPqT85
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. It allows JavaScript to be run on the server-side. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, especially for data-intensive real-time applications that run across distributed devices. It has a large and active community that supports it with packages for building all sorts of server-side applications and web services.
A walkthrough the main principles to reach solid NodeJS Applications with TypeScript language, Jest as Test Runner and NestJS as framework for structure.
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. It allows JavaScript to be run on the server-side. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, especially for data-intensive real-time applications that run across distributed devices. It has a large and active community that supports it with packages for building all sorts of server-side applications and web services.
A walkthrough the main principles to reach solid NodeJS Applications with TypeScript language, Jest as Test Runner and NestJS as framework for structure.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise boosts blood flow, releases endorphins, and promotes changes in the brain which help enhance one's emotional well-being and mental clarity.
Introduction to Spring's Dependency InjectionRichard Paul
This document provides an overview of dependency injection in Spring. It defines dependency injection as a form of inversion of control where objects are provided to classes rather than having classes create their own dependencies. It discusses the benefits of dependency injection such as loose coupling, easy switching of implementations, and enhanced testability. It also compares constructor injection and setter injection and describes how to configure dependency injection using XML, annotations, and Java configuration in Spring.
Vue.js is a progressive JavaScript framework that focuses on building user interfaces and is used for single-page applications. It was created by Evan You and released in 2014. Vue.js uses declarative templates and reactive data binding to render the view layer for an application. Templates in Vue use HTML-based syntax with directives prefixed with v- to dynamically bind expression results. Common directives include v-bind, v-if, and v-for. Vue.js applications can be built with its core library or integrated with other libraries and frameworks.
What is Node.js | Node.js Tutorial for Beginners | Node.js Modules | Node.js ...Edureka!
This Edureka "What is Node.js" tutorial will help you to learn the Node.js fundamentals and how to create an application in Node.js. Node.js is an open-source, cross-platform JavaScript runtime environment for developing a diverse variety of server tools and applications. Below are the topics covered in this tutorial:
1) Client Server Architecture
2) Limitations of Multi – Threaded Model
3) What is Node.js?
4) Features of Node.js
5) Node.js Installation
6) Blocking Vs. Non – Blocking I/O
7) Creating Node.js Program
8) Node.js Modules
Spring beans can be singleton or prototype. A bean definition defines a bean for Spring to manage including its class, id, and dependencies. Beans are created based on their dependencies with singletons created eagerly and prototypes created lazily. Bean properties are used to inject dependencies and can reference other beans. Beans without ids are anonymous while inner beans define dependencies inline. Init methods run after dependencies are loaded and values can be injected besides other beans. Abstract beans allow reusable bean definitions.
Vue.JS is a progressive JavaScript framework created by Evan You, formerly of Google. It was first released in 2014 and is growing in popularity as an alternative to AngularJS and React. Key features include declarative rendering, dependency tracking for automatic re-renders, and directives for DOM manipulation. Developers can get started by adding Vue to an HTML page or with single file components using tools like Webpack. The documentation provides many examples for building interfaces with directives, conditional rendering, forms, and more. While still smaller than communities for Angular and React, Vue has growing support from companies and an active ecosystem of libraries.
Hibernate is an object-relational mapping tool that allows developers to more easily write applications that interact with relational databases. It does this by allowing developers to map Java classes to database tables and columns, so that developers can interact with data through Java objects rather than directly with SQL statements. Hibernate handles the conversion between Java objects and database rows behind the scenes. Some key benefits of using Hibernate include faster data retrieval, avoiding manual database connection management, and easier handling of database schema changes.
This document introduces Jest, a JavaScript testing framework. It discusses why Jest is useful, including that it runs tests in parallel sandboxed environments, provides a fast feedback loop with rich logging and error outputs, and acts as a one-stop shop for testing. The document also covers anatomy of Jest tests, how to use mocking, tips like resetting modules between tests and snapshot testing, and references for additional Jest resources.
Self-issued OpenID Provider_OpenID Foundation Virtual Workshop Kristina Yasuda
Presentation I gave on Self-Issued OpenID Provider during the second OpenID Foundation Virtual Workshop covering:
1. What is Self-Issued OpenID Provider (SIOP) ?
2. SIOP Requirements (draft)
3. Initial discussion points deep-dive
Self-Issued OpenID Providers are personal OpenID Providers that issue self-signed ID Tokens, enabling portability of the identities among providers
1. The document discusses several popular JavaScript frameworks including AngularJS, Node.js, Agility.js, and Backbone.js. It provides overviews of each framework and their architectures.
2. AngularJS is an open-source framework maintained by Google that assists with single-page applications. Node.js is a platform for scalable server-side applications. Agility.js is a lightweight MVC library, and Backbone.js helps organize code for single-page apps.
3. Each framework has advantages like reusability, testability and being lightweight, though some have disadvantages like learning curves or added complexity. The document provides examples of applications that use each framework.
This document provides an overview of AngularJS, including its features, directives, filters, data binding, views, controllers, modules, and factories. It discusses key AngularJS concepts like single page applications, directives like ng-repeat and ng-model, filters, creating controllers within modules, and using factories. It also covers creating custom directives, dependency injection with $inject, and the differences between values, services, factories and providers in AngularJS.
The document discusses several Swift Evolution proposals including:
- Implicit returns from single-expression functions and closures which allows omitting the return keyword from functions/closures with a single expression.
- Opaque result types which allow abstracting away types using some to preserve type identity and information hiding.
- The Identifiable protocol which provides a standard way to identify values based on an ID property to enable change tracking in SwiftUI lists and other APIs.
- Property wrappers which define custom attributes to encapsulate property storage and behavior, eliminating boilerplate and providing patterns to define properties like @State, @Binding, @Published etc.
The .NET Framework is a development platform that provides a common language runtime and class libraries. It allows programming languages to interact seamlessly by defining a common type system and language specification. .NET languages compile to intermediate language code that gets compiled to machine code by the just-in-time compiler. The class libraries provide basic functionality for tasks like data access, XML, windows forms, web development and web services. Visual Studio .NET is an IDE that supports building applications on the .NET platform.
This document introduces TypeScript, a typed superset of JavaScript that compiles to plain JavaScript. It discusses TypeScript's installation, why it is used, main features like type annotations and classes, comparisons to alternatives like CoffeeScript and Dart, companies that use TypeScript, and concludes that TypeScript allows for safer, more modular code while following the ECMAScript specification. Key benefits are highlighted as high value with low cost over JavaScript, while potential cons are the need to still understand some JavaScript quirks and current compiler speed.
This document provides an overview of Angular's template-driven and model-driven forms. It describes the key directives, classes, and interfaces used for building forms in Angular. It explains how to add validation, track form state, create custom validators, and tie forms to components and templates. The document also demonstrates how to set up two-way data binding between forms and models using directives like ngModel, ngFormControl, and ngForm.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive functioning. Exercise boosts blood flow, releases endorphins, and promotes changes in the brain which help enhance one's emotional well-being and mental clarity.
Introduction to Spring's Dependency InjectionRichard Paul
This document provides an overview of dependency injection in Spring. It defines dependency injection as a form of inversion of control where objects are provided to classes rather than having classes create their own dependencies. It discusses the benefits of dependency injection such as loose coupling, easy switching of implementations, and enhanced testability. It also compares constructor injection and setter injection and describes how to configure dependency injection using XML, annotations, and Java configuration in Spring.
Vue.js is a progressive JavaScript framework that focuses on building user interfaces and is used for single-page applications. It was created by Evan You and released in 2014. Vue.js uses declarative templates and reactive data binding to render the view layer for an application. Templates in Vue use HTML-based syntax with directives prefixed with v- to dynamically bind expression results. Common directives include v-bind, v-if, and v-for. Vue.js applications can be built with its core library or integrated with other libraries and frameworks.
What is Node.js | Node.js Tutorial for Beginners | Node.js Modules | Node.js ...Edureka!
This Edureka "What is Node.js" tutorial will help you to learn the Node.js fundamentals and how to create an application in Node.js. Node.js is an open-source, cross-platform JavaScript runtime environment for developing a diverse variety of server tools and applications. Below are the topics covered in this tutorial:
1) Client Server Architecture
2) Limitations of Multi – Threaded Model
3) What is Node.js?
4) Features of Node.js
5) Node.js Installation
6) Blocking Vs. Non – Blocking I/O
7) Creating Node.js Program
8) Node.js Modules
Spring beans can be singleton or prototype. A bean definition defines a bean for Spring to manage including its class, id, and dependencies. Beans are created based on their dependencies with singletons created eagerly and prototypes created lazily. Bean properties are used to inject dependencies and can reference other beans. Beans without ids are anonymous while inner beans define dependencies inline. Init methods run after dependencies are loaded and values can be injected besides other beans. Abstract beans allow reusable bean definitions.
Vue.JS is a progressive JavaScript framework created by Evan You, formerly of Google. It was first released in 2014 and is growing in popularity as an alternative to AngularJS and React. Key features include declarative rendering, dependency tracking for automatic re-renders, and directives for DOM manipulation. Developers can get started by adding Vue to an HTML page or with single file components using tools like Webpack. The documentation provides many examples for building interfaces with directives, conditional rendering, forms, and more. While still smaller than communities for Angular and React, Vue has growing support from companies and an active ecosystem of libraries.
Hibernate is an object-relational mapping tool that allows developers to more easily write applications that interact with relational databases. It does this by allowing developers to map Java classes to database tables and columns, so that developers can interact with data through Java objects rather than directly with SQL statements. Hibernate handles the conversion between Java objects and database rows behind the scenes. Some key benefits of using Hibernate include faster data retrieval, avoiding manual database connection management, and easier handling of database schema changes.
This document introduces Jest, a JavaScript testing framework. It discusses why Jest is useful, including that it runs tests in parallel sandboxed environments, provides a fast feedback loop with rich logging and error outputs, and acts as a one-stop shop for testing. The document also covers anatomy of Jest tests, how to use mocking, tips like resetting modules between tests and snapshot testing, and references for additional Jest resources.
Self-issued OpenID Provider_OpenID Foundation Virtual Workshop Kristina Yasuda
Presentation I gave on Self-Issued OpenID Provider during the second OpenID Foundation Virtual Workshop covering:
1. What is Self-Issued OpenID Provider (SIOP) ?
2. SIOP Requirements (draft)
3. Initial discussion points deep-dive
Self-Issued OpenID Providers are personal OpenID Providers that issue self-signed ID Tokens, enabling portability of the identities among providers
1. The document discusses several popular JavaScript frameworks including AngularJS, Node.js, Agility.js, and Backbone.js. It provides overviews of each framework and their architectures.
2. AngularJS is an open-source framework maintained by Google that assists with single-page applications. Node.js is a platform for scalable server-side applications. Agility.js is a lightweight MVC library, and Backbone.js helps organize code for single-page apps.
3. Each framework has advantages like reusability, testability and being lightweight, though some have disadvantages like learning curves or added complexity. The document provides examples of applications that use each framework.
This document provides an overview of AngularJS, including its features, directives, filters, data binding, views, controllers, modules, and factories. It discusses key AngularJS concepts like single page applications, directives like ng-repeat and ng-model, filters, creating controllers within modules, and using factories. It also covers creating custom directives, dependency injection with $inject, and the differences between values, services, factories and providers in AngularJS.
The document discusses several Swift Evolution proposals including:
- Implicit returns from single-expression functions and closures which allows omitting the return keyword from functions/closures with a single expression.
- Opaque result types which allow abstracting away types using some to preserve type identity and information hiding.
- The Identifiable protocol which provides a standard way to identify values based on an ID property to enable change tracking in SwiftUI lists and other APIs.
- Property wrappers which define custom attributes to encapsulate property storage and behavior, eliminating boilerplate and providing patterns to define properties like @State, @Binding, @Published etc.
The .NET Framework is a development platform that provides a common language runtime and class libraries. It allows programming languages to interact seamlessly by defining a common type system and language specification. .NET languages compile to intermediate language code that gets compiled to machine code by the just-in-time compiler. The class libraries provide basic functionality for tasks like data access, XML, windows forms, web development and web services. Visual Studio .NET is an IDE that supports building applications on the .NET platform.
This document introduces TypeScript, a typed superset of JavaScript that compiles to plain JavaScript. It discusses TypeScript's installation, why it is used, main features like type annotations and classes, comparisons to alternatives like CoffeeScript and Dart, companies that use TypeScript, and concludes that TypeScript allows for safer, more modular code while following the ECMAScript specification. Key benefits are highlighted as high value with low cost over JavaScript, while potential cons are the need to still understand some JavaScript quirks and current compiler speed.
This document provides an overview of Angular's template-driven and model-driven forms. It describes the key directives, classes, and interfaces used for building forms in Angular. It explains how to add validation, track form state, create custom validators, and tie forms to components and templates. The document also demonstrates how to set up two-way data binding between forms and models using directives like ngModel, ngFormControl, and ngForm.
점점 더 복잡해 지는 UI, 특히 RecyclerView나 Pager같은 Adapter가 필요한 뷰들은 군더더기가 많다. 이러한 뷰들을 어떻게 데이터로만 표현할 수 있을까?
- 발표 행사 : DroidKnights 2021
- 원본 Google Slides Link
https://docs.google.com/presentation/d/1pAMlL5vZZXCkei3MXCnb1yq8vCIrJA_95PmD7lu0O1E/edit?usp=sharing
- 발표 영상 Link
https://youtu.be/mqY3GWid7ug
- Antonio Github Link
https://github.com/naverz/Antonio
(원본 Google Slides로 보시는 것을 추천드립니다.)
파울러는 2004년의 글에서 제어의 어떤 측면이 역행되는 것인지에 대한 의문을 제기하고 의존하는 객체를 역행적으로 취득하는 것이라는 결론을 내렸다. 그는 그와 같은 정의에 기초하여 제어 역행이라는 용어에 좀 더 참신한 ‘의존성주입(DI,dependency injection)’이라는 이름을 지어줬다.
모든 어플리케이션은 비즈니스 로직을 수행하기 위해 서로 협업하는 둘 또는 그 이상의 클래스들로 이뤄진다. 전통적으로 각 객체는 협업 할 객체의 참조를 취득해야 하는 책임이 있다.
이것이 의존성이다. 이는 결합도가 높으며 테스트하기 어려운 코드를 만들어낸다.
IoC를 적용함으로써 객체들은 시스템 내의 각 객체를 조정하는 어떤 외부의 존재에 의해 생성시점에서 의존성을 부여 받는데, 의존성이 객체로 주입(inject)된다는 말이다. 따라서 IoC는 한 객체가 협업해야 하는 다른 객체의 참조를 취득하는 방법에 대한 제어의 역행이라는 의미를 갖는다.
일반적으로 IoC는 의존성주입(DI), 의존성룩업(DL) 두 개의 하위부류로 나눌 수 있으며, 일반적으로 DI를 이야기 할 때는 IoC를 가리키지만 IoC를 이야기할 때는 DI를 가리키는 것은아니다. DI도 여러 종류 (세터주입,생성자주입,메소드주입)가 있지만 DL의 경우도 의존성 풀과 컨텍스트화된 의존성룩업(CDL) 두 종류가 있다.
Citrine is native mobile framework.
▶ About Citrine
- It’s a component based structure and mobile app development platform with Web
technologies (XML(MOML), Java Script)
▶ Feature of Citrine
- Object Oriented Approach
This approach solves inefficiency for mobile app development through object oriented
approaches using MOML (Mobile Object Markup Language)
- Simple functional definition
This defines complicated functions by abstracting them matched with actual usage.
- Independent development
This independently separates library developers from application developments and
implements a base to integrate them easily.
- Component based structure
It provides a base by which services developed by service providers are integrated
with other applications.
RxMVVM-DataCenter is iOS app architecture to remove dependencies among ViewControllers. If you see the result which is made by using RxMVVM-DataCenter at https://github.com/skyfe79/RxGitSearch. You can know there is no dependencies among ViewControllers and how to use Rx techniques.
RxMVVM-DataCenter 은 어떻게 하면 의존성을 제거할 수 있을까에 대한 고민에서 시작된 프로젝트입니다. RxGitSearch라는 작은 예제를 만들어서 ViewController간에 의존성을 제거하였고 Rx를 사용하여 앱을 유연하게 변화에 빠르게 대응할 수 있도록 구현하였습니다.
Similar to [LetSwift 2023] 객체지향-함수형 아키텍처 직접 만들기 (20)
38. Make your own architecture
직접 만들어보기
ViewModel
ViewController
View
Data / Network
39. Make your own architecture
직접 만들어보기
ViewModel
ViewController
Data / Network
View / Interactor
UI 표시 및 상호 작용
40. Make your own architecture
직접 만들어보기
ViewModel
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
41. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
42. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
43. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
48. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
49. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
50. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
52. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
53. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
54. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
55. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
58. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
59. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
61. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
62. Make your own architecture
직접 만들어보기
ViewModel
Data
fl
ow 가시화 및 관리
ViewController
View bind 및 lifecycle
View / Interactor
UI 표시 및 상호 작용
Data / Network
비동기적인 데이터 처리
84. • Object Oriented Programming
• Design pattern
• Protocol Oriented Programming
• Pure function
• High-order function - First class
function
• Functor / Monad
• Result / Optional - Either
• Combine
• Async task - GCD / Actor
85. • Object Oriented Programming
• Design pattern
• Protocol Oriented Programming
• Pure function
• High-order function - First class
function
• Functor / Monad
• Result / Optional - Either
• Combine
• Async task - GCD / Actor
86. • Object Oriented Programming
• Design pattern
• Protocol Oriented Programming
• Pure function
• High-order function - First class
function
• Functor / Monad
• Result / Optional - Either
• Combine
• Async task - GCD / Actor
87. • Object Oriented Programming
• Design pattern
• Protocol Oriented Programming
• Pure function
• High-order function - First class
function
• Functor / Monad
• Result / Optional - Either
• Combine
• Async task - GCD / Actor
88. • Object Oriented Programming
• Design pattern
• Protocol Oriented Programming
• Pure function
• High-order function - First class
function
• Functor / Monad
• Result / Optional - Either
• Combine
• Async task - GCD / Actor