목록전체 글 (134)
PracticeEveryday

객체지향 프로그래밍의 발전 - 이렇게 객체지향 프로그래밍이 정립되고 다음어져 C++같은 객체지향 프로그래밍을 할 수 있는 언어들이 등장하게 되었습니다. - 객체지향 프로그래밍은 완전 객체지향 패러다임을 지향하는 Java의 등장과 함께 프로그래밍 생태계에 주류 패러다임이 됩니다. - 이제 프로그래밍을 할 때 객체 지향은 너무나도 당연한 것이 되었습니다. - 모든 것이 객체이며, ' 객체 간의 관계 ' 를 중요시하며 객체를 만들어내는 관점으로 프로그래밍을 바라보게 되었고 객체 단위로 만들어지는 재사용 라이브러리나 모듈들로 인해서 기존 절차적 프로그래밍에 비해 훨씬 덩치를 키우기가 용이해졌습니다. - 그러나 객체지향은 언제나 복잡함이라는 것을 가지고 있는 개념이기에 Class와 Object만 쓴다고 나아지는 ..

- 독립된 객체를 조립해서 사용하는 방식은 레고와 같이 재사용이 가능한 객체들을 많이 만들어 놓는 것이 중요하다는 것을 알게 되고 객체의 재사용을 높이기 위해 OOP에는 아래와 같은 여러 개념들이 추가되게 됩니다. 외부에서 알 필요가 없는 것들은 숨겨 놓자 => 캡슐화 - 작은 문제를 해결하는 독립된 객체를 사용하게 되면서 객체의 모든 데이터에 접근을 해야하는 필요가 없다는 것을 깨닫게 되었습니다. - 내부의 데이터는 내부에서 알아서 조작할 수 있도록 하고 외부에서는 필요한 내용만 만들어 두는 것이 프로그램의 안정성과 사용성 측면에서 낫다는 것을 알게 됩니다. - 그래서 꼭 외부로 노출해야 되는 값과 내부에서만 사용하는 값을 구분하는 기능을 추가하도록 합니다. - 이를 데이터를 보호해주는 캡슐과 같은 것..

프롤로그 - 프로그래밍 세계에서 무언가를 학습하기 위해서는 그 이론 자체를 이해하기보다는 먼저 그 기술이 나오게 된 배경을 이해하는 것이 더 중요합니다. 그래야 새로운 변환점을 맞이했을 때 맥락에 맞게 내 것으로 만드는 것이 쉬워지기 때문입니다. - 프로그램 뿐 아니라 기술의 발전은 대략 다음과 같은 사이클로 돌아가게 됩니다. 1. 문제 인식 - 프로그램을 하다 보면 누구나 한 번쯤 겪을 법한 문제들이 쌓이기 시작하는 단계입니다. - 이 때 문제를 해결하기 위해 저마다 여러가지 해법들을 찾아보게 됩니다. 문제는 인식하여 공감대는 형성되었지만 이 문제를 해결하기 위한 최선의 방법은 아직 등장하지 않은 시기입니다. 2. 명명된 새로운 기술의 등장. - 여러가지 해법들이 쌓여가다 보면 모두가 합의할만한 이론이..

Duck Typing interface People { talk(): void; whoAmI: string; } class Human implements People { whoAmI = "human"; talk = () => { console.log(`say ${this.whoAmI} : 말할 수 있어요`); }; } class Robot { whoAmI = "robot"; talk = () => { console.log(`say ${this.whoAmI}: 말할 수 있어요`); }; } const humanInstance = new Human(); const robotInstance = new Robot(); const startTalk = (people: People): void => { people..

라우팅 - 라우팅은 URI ( 또는 경로 ) 및 특정한 HTTP 요청 메소드 ( GET, POST 등 )인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말합니다. 1. 클라이언트 요청은 URI + HTTP 메소드로 이루어진다. - 네이버 루트에 접속하는 경우 -> 'http://www.naver.com/' URI + Enter ( HTTP GET ) 2. 라우팅은 클라이언트 요청에 응답하는 방법을 말한다. - 클라이언트 요청은 URI와 HTTP 메소드로 이루어 진다고 했다. 근데 요청에 대한 응답을 주기 위해서는 URI가 어떤 구조로, 어떤 메소드로 요청을 올지 미리 서버쪽에서 정의해 두어야 한다. - 예를 들어 '/users 구조의 URI 가 GET 메서드로 올..

서버 코드 예제 GET 메서드 API - 상태코드 200 리턴 - JSON 형태로 사용자 이름 전달 POST 메서드 API - 요청 시 body에 name을 전달 받음 - 상태코드 201 리턴 - JSON 형태로 body에 전달 받았던 이름 전달 // app.js import express from 'express'; const app = express(); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.get('/user', (req, res) => { res.status(200).json({ name: 'modolee' }); }); app.post('/user', (req, res) => { const { ..

Supertest - HTTP assertion( 주장, 행사 )을 쉽게 만들어주는 라이브러리 yarn add --dev supertest - 사용 방법 // app.js import express from 'express'; const app = express(); // 상세한 구현... export default app; import request from 'supertest'; import app from './app'; request(app) // 체이닝을 통해서 추가적으로 설정이 필요 ※ Method 및 Path 지정 - GET, POST, PUT, DELETE 등의 Method 지정 - Method와 함께 API Path를 문자열로 지정 request(app) .get('/user'); // ..

TypeScript Jest로 test 할 때 import 사용 하는 방법 1. jest 를 TypeScript 에서 사용하기 위해 필요 한 패케지들과 바벨 플러그인 설치 yarn add -D jest ts-jest @types/jest yarn add -D @babel/preset-typescript @babel/preset-env 2. 바벨 설정 // .babelrc { "presets": ["@babel/preset-typescript", "@babel/preset-env"], } 안 된 이유 - 테스트 코드는 Jest 모듈이 실행시키는 데 이 Jest 모듈은 별다른 설정을 해주지 않으면 테스트 대상 코드가 JavaScript 일 것이라고 생각 해 에러가 발생했던 것이다!! 해결 방법 - Jest는..

tsc-watch 사용이유 - ts 코드가 바뀔 때마다 js로 컴파일 한 뒤 node를 실행하는 과정을 반복했지만 ts-watch를 사용하면 그러지 않아도 된다. => TypeScript 버전 nodemon인 셈! 1. tsc-watch 설치 yarn add tsc-watch 2. root 폴터와 dist 폴더 생성 - dist 폴더는 컴파일 된 JavaScript 파일들이 모인다. - root 폴더는 컴파일 될 TypeScript가 모여있는 곳이다. 3. tsconfig.json 파일 수정! outDir : "dist" - 컴파일 된 JavaScript 파일이 모일 경로 include : ["root"/**/*"] - TypeScript 파일들이 모여있는 경로 4. pacage.json 파일 수정 "s..

TDD - TDD란 Test Driven Development의 약자로 '테스트 주도 개발' 이라고 한다. - 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복해서 구현한다. - 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtreem Programming( XP )의 Test-First 개념에 기반을 둔 단순한 설계를 중요시한다. ※ eXtream Programming ( XP )란? - 미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토타입을 완성하는 애자일 기반 방법 중 하나 - 이 방법론은 추가 요구사항이 생기더라도 실시간으로 반영할 수 있다. 단위 테스트 ( Unit Test ) 란?..