객체 지향적 설계 원칙 5가지
SRP(Single Responsibility Principle) : 단일 책임 원칙
클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
OCP(Open-Closed Principle) : 개방-폐쇄 원칙
확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
LSP(Likov Substitution Principle) : 리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
DIP(Dependency Inversion Principle) : 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
OOP의 장단점
장점
재사용성과 생산성이 높음.
신뢰성이 높아지고 유지보수가 용이함.
단점
객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 오버헤드가 발생한다.
REST 6가지 원칙에 대해 설명하라.
클라이언트/서버 구조 : 일관적인 인터페이스로 분리되어야 한다
무상태(Stateless) : 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다
캐시 처리 가능(Cacheable) : WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다.
계층화(Layered System) : 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다.
Code on demand (optional) : 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.
인터페이스 일관성 : 아키텍처를 단순화시키고 작은 단위로 분리(decouple)함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다.
RESTful API의 장단점
장점
- Open API를 제공하기 쉽다
- 멀티플랫폼 지원 및 연동이 용이하다.
- 원하는 타입으로 데이터를 주고 받을 수 있다.
- 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점
- 사용할 수 있는 메소드가 4가지 밖에 없다.
- 분산환경에는 부적합하다.
- HTTP 통신 모델에 대해서만 지원한다.
TDD란 무엇인가?
Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다.
==즉, 테스트가 코드 작성을 주도하는 개발방식==
1급 객체란 무엇인가?
- 변수나 데이터 구조안에 함수를 담을 수 있어서 함수의 파라미터로 전달할 수 있고, 함수의 반환값으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 함수를 리터럴로 바로 정의할 수 있다.
Immutable vs mutable
immutable
생성 후 변경 불가능한 객체로 immutable 객체는 set method가 없다. 또한 맴버 변수를 변경 불가능하고 return type이 void인 메소드가 없다.
대표적인 클래스 : String, Boolean, Integer, Float, Long
mutable
mutable 객체는 해당 객체의 값이 변경될 경우 값을 변경한다.
대표적인 클래스 : StringBuilder, StringBuffer
Reactive Programming이란?
함수형 프로그래밍 패러다임을 활용하는 것을 말하며, 반응형 프로그래밍은 기본적으로 스트림으로 본다. 스트림이란 값들의 집합으로 볼 수 있으며 제공되는 함수형 메소드를 통해 데이터를 immutable하게 관리할 수 있다.
MVC 의 각 컴포넌트의 역할
Controller
클라이언트의 요청을 받았을 대 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출. 모델이 업무를 마치면 그 결과를 뷰에 전달
Model
컨트롤러가 호출할 때. 요청에 맞는 역할을 수행
View
컨트롤러로부터 받은 모델의 결과값을 갖고 사용자에게 출력할 화면 만드는 일