어제 작성해놓은 Class와 Instance에, 모의 면접을 위한 예상질문 공부 내용을 합쳤다.

Class와 Instance


수요일에 있을 모의 면접 예상질문?을 공부해봤다.


클래스와 인스턴스의 차이점은?

클래스는 객체를 생성하기 위한 청사진 역할을 합니다.
그리고 그 안에 속성과 메서드가 들어갈 수 있습니다.
인스턴스는 이러한 클래스를 기반으로 생성된 객체입니다.


클래스를 사용해야 하는 이유는 무엇인가요?

클래스를 사용하면 코드의 구조가 명확해지고, 객체 지향 프로그래밍 원칙을 따를 수 있습니다.
클래스는 재사용는 것과 코드 유지 보수를 용이하게 해줍니다.


자바스크립트 클래스의 생성자는 무엇인가요?

생성자는 클래스의 인스턴스가 생성될 때 호출되는 특수한 메서드입니다.
자바스크립트에서는 constructor라는 이름의 메서드를 사용하여 인스턴스 초기 상태를 설정합니다.


생성자에서 초기화 할 수 있는 다른 속성은 무엇이 있나요?

생성자에서는 객체의 상태를 정의하는 모든 속성을 초기화 할 수 있습니다.
기본값 설정이나, 다른 메서드를 호출하여 초기화 작업을 수행할 수도 있습니다.


자바스크립트에서 클래스 상속에 대해 설명해 주세요

클래스 상속은 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받는 기능입니다.
extends를 사용하여 상속을 구현할 수 있습니다.
상속을 통해 공통된 기능을 가진 클래스를 편리하게 구현할 수 있습니다.


상속의 장점과 단점은 무엇인가요?

장점

  • 기존 클래스를 이용하므로 코드의 재사용성이 높아집니다.
  • 부모 클래스를 수정해 여러 자식클래스를 공통으로 수정할 수 있기때문에 유지 보수가 편합니다.

단점

  • 상속 구조가 복잡해질 경우 코드 이해가 굉장히 어려워질 수 있습니다.
  • 자식 클래스가 부모 클래스에 의존하게 되어, 부모클래스의 변경이 자식 클래스에 영향을 미칠 수 있습니다.



3-Layered Architecture


3-Layered Architecture란 무엇인가요?

3-Layered Architecture는 소프트웨어 애플리케이션을 세가지 주요 계층으로 분리하여 구성하는 아키텍쳐 패턴입니다.

1.Pressentation Layer: 사용자의 인터페이스(UI)와 사용자 경험(UX)을 담당하는 계층입니다.
사용자가 애플리케이션과 상호작용하는 부분으로, 웹 페이지, 모바일 앱, 데스크톱 애플리케이션 등이 포함됩니다.
이 계층은 보통 HTML, CSS, JavaScript와 같은 기술로 구현이 됩니다.

2.Business Logic Layer: 애플리케이션의 핵심 비지니스 로직을 처리하는 계층입니다.
이 계층은 데이터 처리, 규칙 적용, 계산 등을 수행하며, 사용자 요청을 처리합니다.

3.Data Layer: 데이터 저장소와의 상호작용을 담당하는 계층입니다.
이 계층은 데이터베이스와의 연결, 데이터 CRUD작업 등을 수행합니다.
SQL, noSQL 데이터베이스와 같은 기술이 포함됩니다.


3-Layered Architecture의 주요 장점은 무엇인가요?

각 계층이 독립적으로 작동하므로, 특정 계층의 변경이 다른 계층에 미치는 영향을 최소화할 수 있으므로 코드의 재사용성과 유지 보수성이 향상됩니다.
각 계층이 독립적으로 테스트 될 수 있으므로, 유닛테스트와 통합 테스트를 쉽게 수행할 수 있습니다.
새로운 기능 추가나 기술 스택 변경이 필요한 경우, 특정 계층만 수정하면 되므로 전체 시스템을 재구성할 필요가 없습니다.


3-Layered Architecture의 단점은 무엇인가요?

계층을 분리하면 아키텍쳐가 복잡해져, 간단한 애플리케이션에서는 오히려 불필요한 구조를 이룰 수 있습니다.
계층간의 데이터 전송이 필요하므로, 성능 저하가 발생할 수 있습니다.
추가적인 개발 노력이 필요할 수 있고, 프로젝트 초기 설정 비용을 증가시킬 수 있습니다.


