객체 지향 프로그래밍. 이전에는 컴퓨터가 사고하는대로 프로그래밍을 하는 패러다임이였다면, 객체 지향 프로그래밍은 인간 중심적 프로그래밍 패러다임이라고 합니다.
학교를 예를 들면, 학생, 과목, 선생 등 현실 세계에서 객체들의 필요한 특징들을 뽑아와 프로그래밍하는 것을 말합니다. 이것을 객체 지향 프로그래밍의 특징인 추상화라고 합니다.
다른 키워드로는 클래스/인스턴스, 캡슐화, 상속성, 다형성이 있습니다.
추상화
공통의 속성이나 기능을 묶어 이름을 붙이는 것을 말합니다. (객체지향 관점에서는 클래스를 정의합니다.)
클래스/인스턴스
캡슐화
코드를 재수정 없이 재활용하기 위해 관련된 기능과 특성을 한 곳에 모으고 분류한 것입니다.
즉, 객체 지향 프로그래밍에서 기능과 특성을 한 곳에 모은 클래스를 캡슐에 분류한 것을 말합니다. 타인이 외부에서 조작을 대비해 외부에서 특정 속성이나 메서드를 사용자가 사용할 수 없도록 숨겨놓는 기능도 합니다.
상속성
부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있고, 기능의 일부분을 변경해야 할 경우 상속받은 자식클래스에서 해당 기능만 수정 및 정의하여 사용 할 수 있습니다.
다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 말합니다.
자식클래스가 부모클래스의 상속을 받고 있으면 부모의 속성을 가져다가 사용할 수 있지만,
자식클래스의 상황에 맞지 않을 때, Overriding을 통해 해당 클래스에서만 속성을 재정의 할 수 있습니다.
같은 이름의 함수를 사용하나, 매개변수의 종류를 다르게 선언하는 것으로 다양한 매개변수를 받을 수 있는 Overloading도 있습니다.
참고 > https://jeong-pro.tistory.com/95
객체 지향 프로그래밍에서는 멤버변수의 상태를 공유하고, 상태를 변경함으로써 예상치 못한 버그를 일으킬 수 있습니다.
이를 보안한 함수형 프로그래밍은 불변성 으로 선언한 값을 복사해 변경하므로, 반환되는 값이 예측이 가능하다는 장점이 있습니다. 또한, 상태를 공유하기보다는 반환되는 값을 이용해 함수를 사용하기에 프로그램의 실행에 있어 영향을 끼치지 않습니다.
이것을 고차 함수(High-Order Function), 순수 함수(Pure Function) 라고 합니다.
고차 함수는 1급 함수의 부분집합입니다. 따라서 함수를 변수에 할당할 수 있으며, 매개변수로 전달 할 수 있고 함수를 반환할 수도 있습니다.
이처럼 어떤 방법 으로 해야하는지를 나타내기보다 무엇 과 같은지 생각하는 것을 우리는 선언형 이라고 합니다.
참고 > https://velog.io/@kyusung/함수형-프로그래밍-요약
REST란
웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다.
구체적으로는 HTTP URI를 통해 어떤 자원인지 명시하고, HTTP Method(GET, POST, PUT, PATCH, DELETE)를 통해 해당 자원을 처리하도록 설계된 것입니다.
6가지 원칙
REST API란
API(Application Programming Interface)란 프로그램과 또 다른 프로그램을 연결해주는 일종의 다리라고 볼 수 있습니다. REST기반으로 서비스 API를 구현한 것입니다.
즉, HTTP 요청을 보낼 때, 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속입니다.
REST API 설계 기본 규칙
REST API 설계 규칙
응답상태코드
RESTful이란
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어입니다.
'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있습니다.
RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아닙니다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됩니다.
참고 >
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
둘다 함수 호출 방법으로 call은 단일인자가 들어가며, apply는 배열을 들어갑니다.
Framework
필수적인 코드, 데이터베이스 연동 등 개발을 할 때 필요한 기본 구조를 제공해줍니다. 개발자들은 그 위에서 코드를 작성해 Application을 완성해야합니다.
Library
Library는 특정 기능이나 함수들을 모은 도구입니다. 개발자들은 필요한 기능들을 찾아 Application에 추가해 이용할 수 있습니다.
차이점
Framework는 기본 구조 위에 필요한 코드들을 작성하여 Application을 완성하는 반면, Library는 프로그래머가 필요한 상황에 적절한 Library를 가져다 쓰는 것의 차이가 있습니다.
MVC 디자인패턴
간단한 웹사이트에서는 여전히 사용 가능하지만, Facebock같은 많은 Model들이 필요할 때 문제가 생겼습니다. 그 이유는, 양방향 통신으로 코드 하나를 변경하면 루프백되어 전체 코드에 영향을 미쳤습니다. 결국 코드를 디버깅하기 어려워지게 만들었습니다.
Flux 디자인패턴
Flux는 Action, Store, Dispatcher, View가 있습니다.
MVC와 다르게 Component간의 데이터의 흐름을 단방향 통신으로 강제화 했습니다.
차이점
참고 > https://dogbirdfoot.tistory.com/14