본문 바로가기

항해99_10기/105일의 TIL & WIL

[기술면접 스터디][230221] OOP와 REST API

Q1. 객체지향 프로그래밍(OOP)에 대해 설명해주세요. 알고있는 원칙이나 키워드를 언급해주세요
객체지향 프로그래밍은 프로그램의 상호 작용을 객체 집합으로 표현하며, 객체 내부에 선언된 메서드를 활용하는 프로그래밍 방식을 말합니다.

다른 프로그래밍 패러다임에 비해 처리 속도가 느리고, 설계에 많은 시간이 소요됩니다.

객체지향 프로그래밍의 특징으로는 추상화, 캡슐화, 상속성, 다형성이 있습니다. 또, 설계 원칙으로는 단일책임원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙의 SOLID 원칙이 있습니다.

 

  • OOP객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식
    • 설계에 많은 시간이 소요
    • 처리 속도가 다른 프로그래밍 패러다임에 비해 느림
  • OOP의 특징
    • 추상화(abstraction) : 복잡한 시스템에서 핵심적인 개념 또는 기능을 간추려내는 것
      •  예를 들어 동물이 가진 여러가지 특징 중, 프로그래밍에 필요한 특정 특징이나 기능만을 간추려 나타내는 것을 의미
    • 캡슐화(encapsulation) : 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 의미
    • 상속성(inheritance) : 상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장하는 것을 의미
      • 코드 재사용 측면, 계층적관계 생성, 유지 보수성 측면에서 중요
    • 다형성(polymorphism) : 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것
      • 오버로딩(overloading) : 같은 이름을 가진 메서드를 여러 개 두는 것으로, 메서드의 타입, 매개변수의 유형, 개수 등으로 여러 개를 둘 수 있으며, 컴파일 중에 발생하는 '정적' 다형성
        • JavaScript에서 오버로딩 : JS에서는 없는 개념이나, 하나의 메서드에서 분기처리를 통해 매개변수의 유형/개수의 변화를 핸들링 할 수 있음 (참고자료)
      • 오버라이딩(overriding) : 주로 메서드 오버라이딩을 말하며, 상위 클래스에서 상속 받은 메서드를 하위 클래스가 재정의 하는 것을 의미, 런타임 중 발생하는 '동적' 다형성
  • 설계 원칙(SOLID)
    • 단일책임원칙 (SRP, Single Responsibility Principle) : 모든 클래스는 각각 하나의 책임만 가져야 하는 원칙
      • 게임을 개발할 때, Rooms 클래스는 room에 관한 클래스이고, room 생성/삭제/변경 등에 대한 로직을 수행하며, Rooms 클래스를 수정할 때도, 이와 관련된 수정을 진행 함
    • 개방-폐쇄 원칙 (OCP, Open Closed Principle) : 유지 보수 사항이 생긴다면 코드를 쉽게 확장할 수 있도록 하고 수정할 때는 닫혀 있어야 하는 원칙
      • 기존의 코드는 잘 변경하지 않으면서도 확장은 쉽게 할 수 있어야 함
    • 리스코프 치환 원칙 (LSP, Liskov Substitution Principle) : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함을 의미
      • 부모 객체를 자식 객체로 바꾸어도 시스템이 문제 없이 돌아가도록 만드는 것을 의미
    • 인터페이스 분리 원칙 (ISP, Interface Segregation Principle) : 하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 하는 원칙
      • SRP와 거의 비슷한 목표를 가지지만, SRP는 클래스에, ISP는 인터페이스에 적용함
    • 의존 역전 원칙 (DIP, Dependency Inversion Principle) :  자심보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉰은 것의 변화에 영향을 받지 않게 하는 원칙을 말함
      • 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 함

내용 출처 : 주홍철, 「면접을 위한 CS전공지식 노트」, 길벗(2022), p.59-63

 

 

Q2. REST API란 무엇인가요? 프로젝트에 REST API를 사용한 이유가 무엇인가요? REST API 말고 다른 비교할만한 것을 알고 있나요?
REST API란 REST 설계 원칙을 전제로 한 API 통신 규칙을 의미합니다. REST(Representational State Transfer)는 소프트웨어 개발 아키텍처 스타일이며, HTTP 프로토콜을 준수합니다. REST는 URI로 자원을 표기하고, HTTP method를 사용합니다. 또, 6가지 디자인 원칙이 존재하며, 유니폼 인터페이스, 무상태성, 캐시 가능, 자체 표현 구조, 클라이언트-서버 구조, 계층형 구조 원칙이 있습니다. 

프로젝트에 REST API를 사용한 이유는, API를 체계적으로 관리하기 쉽고, URI만 봐도 무슨 요청인지 쉽게 알 수 있으며, JSON을 포함한 다양한 형식의 메시징을 제공하여 유연한 개발이 가능하기 때문입니다.

REST 외에도 SOAP 프로토콜이 존재하는데 SOAP은 다른 언어로 다른 플랫폼에서 빌드된 앱끼리 통신할 수 있도록 설계된 최초의 표준 프로토콜로, 보안과 안정적인 데이터베이스 트랜잭션의 기본 속성인 ACID(Atomicity, Consistency, Isolation, Durability)를 준수합니다. SOAP API는 HTTP, SMTP, TCP 등 다양한 애플리케이션 레이어 프로토콜을 통해 처리할 수 있으나, 메시지를 XML 형식으로만 반환하고, 브라우저에서 캐싱이 불가능합니다.

보통, 웹 서비스에는 경량화 되어 있고, 유연한 구현을 제공하는 REST를 선호하며, 은행 및 기업 등, 높은 수준의 보안, 신뢰할 수 있는 메시징 앱 또는 ACID를 준숳야 하는 경우 SOAP 방식을 선호합니다. 


 

SOAP REST 차이, 두 방식의 가장 큰 차이점은? - wishket

API는 방식에 따라 'SOAP REST 차이'가 있다는데, 이 둘의 차이점은 과연 무엇일까요? 각각 어떤 장점들이 있는지, 어떤 상황에 무엇이 더 잘 맞는지 알려드리겠습니다:)

blog.wishket.com

 

 

 

Top REST API Interview Questions and Answers | AppMaster

This article discusses the most commonly asked REST API interview questions to prepare developers so they can win job interviews as a developer.

appmaster.io