TIL (학습질문 &답변)

2024. 6. 14. 23:05TIL

개인 심화 과제를 하며 작성된 질문에 대한 답변을 정리하였습니다.

 

학습질문&답변

 

 

1. Class와 Instance가 각각 무엇인지 설명해 주세요.
클래스는 객체를 생성해주는 생성자로, 객체가 공통적으로 가지는 속성, 공통적인 기능들을 정의하여 객체를 생성하기 위한 일종의 설계도 역할을 한다.

인스턴스는 클래스를 기반으로 생성된 객체 하나하나를 해당 클래스의 인스턴스라고 부른다.즉, 인스턴스란 현실의 객체를 소프트웨어 내에서 구현한 실체라고 볼 수 있다. 
이렇게 생성된 인스턴스들은 각자 고유의 특성을 가지고 독립적으로 존재한다.객체가 어떤 클래스로부터 생성된 것인지를 강조. new 연산자를 통해 생성자를 호출해서 메모리에 올라온 객체의 상태를 의미한다.
세부적인 속성값, 유일 값을 지니며 소프트웨어의 생애주기에 참여하여 동작한다

2. Class의 Method는 화살표 함수(Arrow Function) 형태로 구현하지 않았을 때 발생할 수 있는 문제와 해당 문제를 해결할 수 있는 다른 방법은 무엇인가요.
Class Method를 일반 함수로 구현하면 호출하는 방식에 따라 다른 값을 반환하는 this 바인딩 문제가 발생할 수 있다. 메서드 내부에서는 내부객체의 값을 반환하지만 단독으로 호출하게 되면 전역객체(window)를 반환하게 된다.
이러한 문제를 해결하기위해 메서드를 bind하는 방법이 있다. bind는 함수 객체의 메서드로 새로운 함수를 생성하면서 this 값을 영구적으로 바인딩할 수 있어 어떤 방식으로 호출하든 바인딩된 값만 반환한다.

3. 3-Layered Architecture에서 각 Layer(Controller, Service, Repository)가 하는 역할은 무엇인가요
Controller는 클라이언트로 부터 요청을 받는 역할과 요청을 처리하고 응답을 반환하는 역할을 한다. 또한 요청에 대한 유효성 검사,인증 등의 작업을 수행합니다.
Service는 Controller로부터 요청을 전달받아 핵심적인 비즈니스 로직을 구현합니다.
Repository는 데이터베이스와 상호작용을 담당하는 계층으로 Service로부터 요청을 전달받아 데이터베이스 CRUD작업을 수행한다.


4. 3-Layered Architecture의 장점과 단점은 무엇인가요
3-Layered Architecture는 계층 간의 의존성이 낮아 각 계층을 독립적으로 재사용 할 수 있으며 계층별로 독립적인 단위 테스트가 가능하여 테스트 작성에 용이합니다. 또한 새로운 기능을 추가할 때 해당 계층만 수정하면 되기때문에 확장성이 좋다는 장점을 가집니다. 하지만 계층 구조로 인해 전체적인 시스템 복잡성이 증가하고 초기 개발시 더 많은 시간이 든다는 단점을 가집니다.

5. `res`(Request 객체)를 사용하지 않는 Service, Repository Layer에서는 에러 발생 시 어떻게 사용자에게 전달할 수 있는지 과제에서 구현한 방법을 설명해 주세요. 
throw new Error를 작성하여 에러 객체를 생성하여 에러를 전달할 수 있는 controller 계층으로 전달합니다.

6. 의존성 주입(DI, Dependency Injection)이 무엇이며, 사용해야 하는 이유를 설명해 주세요.
의존성 주입이란 클래스가 필요로 하는 객체를 외부에서 제공받는 것을 말하여 의존성 주입을 사용하면 단위 테스트가 쉬워지고 새로운 의존성을 추가하거나 변경하기도 쉬워집니다.

7. 테스트 코드 작성의 장점과 단점을 아는대로 적어주세요.
테스트 코드를 작성하면 코드의 정확성과 안정성이 높아지며, 코드를 안전하게 리팩토링할 수 있습니다. 
하지만 개발 시간이 더 소요되며 테스트 코드도 지속적으로 관리해야하기 때문에 유지보수 비용이 증가할 수 있습니다.

8. 테스트 코드 작성 시 GIVEN-WHEN-THEN 패턴을 이용하면 코드 작성을 조금 더 쉽게 할 수 있습니다. 이 3가지가 의미하는 것은 각각 무엇인지 설명해 주세요.
GIVEN은 테스트를 수행하기 위한 준비하는 단계로 필요한 데이터나 객체 등 전제 조건을 정의한다.
WHEN은 테스트 코드를 실행하는 단계로 테스트할려는 메서드나 기능을 호출한다.
THEN은 테스트 코드의 실행 결과가 어떠해야하는지 예상하고 검증합니다.
이렇게 GIVEN-WHEN-THEN 으로 나누어 테스트 코드를 작성하면 코드작성이 쉬워지며 각 부분이 명확하게 구분되어 쉽게 이해할 수 있게 됩니다. 또한 테스트 실패 시 어떤 부분이 문제인지 파악하기 쉬워집니다.

9. 테스트 코드 작성 시 Mocking을 이용하는 이유를 설명해 주세요.
Mocking은 가짜객체를 만들어 테스트에서 시간 또는 비용이 많이들거나, 의존성이 높은 코드를 직접 실행하지 않고 호출 여부, 입력한 값의 일치 여부와 같은 정보를 확인하기 위해 사용합니다.


10. 테스트의 종류 3가지와 각각이 무엇인지 간단히 설명해 주세요. 
테스트 종류에는 가장 작은 규모의 기능을 테스트하는 단위 테스트와 다양한 기능을 합쳤을 때 올바르게 잘 작동하는지 테스트하는 통합 테스트, 시스템 전체가 처음부터 끝까지 제대로 동작하는지 테스트하는 End-to-End 테스트가 있습니다.

'TIL' 카테고리의 다른 글

TIL ( Validator )  (0) 2024.06.18
TIL (에러핸들링 & try...catch)  (0) 2024.06.17
TIL ( 테스트 코드 )  (1) 2024.06.13
TIL ( Layered Architecture Pattern )  (0) 2024.06.12
TIL (아키텍처 패턴)  (0) 2024.06.11