각 계층 간의 통신은 어떻게 이루어지나요?

각 계층간의 통신은 주로 API를 통해 이루어집니다.
프리젠테이션 계층은 비지니스 로직 계층에 요청을 보내고, 비지니스 로직 계층은 데이터 계층과 통신하여 필요한 데이터를 가져오거나 저장합니다.
이러한 통신은 일반적으로 HTTP요청, REST API, SOAP등의 프로토콜을 통해 이루어집니다.



의존성 주입 (Dependency Injection, DI)


의존성 주입이란 무엇인가요?

의존성 주입은 객체 지향 프로그래밍에서 객체 간의 의존 관계를 효율적으로 관리하기 위한 디자인 패턴입니다.
이를 통해 객체는 자신이 필요한 의존성을 직접 생성하지 않고, 외부에서 제공받습니다.
이렇게 하면 코드의 결합도를 낮추고, 테스트나 유지보수 작업을 더 용이하게 만들 수 있습니다.


의존성 주입의 장점은 무엇인가요?

의존성을 외부에서 주입받기 때문에, 구현 클래스를 쉽게 교체할 수 있어 유연성을 높일 수 있습니다.
의존성이 외부에서 주입되므로, 단위 테스트 시 Mock 객체등을 주입하여 테스트 할 수 있습니다.
각 객체의 책임이 명확해지므로 유지 보수가 용이해집니다.
코드 가독성이 향상됩니다.


의존성 주입의 단점은 무엇인가요?

처음 접하게 된다면 DI패턴과 관련된 개념을 학습해야하므로 시간이 더 걸리게 될 수 있습니다.
너무 많은 추상화가 이루어질 경우, 코드가 복잡해지고 이해하기 어려워져, 오히려 유지 보수가 힘들어질 수 있습니다.


의존성 주입 방식에는 어떤 것들이 있나요?

  • 생성자 주입: 의존성을 생성자의 매개변수로 주입하는 방식입니다. 생성자 호출 시점에 1회 호출을 보장합니다.
  • 세터 주입: 수정자 주입으로 필드값을 변경하는 setter를 통해 의존 관계를 주입합니다. 주입받는 객체가 변경될 가능성이 있을때 사용합니다.



테스트 코드


테스트 코드란 무엇인가요?

테스트 코드는 소프트웨어의 기능이 예상대로 작동하는지 검증하기 위해 작성된 코드입니다.
테스트 코드는 개발자가 작성한 기능이나 모듈이 의도한 대로 작동하는지 확인하는 데 사용됩니다.
이를 통해 버그를 조기에 발견하고, 코드 변경 시 기존 기능이 정상적으로 작동하는지 확인할 수 있습니다.
일반적으로 유닛 테스트, 통합 테스트, 기능 테스트 등 여러 유형이 있습니다.


유닛테스트와 통합테스트의 차이점은 무엇인가요?

유닛테스트: 애플리케이션의 가장 작은 단위인 함수나 메서드를 독립적으로 테스트 합니다.
특정 기능이 올바르게 작동하는지 확인하며, 외부 의존성을 최소화하기 위해 Mock객체를 이용할 수 있습니다.
통합테스트: 여러 모듈이나 컴포넌트가 함께 작동하는지를 테스트합니다.
통합테스트는 모듈 간의 상호작용을 검증하여, 전체 시스템이 기대한 대로 작동하는지 확인합니다.


테스트 코드 작성 시 고려해야 할 사항은 무엇인가요?

테스트는 명확하고 이해하기 쉬워야합니다. 테스트 이름은 해당 테스트가 무엇을 검증하는지 잘 설명해야 합니다.
각 테스트는 서로 독립적이어야 하며, 하나의 테스트가 다른 테스트에 영향을 주지 않도록 해야 합니다.
가능한 많은 코드 경로를 테스트해야 하며, 주요 기능과 예외 상황 모두 포함해야 합니다.


Mocking이란 무엇이며, 왜 필요한가요?

Mocking은 테스트 중에 실제 객체의 동작을 시뮬레이션하여 대체하는 것입니다.
Mock객체는 테스트하려는 코드의 외부 의존성을 제거하여 테스트의 독립성을 높입니다.

태그:

카테고리:

업데이트: