나만의 작은 도서관
[TIL] 240610 캠프 57일차: 인터페이스, SOLID, 아키텍처 패턴, jest 사용 오류해결 본문
오늘 배운 내용
인터페이스
인터페이스는 구현을 강제시킨다. 인터페이스에 정의된 클래스를 선언한다면 인터페이스에 정의된
내용을 반드시 구현해야 한다. 인터페이스는 이렇게 무조건 정의하도록 하는 것 말고는 가지는 역할이 없다. 강제를 함으로써 인터페이스를 가지는 코드들은 일관성을 유지할 수 있다.
SOLID
- 단일 책임의 원칙: 하나의 클래스는 하나의 역할만 담당해야한다.
따라서, 여러 개의 역할을 담당하는 클래스가 있는 경우, 여러 개의 클래스로 분리해야 한다. - 개방-폐쇄 원칙: 소프트웨어 개체의 행위는 확장될 수 있지만, 개체를 변경해서는 안된다.
해당 원칙을 지키면 기존 코드에 영향을 주지 않고 소프트웨어에 새로운 기능이나 구성 요소를 추가할 수 있다. - 리스코프 치환 원칙: 자식 클래스가 부모 클래스를 상속했을 때 원하지 않는 결과가 도출되지 않아야 한다는 원칙.
예시로, 직사각형 클래스가 정의되었을 때, 정사각형 클래스가 직사각형 클래스를 상속받는 식으로 구현하면 정사각형의 넓이를 구하는 메소드가 원하는 결과가 나오지 않는다. 따라서, Shape이라는 클래스를 따로 정의하고, 직사각형과 정사각형이 Shape클래스를 상속하는 방식으로 사용하면된다. 이는 리스코프 치환 원칙을 준수한 코드가 된다. - 인터페이스 분리의 원칙: 인터페이스로 묶었을 때 구현할 필요가 없는 기능들고 같이 구현해야하는 상황을 만들면 안된다는 원칙.
이런 경우, 인터페이스를 여러 개로 분리해서 인터페이스를 작게 유지하고, 각 인터페이스를 필요한 클래스에 추가하는 방식으로 사용하면 된다. 이는 인터페이스 분리의 원칙을 준수한 코드가 된다. - 의존성 역전의 원칙: 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다는 원칙.
예시로, 각 파일 확장자에 따라 다른 클래스와 다른 메서드를 사용하면 이는 구체적인 구현에 의존하고 있는 상황이 발생하며 의존성 역정의 원칙을 어기게 된다. 이를 해결하기 위해, 생성자를 만들고, 생성자를 통해 Formatter인스턴스를 주입(의존성 주입)을 통해 의존성 역전의 원칙을 준수하게 된다.
아키텍처 패턴
아키텍처 패턴은 소프트웨어의 구조를 구성하기 위한 가장 기본적인 토대를 제시한다. 아키텍처 패턴을 사용할 경우 이미 많은 사람들로부터 증명된 패턴이므로 SOLID나 캡슐화와 같능 원칙을 자동으로 지킬 수 있으며, 안정성도 높다.
아키텍처 패턴 일부 종류
- MVC패턴: 백엔드 프론트엔드가 동시에 존재하는 패턴이기 때문에 백엔드 아키텍처라고 설명할 수 있지만, 모든 부분이 그렇다고 볼 수는 없는 아키텍처 패턴이다. model / view / controller로 구분하며 각각의 역할은 다음과 같다.
모델: 실제 데이터나 로직을 담당(어떻게 처리?)
뷰: 사용자 인터페이스를 담당(어떻게 보이기?)
컨트롤러: 실제로 클라이언트 요청을 모델과 뷰로 전달(어떻게 전달?) - 계층형 아키텍처 패턴: 시스템의 서로 다른 기능을 여러 계층으로 분할한 패턴이다. JAVA의 spring에 내장된 패턴이며, 컨트롤러, 서비스, 저장소 계층으로 분리한다.
오늘의 Trouble Shooting
Problem 1. "detail": "JSON parse error - Expecting property name enclosed in double quotes: 오류
insomia로 API를 테스트 하는 도중 위와 같은 오류가 발생했다. console.log()를 어디를 찍어봐도 출력조차 되지 않아 어디서 발생한 오류인지 찾을 수 없어 적잖이 당황했었다. 하지만 알아보니 정말 사소한 것 때문에 발생한 문제였다
Solve. 컴마를 삭제하면 된다.
requet body에서 JSON이 컴마 뒤에 속성이 없음에도 컴마(',')가 있을 때 위 오류가 발생하는 것이었다. 정말 웃기게도 컴마를 지우면 해결된다.
Problem 2. jest yarn test 오류 발생
강의를 따라하면서 jest의 사용법을 익히는 도중, 아래와 같은 오류가 발생했다. VSCode에서 다시 폴더를 생성하여 만들어도 봤고, 하나하나 잘못 타이핑 한 내용은 없는 지 체크도 해봤지만 같은 오류가 발생했다.
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
^^^^^^^
SyntaxError: missing ) after argument list
Solve. "test"부분 수정
아래 링크를 참고해보니 " There is a problem in the configuration. The default config tries to run the sh shell script of jest as a node program."가 원인이라고 한다. 대충 해석해보자면 기본 구성이 sh 쉘에서 실행하려고 하는 것이 문제같다고 한다. 그래서 "test" 부분을 다음과 같이 변경했더니 정상적으로 작동했다.
// 이전 코드
"test" : "node --experimental-vm-modules node_modules/node_modules/.bin/jest"
// 바꿔서 해결한 코드
"test" : "node --experimental-vm-modules node_modules/node_modules/jest/bin/jest.js",
참고한 링크
https://dev.to/elpddev/debug-jest-spec-in-vscode-error-missing-after-argument-list-1p3b
오늘 한 일
'Today I Learn' 카테고리의 다른 글
[TIL] 240611~240613 58~60일차: 예비군으로 인한 불참 (0) | 2024.06.14 |
---|---|
[TIL] 240614 캠프 61일차: docker를 사용하는 이유, redis가 좋은 이유 (0) | 2024.06.14 |
[TIL] 240607 캠프 54일차: prisma: findFirst, findUnique, 그리고 유일성 조건에 따른 오류 (1) | 2024.06.07 |
[TIL] 240605 캠프 52일차: Prisma 배열과 객체의 반환 값 판정, Prisma NOT, gte, lte사용법 (0) | 2024.06.05 |
[TIL] 240604 캠프 51일차: prisma client와 연결된 DB간의 관계. 협업에서 발생할 수 있는 문제에 대해서... (0) | 2024.06.04 |