개발 공부

개발 공부/Flutter

Flutter BoxConstraints

BoxConstraints란위젯이 자체적으로 가질 수 있는 크기를 정의하는 네 가지 값의 집합최소 너비최대 너비최소 높이최대 높이제약 조건을 이해하기 위해서는 다음의 플러터 핵심 규칙을 이해하는 것이 먼저다.Constraints go down. Sizes go up. Parent sets position.제약 조건은 아래로, 크기는 위로, 부모는 위치를 지정한다.Constraints go down. Sizes go up. Parent sets position.위젯은 부모로부터 제약 조건(Constraints)를 받는다.위젯은 자신의 자식(children) 목록을 하나씩 탐색하며 위젯은 자식들에게 그들의 제약 조건을 알려주고 각 자신이 어떤 크기를 원하는지 묻는다.그리고 위젯은 자식들의 위치를 하나씩 설정..

개발 공부

OCP와 Dependency Injection

OCP(개방-폐쇄 원칙)란 무엇인가?개방-폐쇄 원칙은 "소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에 대해서는 개방되어야 하지만, 수정에 대해서는 폐쇄되어야 한다"는 원칙이다. 쉽게 말해, 새로운 기능을 추가할 때는 기존 코드를 변경하지 않고 확장할 수 있어야 한다는 의미를 갖고 있다. OCP를 지키면 얻는 이점:유지보수성 향상: 기능 추가 시 기존 코드에 대한 변경이 적어 버그 발생 가능성이 줄어든다.재사용성 증가: 잘 정의된 추상화를 통해 여러 곳에서 재사용 가능한 모듈을 만들 수 있다.유연성 증대: 시스템의 변경에 유연하게 대응할 수 있다.그런데 이 앞서 설명한 OCP 원칙을 지키는 건 DI 없이 불가능하다. OCP 원칙을 지키기 위해서는 왜 DI가 필수적인지 Dart 코드를 통해 알아본다.D..

개발 공부/Flutter

플러터 예제 어플리케이션 구조 분석

개요본격적으로 플러터를 학습하기 전에, 이번 포스팅에서 기본적인 플러터의 예제 어플리케이션의 코드를 살펴본다.Symbols다음은 flutter run 명령어로 실행되는 기본 엔트리포인트 lib/main.dart의 심볼 목록이다.dart의 엔트리포인트 main 함수, 그리고 다음의 3가지 클래스로 이루어져있다.MyAppMyHomePage_MyHomePageStatemainvoid main() { runApp(const MyApp());}runApp() 함수의 인자로 MyApp()을 실행한다.Dart의 상수 생성자 기능을 이용한다.상수 생성자를 이용하려면 조건이 필요한데, 모든 필드가 final로 초기화 되어야한다.해당 내용은 여기를 참고했다.객체가 한번 빌드되면 어플리케이션 생명주기동안 동일하게 유지되므..

개발 공부/CS

문자 집합과 인코딩, 디코딩

문자 집합(Character Set) 컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 문자 집합이라고 한다. 예를 들어, 문자 집합이 {a, b, c, d}만 존재한다면 그 외의 문자들은 컴퓨터가 이해하지 못한다. 문자 집합에 속해있다고해서 컴퓨터가 그대로 문자를 이해할 수 있는 것은 아니다. 왜냐하면 컴퓨터는 0과 1만 이해할 수 있기 때문이다. 인코딩(Encoding) 문자 집합을 컴퓨터가 이해할 수 있도록 바이너리(2진수)로 변환하는 과정을 인코딩이라고 한다. 같은 문자 집합에도, 여러 인코딩 방법이 존재한다. 디코딩(Decoding) 인코딩의 반대로 0과 1로 이루어진 바이너리를 사람이 이해할 수 있는 문자로 변환하는 과정을 디코딩(Decoding)이라고 한다. 아스키 코드(ASCII) 아스키 코..

개발 공부/CS

컴퓨터 구조의 큰 그림

컴퓨터를 구성하는 핵심 부품들 메인보드 CPU 주 기억장치 보조 기억장치 입출력 장치 주 기억장치 주 기억장치는 주로 메모리 또는 램(RAM)이라고 불리며 정확한 명칭은 Random Access Memory이다. 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다. 프로그램이 실행되려면 반드시 메모리에 먼저 저장되어야한다. CPU 메모리에 저장된 명령어를 읽어들이고, 해석하고, 실행하는 부품 CPU의 내부 구성장치들 ALU (Arithmetic Logic Unit) 계산만을 위한 CPU의 내부 구성장치 중 하나, 컴퓨터 내부에서 수행되는 대부분의 계산은 ALU가 한다. Register CPU 내부의 임시 저장장치, 프로그램을 실행하는데에 필요한 값을 임시로 저장한다. CPU 내부에는 여러개의 레..

