기본 지식

코린이·2022년 4월 10일
0

기초 지식

목록 보기
1/3

객체 지향 프로그래밍

객체 지향 프로그래밍 패러다임을 살펴보면, 중심은 컴퓨터에 있었다. 컴퓨터가 사고하는데 프로그래밈을 하는것이다. 하지만 객체 지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 볼수 있다. 즉, 현실 세계에 존재하는 것을 프로그래밍으로 옮겨와 프로그래밍을 하는것을 말한다.

현실 세계의 사물들을 객체라고 보고 그 객체로 부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것이다. 이것을 추상화 라고 한다.

객체 지향 프로그래밍으로 코드를 작성하면 코드에 대한 재사용성이높다. 자주 사용되는 로직을 라이브러리로 만들어두면 계속해서 사용할 수 있으며, 또한 예외 상황에 맞게 라이브러리를 만들어 두면 개발자가 실수를 하더라도 컴파일중 에러를 잡아낼수 있어서 버그의 발생률도 줄어든다.

또한 내부적으로 어떻게 동작하는지 몰라도 개발자는 라이브러리가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아지게 된다. 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다. 또한 데이터 모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 보다 명확하게 파악하여 프로그래밍 할 수 있다.

객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead 가 발생하게 된다. 하지만 이것은 하드웨어의 발전으로 많은 부분 보완되었다. 객체 지향 프로그래밍의 치명적인 단점은 함수형 프로그래밍 패러다임의 등장 배경을 통해서 알 수 있다. 바로 객체가 상태를 갖는다는 것이다. 변수가 존재하고 이 변수를 통해 객체가 예측할 수 없는 상태를 갖게 되어 애플리케이션 내부에서 버그를 발생시킨다는 것이다. 이러한 이유로 함수형 패러다임이 주목받고 있다.

객체 지향적 설계 원칙

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Principle) : 의존 역전 원칙고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

**RESTful API**

REST란, REpresentational State Transfer 의 약자이다. 여기에 ~ful 이라는 형용사형 어미를 붙여 ~한 API 라는 표현으로 사용된다. 즉, REST 의 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful'하다라고 표현할 수 있다.

REST가 디자인 패턴이다, 아키텍처다 많은 이야기가 존재하는데, 하나의 아키텍처로 볼 수 있다. 좀 더 정확한 표현으로 말하자면, REST 는 Resource Oriented Architecture 이다. API 설계의 중심에 자원(Resource)이 있고 HTTP Method 를 통해 자원을 처리하도록 설계하는 것이다.

REST 6 가지 원칙

  • Uniform Interface
  • Stateless
  • Caching
  • Client-Server
  • Hierarchical system
  • Code on demandcf) 보다 자세한 내용에 대해서는 Reference 를 참고해주세요.

RESTful 하게 API 를 디자인 한다는 것은 무엇을 의미하는가.(요약)

  1. 리소스 와 행위 를 명시적이고 직관적으로 분리한다.
  • 리소스는 URl로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
  • 행위는 HTTP Method로 표현하고, GET(조회)POST(생성)PUT(기존 entity 전체 수정)PATCH(기존 entity 일부 수정)DELETE(삭제)을 분명한 목적으로 사용한다.
  1. Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.
  • Entity 에 대한 내용은 body 에 담는다.
  • 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등은 header 에 담는다.
  • header 와 body 는 http header 와 http body 로 나눌 수도 있고, http body 에 들어가는 json 구조로 분리할 수도 있다.
  1. API 버전을 관리한다.
  • 환경은 항상 변하기 때문에 API 의 signature 가 변경될 수도 있음에 유의하자.
  • 특정 API 를 변경할 때는 반드시 하위호환성을 보장해야 한다.
  1. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
  • 브라우저는 form-data 형식의 submit 으로 보내고 서버에서는 json 형태로 보내는 식의 분리보다는 json 으로 보내든, 둘 다 form-data 형식으로 보내든 하나로 통일한다.
  • 다른 말로 표현하자면 URI 가 플랫폼 중립적이어야 한다.

장점

  1. Open API 를 제공하기 쉽다
  2. 멀티플랫폼 지원 및 연동이 용이하다.
  3. 원하는 타입으로 데이터를 주고 받을 수 있다.
  4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

단점

  1. 사용할 수 있는 메소드가 4 가지 밖에 없다.
  2. 분산환경에는 부적합하다.
  3. HTTP 통신 모델에 대해서만 지원한다.

출처 : https://github.com/JaeYeopHan/Interview_Question_for_Beginner

profile
iOS 개발자 꿈나무

0개의 댓글