목차
1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
객체지향 프로그래밍이란? (Object-Oriented Programming, OOP)
객체지향 프로그래밍 oop는 객체의 관점에서, 객체라는 단위를 이용해 로직을 구성하는 방식을 말합니다. 여기서 말하는 객체는 프로그램의 동작의 주체가 되는 요소로, 서로 다른 객체 간 상호작용을 통해 프로그램을 구성합니다.
이 객체지향 프로그래밍은 3가지의 특징을 가지고 있습니다. (캡슐화, 상속, 다형성)
- 캡슐화
- 특정 행동이나 기능에 대해서 관련된 객체와 메서드 등을 하나로 묶을 수 있다. 캡슐화를 통해서 정보은닉의 이점을 얻을 수 있는데, 정보 은닉은 개체 내부의 세부 정보를 다른 개체로부터 숨기는 작업을 말합니다.
- 상속
- 상위 개체에서 속성 및 메서드를 가지고와서 사용할수도, 새롭게 재정의 할 수 있습니다. 상속의 기능을 이용하면 코드의 중복을 줄일 수 있습니다.
- 다형성
- 객체가 여러 가지 형태나 행동을 가질 수 있도록 하는 것인데, 형태는 같지만 다른 파라미터를 전달받으면 개별적인 형태로 취급합니다. 다형성을 제공함으로써 중복된 요소를 제거할 수 있고, 개발의 편의성을 높여줍니다. 다형성의 성질을 이용하기 위해선 오버라이딩(Overriding)과 오버로딩(Overloading)을 사용하면 됩니다.
- 오버라이딩 : 부모 클래스에서 상속받은 내용을 자식 클래스에서 재정의해서 사용하는 것
- 오버로딩 : 같은 메서드 이름을 가지고 있지만, 매개변수나 데이터 타입을 이용해 다르게 사용하는 것
- 객체가 여러 가지 형태나 행동을 가질 수 있도록 하는 것인데, 형태는 같지만 다른 파라미터를 전달받으면 개별적인 형태로 취급합니다. 다형성을 제공함으로써 중복된 요소를 제거할 수 있고, 개발의 편의성을 높여줍니다. 다형성의 성질을 이용하기 위해선 오버라이딩(Overriding)과 오버로딩(Overloading)을 사용하면 됩니다.
이렇게 사물을 객체화하고, 객체지향 프로그래밍을 사용하게되면 얻을 수 있는 장점은 다음과 같습니다.
- 간편한 유지보수
- 객체라는 단위를 사용해서 프로그램을 구성하기에, 중복 코드의 관리가 수월해지며, 문제가 있거나, 수정이 필요로 할 때, 해당 객체만 원하는 방식으로 처리하면된다. 그래서 유지보수가 간편하다.
- 규모가 큰 프로그램의 구성에 유리
- 객체와 모듈의 특징을 이용해 프로그램을 구성하기에 규모가 큰 프로그램의 구성에서 유리한 이점을 가지고 있다.
- 코드의 재사용성
- 모듈화 된 객체를 사용해서, 해당 객체가 필요한 부분에 이식만 하면 됩니다. 그래서 재사용성이 뛰어납니다.
- 모듈화 된 객체를 사용해서, 해당 객체가 필요한 부분에 이식만 하면 됩니다. 그래서 재사용성이 뛰어납니다.
이렇게 사물을 객체화하고, 객체지향 프로그래밍을 사용하게되면 얻을 수 있는 단점은 다음과 같습니다.
- 코드의 잠재적인 복잡성 증가(Complexity)
- 객체지향 프로그래밍의 복잡한 개념을 이해하고, 사용하는데 있어서 코드의 구조를 파악하기 어려울 수 있으며, 다양한 개념을 적용하면 코드가 복잡해질 수 있습니다.
- 설계 역량의 요구 및 오버디자인(Over-Design)
- 모듈, 객체간의 관계를 설계할 수 있는 능력이 있어야 합니다. 그래서 주어진 문제를 해결하는 초점을 넘어서 계층간 구조나 상속 관계, 인터페이스 등을 설계하는데 많은 시간을 소모하는 오버 디자인으로 이어질 수 있습니다.
- 비교적 느린 속도(Performance)
- 절차지향과 다르게 객체지향은 여러 객체가 의존하고 있는 관계로 대채적으로 속도가 느립니다. 다른 절차지향 언어에 비해 많은 메모리를 사용할 수 있으며 더 많은 오버헤드와 추상화를 요구합니다. 그래서 속도가 느려질 수 있습니다.
그래서 객체지향을 올바르게 이용하고 사용하기 위해서 수립한 원칙을 이해해야합니다. 우리는 이를 객체지향 5원칙 (SOLID)라고 말합니다. 필수는 아니지만 규칙을 준수할 수 있도록 노력해야하며, 적용을 통해서 올바른 객체지향을 지향해야합니다.
1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
2. 개방 - 폐쇄 원칙 (Open - Closed Principle, OCP)
3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
5. 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
해당 내용에 대해서 과거에 정리한 글이 있는데, 참고하겠습니다.
https://jipang9-greedy-pot.tistory.com/96
2. REST API란 무엇인가요? (모두가 답변) 프로젝트에 REST API를 사용한 이유가 무엇인가요? (프로젝트에 REST API를 사용하셨을 경우에만 추가 답변), REST API 말고 다른 비교할만한 것을 알고 있나요?
Rest api란? (Representational State Transfer, REST)
대표적인 상태의 전달이라는 의미를 가진 Rest 는 웹의 HTTP 프로토콜과 URI를 사용해 데이터의 화면을 리턴해주는 방식이 아닌 사용자가 필요한 데이터 결과만 리턴해주는 방식입니다.
Rest의 특징은 다음과 같습니다.
- 유니폼 인터페이스 (Uniform Interface)
- HTTP의 표준만 따르면, 특정 기술에 종속되지 않고 범용적으로 사용가능한 인터페이스 스타일입니다.
- 무상태성/스테이트리스(Stateless)
- 작업의 상태를 따로 저장하지않고, 관리하지 않습니다. 그냥 서버를 통해 들어오는 요청만 처리하기에 자유도가 높고 불필요한 정보를 관리하지 않아 구현이 단순합니다.
- 캐싱가능(Cacheable)
- REST는 HTTP의 웹 표준을 사용합니다. 그래서 캐싱을 통해 성능상의 이점을 얻을 수 있습니다.
- 자체 표현 구조(Self - descriptiveness)
- api 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조로 되어있습니다.
- 클라이언트 서버 구조 ( Client - Server 구조 )
- 서버는 API, 클라이언트는 사용자 인증이나 컨텍스트 등을 관리하는 구조로 되어있어 역할이 구분되어서 개발할 내용이 명확해지고 의존성이 줄어듭니다.
프로젝트에 REST API를 사용한 이유가 무엇인가요?
서비스를 구성하기 전 thymeleaf와 같이 html을 렌더링해서 서버에서 전달할 것이냐(SSR), CSR처럼 클라이언트에서 렌더링 할 것이냐에 관한 논의가 있었습니다. 백엔드 개발자 입장에서는 API 설계를 주 업무로 하게 될텐데, CSR 방식이 최대한 시간을 아끼고 더 많은 시도를 해볼 수 있을 것이라 생각했고 fit에 맞다고 생각했습니다. 그리고 직접 http 통신을 이용해 다양한 에러를 만나볼 수 있는 기회라 판단해서 rest 방식을 선택했습니다.
REST API 말고 다른 비교할만한 것을 알고 있나요?
일반적으로 GraphQL과 rest를 많이 비교합니다.
페이스북에서 만든 이 GraphQL은 REST의 문제를 해결하기 위해 만들어졌습니다. REST의 방식은 api를 이용해 클라이언트와 서버가 통신을 하는데, 데이터 포멧을 json을 이용합니다. 그러나 이 REST 방식은 단점이 존재합니다.
먼저 Over-fetching입니다. 이는 API를 호출 시 필요보다 많은 불필요한 데이터들을 가지고 오는 것입니다. 이로인해 서버와 네트워크에는 불필요한 자원이 추가로 사용되는 단점이 있습니다.
다음은 Under-fetching입니다.
하나의 end point로 충분한 데이터를 받지 못해서, 두 개 이상의 endPoint를 이용해야합니다. 이로 인해 2개 이상의 api를 호출해야할 경우들이 생기며 네트워크에 오버헤드가 발생합니다. 또한 2개 이상의 api를 요청하기에 속도가 느릴 수 있습니다.
이러한 REST의 단점을 개선한 방식이 GraphQL입니다.
GraphQL은 필요한 정보만 요청할 수 있는 쿼리 언어입니다. 쿼리를 이용해 데이터를 리턴하기에, fit에 맞는 데이터만 요청할 수 있습니다. 그래서 HTTP의 요청의 횟수를 줄일 수 있는 장점과 응답의 사이즈를 줄일 수 있는 장점이 있습니다.
금일 프론트엔드 기술면접 질문
- 프론트엔드
- 웹페이지가 브라우저에 랜더링되는 과정을 설명해주세요.
- Restful API에 대해 설명해주세요. GET,POST 외에 알고있는 메소드와 그 기준을 설명해주세요. RESTful API 가 아닌 것들은 어떤게 있나요?
- 웹페이지가 브라우저에 랜더링되는 과정을 설명해주세요.
'기술면접 관련 및 참고하기' 카테고리의 다른 글
기술 면접 스터디 3일차 - ( MSA, 제네릭) (0) | 2023.03.30 |
---|---|
기술면접 스터디 - 2일차 (DI, Index) (0) | 2023.03.28 |
Test Code 2부 (0) | 2023.03.22 |
SSR(Server Side Rendering) 그리고 CSR(Client Side Rendering) (0) | 2023.03.22 |
Java 8 vs Java 11 ? (0) | 2023.03.05 |