개발 공부/CS

컴퓨터의 기본적인 정보단위

비트(Bit) 컴퓨터는 0과 1만 사용하는 2진수의 체계를 사용하여 정보를 읽고, 쓴다. 이 단위를 비트라고 부른다. 1 비트가 표현할 수 있는 수는 0과 1, 두가지 뿐이다. 바이트(Byte) 비트가 8개로 묶이면 바이트 단위가 된다. 1 바이트가 표현할 수 있는 수는 256가지가 된다. (2^8) 워드(Word) CPU가 한번에 처리할 수 있는 단위를 의미한다. 가령, 인텔 x86 CPU는 32비트 워드 CPU이며 이는 x86 CPU가 4바이트의 데이터를 한번에 처리한다는 것을 의미한다.

개발 공부/CS

이스케이프 시퀀스(Escape sequence)

프로그래밍을 공부하다보면 백슬래시 뒤에 문자나 숫자가 있는 형태의 문자를 볼 수 있습니다. 이를 이스케이프 시퀀스라고 부릅니다. 대표적으로 사용되는 이스케이프 시퀀스중 하나는 줄바꿈 문자인 "\n"이 존재합니다. 이런 이스케이프 시퀀스는 단일 문자로 간주 되므로 C의 char(1 바이트, 문자 하나만을 나타내는 타입) 타입에 사용될 수 있습니다. 다른 언어에서도 마찬가지입니다. 이스케이프 시퀀스 설명 \a 경고 (경고음 출력) \n 줄바꿈 \t 수평 탭 \v 수직 탭 \b 백스페이스 \f 폼 피드 \r 캐리지 리턴 \' 작은 따옴표 \\ 백슬래시 \? 리터럴 물음표 \ooo 8진수 표기법의 ASCII 문자 \xhh 16진수 표기법의 ASCII 문자 만약 위 표에 없는 문자를 백슬래시 이후에 사용하는 경우..

개발 공부/Rust

Rust 구조체와 메소드 문법

얼마전부터 프로그래밍 언어인 러스트에 관심이 생겨서 공부중입니다. match 제어 흐름문이나 러스트만의 메모리 관리 모델인 소유권등 다른 언어와 다른 점이 많지만 재미있는 언어인 것 같습니다. 아무튼 오늘은 러스트의 구조체와 메소드 문법에 관해 간단하게 정리하고, 아이폰과 갤럭시를 제조하는 코드를 짜보면서 실습 해보겠습니다. 구조체 구조체는 struct 키워드를 통해 정의합니다. 구조체 내부의 각각의 데이터 조각은 필드라고 부릅니다. 구조체를 인스턴스화하여 사용할 때는 구조체에 정의된 모든 필드가 반드시 입력되어 있어야 합니다. 즉 특정 필드나 일부만 가진 구조체를 만들 수 없습니다. 구조체 정의와 인스턴스 생성 예시 struct Coordinate { x: i32, y: i32, } fn main() ..

개발 공부/NestJS

Multer를 사용해 ImgBB에 이미지 올리기

개요 쇼핑몰 API 토이 프로젝트를 진행하고 있는데 상품의 이미지 관련 서비스가 필요 했습니다. 이미지를 저장할 서버가 없기에 ImgBB에서 제공하는 API를 통해 이미지를 ImgBB에 업로드하고, 해당 이미지의 정보만 데이터베이스에 저장하려고 합니다. 우선 Multer를 사용하기 위해 프로젝트에 패키지를 설치합니다. $ npm i -D @types/multer 단일 파일 핸들 @UseInterceptors(FileInterceptor('image')) async uploadProduct( @UploadedFile() image: Express.Multer.File, ) { // ... } 파일 핸들을 위해 NestJS에서는 인터셉터를 사용합니다. FileInterceptor의 첫번째 매개변수에 폼 데이..

개발 공부/Docker

Docker Compose 사용해보기

개요 Docker Compose는 다중 컨테이너로 구성된 어플리케이션을 관리하기 위한 도구입니다. YAML 파일에 어플리케이션의 서비스를 구성하고 단일 명령으로 실행합니다. 먼저, 저는 Docker Desktop과 docker-compose를 미리 설치해놓은 환경에서 진행함을 알립니다. 프로세스 Docker Compose는 기본적으로 3단계의 프로세스로 구성되어 있습니다. 1. 어플리케이션의 환경을 Dockerfile로 정의 2. 격리된 환경에서 함께 실행 할 수 있도록 앱을 구성하는 서비스를 docker-compose.yml 파일에 정의 3. docker-compose up 명령어로 실행하면 전체 앱을 시작하고 실행 실습을 위해 간단한 웹 서버를 구현하고 위 프로세스를 진행 해보겠습니다. 폴더 구조 일..