객체지향 프로그래밍(Object-Oriented Programming, OOP)란, 프로그램을 여러 개의 객체 단위로 보는 컴퓨터 프로그래밍의 패러다임 중 하나다.
객체란, 일상생활에서 우리가 인식할 수 있는 모든 사물이며, 속성(field)과 행위(method)로 구성되어 있다.
객체를 생성하기 위한 설계도(?)와 같다.
다형성이란 어떤 객체의 속성이나 기능을 상황에 따라 여러 가지 형태를 가질 수 있는 것을 의미한다. 다형성의 예로는 오버라이딩, 오버로딩, 형변환(캐스팅)이 존재한다.
상속이란 상위 클래스의 모든 것을 하위 클래스가 이어받는 것을 의미한다. A 클래스를 상속 받은 B 클래스는 A 클래스의 속성과 기능을 사용할 수 있다.
캡슐화란 서로 연관있는 속성과 기능을 하나의 캡슐(클래스)로 만드는 것을 말한다. 캡슐화를 진행하게 되면, 정보 은닉도 가능하다. 접근 제한자를 통해 외부로부터 내부 동작을 보호할 수 있게 된다.
추상화란 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다. 자바에서는 추상 클래스와 인터페이스를 통해 구현할 수 있다.
말 그래도 하나의 책임만을 가져야 한다는 것이다. 하나의 클래스는 단 하나의 책임만을 가져야 하며, 여기서 책임은 하나의 기능이라고 생각하면 된다. 즉, 하나의 클래스는 하나의 기능을 맡도록 여러 개의 클래스를 생성하는 것을 의미한다. 만약, 하나의 클래스가 여러 기능을 맡고 상태로 수정이 발생했을 때, 연관되어 있는 코드는 모두 수정할 수 밖에 없어진다.
개방 폐쇄 원칙은 '확장에는 열려있어야 하며, 수정에는 닫혀있어야 한다'를 의미한다. 기능 추가 시, 손쉽게 확장할 수 있도록 하며, 수정 시, 객체에 대해 직접적으로 수정하도록 제한하는 것이다.
리스코프 치환 원칙은 하위 타입은 상위 타입으로 교체될 수 있어야 한다는 원칙이다. 즉, 업캐스팅을 진행해도 상위 타입의 동작을 그대로 수행할 수 있어야 한다는 의미다.
인터페이스 분리 원칙은 인터페이스의 단일 책임을 강조한다. 요구 사항에 적합한 인터페이스만을 제공하는 것을 목표로 한다.
의존 역전 원칙이란 어떤 클래스를 참조해야한다면, 서브 타입을 참조하는 것이 아닌 상위 타입을 참조하라는 의미다. 즉, 변화하기 쉬운 것보단 변화하기 어려운 것에 의존하라는 의미다.
REST(Representational State Transfer) 의 약자로 자원을 통해 해당 자원의 상태를 주고 받는 모든 것을 의미한다. 즉, 자원의 표현으로 상태를 전달한다. 상태 전달은 데이터가 요청되는 시점에서 자원의 상태를 전달하는 것이며, 일반적으로 JSON or XML을 통해 주고 받는다.
정리하자면, URI를 통해 자원을 명시하고 HTTP Method를 통해 CRUD 기능을 적용한 것이 REST API다.
먼저, URI, HTTP Method를 통해 구현되어 있기 때문에 자원의 상태를 직관적으로 알 수 있습니다. 또한, 클라이언트와 서버를 명확하게 분리할 수 있기 때문에 적용하게 되었습니다.
API에 대한 쿼리 언어이다. 클라이언트가 필요한 데이터에 대해 쿼리를 GraphQL로 보내면, 해당 쿼리문에 알맞은 정보를 넘겨준다.
흔히 HTTP, HTTPS 등 XML 기반의 메시지에 대해 컴퓨터 네트워크 상에서 교환하는 형태의 프로토콜이다. 가장 큰 특징으로는 원격 프로시져 호출 패턴으로 네트워크 노드(클라이언트)에서 다른 노드 쪽(서버)으로 메시지를 요청하고 서버는 메시지에 대해 즉시 응답하게 된다.