TYPESCRIPT 예제
/** Encapsulation **/
class User {
private name: string; // name 변수를 외부에서 접근을 할 수 없게 만듭니다.
private age: number; // age 변수를 외부에서 접근을 할 수 없게 만듭니다.
setName(name: string) { // Private 속성을 가진 name 변수의 값을 변경합니다.
this.name = name;
}
getName() { // Private 속성을 가진 name 변수의 값을 조회합니다.
return this.name;
}
setAge(age: number) { // Private 속성을 가진 age 변수의 값을 변경합니다.
this.age = age;
}
getAge() { // Private 속성을 가진 age 변수의 값을 조회합니다.
return this.age;
}
}
const user = new User(); // user 인스턴스 생성
user.setName('이용우');
user.setAge(30);
console.log(user.getName()); // 이용우
console.log(user.getAge()); // 30
console.log(user.name); // Error: User 클래스의 name 변수는 private로 설정되어 있어 바로 접근할 수 없습니다.
private라는 접근 제한자(Access modifier) 사용
타입스크립트에는 접근 제한자(Access modifier)인 public, protected, private를 지원
어디에서나 접근할 수 있으며 생략 가능한 default 값
class Hello {
name: string
constructor(name: string) {
this.name = name
}
// public 생략 가능
public greet() {
console.log(`hi! ${this.name}`)
}
}
const hello = new Hello('kmj')
hello.greet() // output: 'hi! kmj'
name을 선언해주기 위해서 꽤나 많은 양의 코드를 작성해야 하는데, 이를 constructor에서 한 번에 선언할 수 있다.
class Hello {
constructor(public name: string) {}
// 생략
}
소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시
각각의 시스템들과 그 역할이 정의되어 있고, 여러 시스템 사이의 관계와 규칙 등이 포함

MVC 패턴(Model View Controller Pattern)
출처: https://developer.mozilla.org
📒 3-Layered Architecture (3계층 아키텍처)
주로 아래의 3가지 계층으로 구성됨
📌 3-Layered Architecture 로직 수행 플로우
1️⃣ 클라이언트(Client)가 어플리케이션에 요청(Request)
2️⃣ 요청(Request)을 URL에 알맞은 컨트롤러(Controller)가 수신
3️⃣ 컨트롤러(Controller)는 요청을 처리하기 위해 서비스(Service)를 호출
4️⃣ 서비스(Service)는 필요한 데이터를 가져오기 위해 저장소(Repository)에게 데이터를 요청
5️⃣ 서비스(Service)는 저장소(Repository)에서 가져온 데이터를 가공하여 컨트롤러(Controller)에게 데이터를 전달
6️⃣ 컨트롤러(Controller)는 서비스(Service)의 결과물(Response)을 클라이언트(Client)에게 전달
서버에서의 처리과정이 대부분 유사하다! 이를 Controller, Service, Repository 라는 3개의 계층으로 분리
컨트롤러
서비스
저장소(레포지토리)

기존 프로젝트 복사 후 강의를 보면서 리팩토링을 하기 시작했다. 일단 구조를 변경하기 위해 컨트롤러 폴더와 레포지토리, 서비스 폴더를 생성했다.
prisma 대신 TypeORM으로 변경하는 작업을 위해 필요한 패키지와 드라이브를 설치했다.
typeorm reflect-metadata mysql2 //mysql을 사용할 예정..