개발
-
dart - mixin개발 2023. 1. 4. 19:57
믹스인은 객체를 생성할 때 코드의 일부를 다른 클래스 안에 섞어 재사용할 수 있는 기법이다. 코드 재사용이 가능한 측면에서 상속과 비슷하면서도 결합도 문제를 초래하지 않아 객체간에 유연한 결합을 만들때 좋다. 코드 가져오기 abstract class WalkerInterface { walk(); } class Walker { walk () { } } class Dog with Walker implements WalkerInterface { bark() { walk(); } } Dog 클래스는 Walker 클래스를 믹스인해서 Walker 클래스의 walk() 함수를 가져왔다. 덕분에 WalkerInterface 내부 walk 함수를 구현하지 않아도 된다. 오버라이드 class Dog with Walker ..
-
flutter - provider 패턴개발 2023. 1. 4. 19:49
flutter의 상태 관리 방법으로 BLOC은 작업을 추가할 때마다 이벤트 클래스를 매번 생성해야하는 번거로움이 있고 코드가 불필요하게 길어져서 가독성이 떨어진다. 뿐만 아니라 MVVM 패턴에 익숙한 사람에게는 BLOC을 활용하는 작업이 직관적으로 받아들여지지 않는다. 다행히도 나만 불편함을 느낀게 아닌지 BLOC을 대체하는 많은 대체할 수 있는 라이브러리가 다수 존재한다. 나는 Provider 패턴이 가장 쓰기 쉬웠다. 라이브러리 추가 dependencies: flutter: sdk: flutter provider: ^6.0.5 먼저 provider 라이브러리를 추가한다. 작성기준 최신 버전은 6.0.5 다. ChangeNotifier 인스턴스 추가 class ExampleModel with Chang..
-
typeorm - OneToOne, OneToMany, ManyToMany개발 2022. 11. 29. 20:00
typeorm을 사용하면 객체들간의 관계도 데이터베이스상에 매핑이 가능하다. 1:1, 1:N, M:N 처럼 데이터베이스 수업시간에 배웠던 껄끄러운 관계들을 typeorm을 이용해서 일목요연하게 정리해보자. 1. OneToOne 객체와 다른 객체간의 관계가 1:1인 경우다. 객체 A, B가 있다면 A 객체가 B 한개를 소유하고 B 객체는 A에만 속하는 관계가 이렇다. @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @OneToOne(() => Profile) @JoinColumn() profile: Profile; } @Entity() export class Profile { @Primary..
-
typeorm - definition, entity개발 2022. 11. 29. 17:00
ORM은 객체와 관계형 데이터베이스를 자동으로 매핑시켜주는 것을 말한다. 직접 Database Client를 켜고 테이블을 만들고 쿼리를 작성하는 방법도 있지만 ORM을 활용하면 번거로운 쿼리를 작성하지 않아도 되며 자동으로 데이터와 매핑까지 시켜줄 수 있기 때문에 여러모로 귀찮은 일을 한번에 해결할 수 있다. typeorm은 타입스크립트, 자바스크립트에서 사용할 수 ORM이다. MySQL과 PostgreSQL을 포함해서 다양한 관계형 데이터베이스를 지원하고 스프링에서 사용되는 JPA와 거의 비슷한 수준의 기능을 제공하고 있다고 봐도 무방하다. 1. 초기화 import { DataSource } from 'typeorm'; export const AppDataSource = new DataSource({..
-
flutter - BlocWidget개발 2022. 10. 6. 21:53
설명만 읽어선 이해하기 어려울 것 같아서 실제 예제 코드가 있는 https://bloclibrary.dev/#/flutterlogintutorial 페이지를 보면서 따라가면 좋을 것 같다. BlocBuilder Bloc의 새로운 상태에 따라서 위젯을 만드는 클래스다. Bloc의 State가 변할 때마다 builder 함수가 여러번 불리게 되고 상태에 따라서 표현할 위젯을 바꿀 수 있다. 리턴 함수는 위젯 함수여야 한다. buildWhen 은 스테이트에 대해서 새롭게 위젯을 만들어야할지 말지를 리턴하는 함수다. 조건 문으로 특정 스테이트에 대해선 업데이트 하지 않도록 할 수 있다. BlocBuilder( buildWhen: (previousState, state) { // return true/false ..
-
flutter - Bloc, Cubit, Stream개발 2022. 10. 6. 21:40
Bloc 표현층과 비즈니스로직을 분리하고 코드를 빠르고 재사용 가능하게 짤 수 있는 플러터 아키텍처다. Bloc을 이해하려면 먼저 Stream에 대한 개념을 짚고 넘어가야한다. Stream 비동기적인 데이터들의 연속을 말한다. 파이프 안에 흐르는 물로 비유할 수 있는데 흐르는 물이 비동기적 데이터고 그 물을 둘러싸는 파이프가 Stream이라고 볼 수 있다. Dart의 코드로 표현하면 다음과 같다. Stream countStream(int max) async* { for (int i = 0; i < max; i++) { yield i; } } Stream을 소비(Consume) 하는 코드도 만들 수 있다. 비동기로 값을 리턴하기 위해 async 를 붙이고 Future로 리턴한다. Future sumStre..
-
typescript interface/type개발 2022. 9. 7. 20:30
javascript 에선 객체 타입이 따로 존재하지 않아 받은 객체의 모양을 알 수 없었는데 타입스크립트에서는 interface와 type을 이용해서 객체의 형태를 유추 할 수 있게 됐다. 오랜 기간 javascript 로만 프로젝트를 진행 했었는데 typescript의 interface 와 type 덕분에 런타임 에러를 확 줄일 수 있었다. Interface Car라는 interface를 사용했고 showCarInfo 함수에 정보를 노출하게 했다. 특정 객체만 받도록 형태를 지정할 수 있게 됐다. interface Car { name: string, color: string } function showCarInfo(car: Car) { console.log(car.name) console.log(car..
-
REST, REST API, RESTful개발 2022. 9. 2. 19:55
REST는 Representational State Transfer의 약자로 네트워크상에서 존재하는 애플리케이션을 만들기위한 아키텍처 스타일을 뜻한다. REST에는 6가지 아키텍처 가이드라인이 있는데 개발자라면 이미 몸소 체득했을 것이다. REST Guidelines Uniform Interface Resource 에 대한 요청을 통일되고 한정적으로 수행해야한다. 요청하는 Client 플랫폼에 종속되지 않고 사용할 수 있는 형태가 돼야함을 말한다. Client - Server 유저의 인터페이스는 클라이언트에서 데이터와 관련된 것은 서버에서 처리해 관심사를 분리한다. 다른 말로 하면 클라이언트와 서버가 따로 독립적으로 개선될 수 있어야 한다. Stateless 클라이언트와 서버는 요청을 완료 할 때 필요한..