티스토리 뷰
[CS 코딩 인터뷰 대비 1]OOP / Restful API / TDD / 함수형프로그래밍 / MVC / git
감자형 2018. 10. 9. 01:15안녕하세요? 감자코딩에 감자개발자입니다. 이번 시간에는 요새 제가 공부중인 CS에 대한 개념을 정리해 볼것인데요. 많이들어본 개념같으면서도 잘 알지못한 부분에 대해서 정리해보았습니다. 파트별로 작성해 나갈 계획이고, 코딩인터뷰에 도움이 많이 되셨으면 좋겠습니다. 그럼 이제 시작하겠습니다.
1.객체지향프로그래밍(Object Oriented Progamming)의 의미와 객체지향적 설계원칙을 설명하시오.
OOP 개념 )
현실세계를 프로그래밍으로 옮겨와서 프로그래밍하는것을 말한다. 현실세계의 사물을 하나의 객체라고 보고 개발하고자하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는것을 말한다.
OOP 특징)
1. 추상화 – 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업
예) 아우디, 벤츠 -> 하나의 자동차로 추상화
2. 캡슐화 – 높은응집도와 낮은 결합도를 유지할수있도록 설계해야 요구사항 변경시 유연하게 대처가능(대표적인것: 정보은닉)
- 응집도(하나의 클래스안에서)
- 결합도(다른클래스와의 관계)
3. 일반화 – 여러 개체들이 가진 공통적인 특징들을 부각시켜 개념이나 법칙으로 성립시키는 과정을 말함. 대체적으로 상속관계를 뜻함
(자동차 부모클래스) – (아우디 ,벤츠 자식클래스)
4. 다형성
다형성은 서로 다른 클래스의 객체가 같은 메시지를 받았을때 각자의 방식으로 동작하는 능력
객체지향적(OOP) 설계원칙을 설명하시오)
SRP(Single Responsibility Principle) 단일 책임원칙
클래스는 단하나의 책임을 가져야하며, 변경하는이유는 단하나여야한다.
OCP(Open Close principle) 개방 폐쇄 원칙
확장에는 열려있어야하고 변경에는 닫혀있어야한다.
LSP(Liskov Substitution Principle) 리스코브 치환법칙
상위 타입의 객체를 하위타입의 객체로 변환하여도 상위타입으로하는 프로그램은 정상적으로 동작하여야한다.
ISP(Interface Segregation Priciple)
인터페이스는 그 인터페이스를 사용하는 클라이언트 기준으로 분리해야한다.
DIP(Dependency Inversion Principle)
고수준 모듈은 저수준 모듈에서 의존하면 안된다.
2. Restful API란 무엇인가?
Rest란?)
(Representational State Transfer) ~한 API
기본원칙을 잘 지킨 서비스 디자인은 Restful하다라고 표현한다.
Rest는 하나의 디자인 패턴이기도 하며 하나의 아키텍쳐로서 표현된다.
(Resource Oriented Architecture)
API 설계 중심에 (Resource)가 있으며, HTTP Method를 통해 자원을 처리하도록 설계하는 것
Rest특징?)
1) Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
2) Stateless (무상태성)
REST는 무상태성 성격을 갖습니다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다.
3) Cacheable (캐시 가능)
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능합니다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능합니다.
4) Self-descriptiveness (자체 표현 구조)
REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것입니다.
5) Client - Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
6) 계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 합니다.
Restful하게 API를 디자인한다는것은?)
1. 리소스와 행위를 명시적이고 직관적으로 분리한다
리소스 = URI
행위 = HTTP Method 표현, GET(조회), POST생성, PUT(기존 entity 전체 수정) PATCH(기존 entity 일부 수정), Delete(삭제)
2. Message는 Header와 Body를 명확하게 분리해서 사용한다.
Entity 내용 = Body
애플리케이션 서버 행동 컨트롤정보(API버전정보),응답 MIME타입 = Hader
3. API버전 관리를 한다.
환경은 항상 변하기 때문에 API의 signature가 변경 유의, 특정 API를 변경할때는 반드시 하위호환성을 보장해야한다.
4. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
브라우저 = form-data형식으로 submit
서버 = Json형태로 보내는 식의 분리보다는 json으로 보내든, 둘다 form-data형식으로 보내든 하나로 통일해야한다.
URI가 플랫폼 중립적이어야 한다.
Restful API 장점)
1. Open API제공하기 쉽다
2. 멀티플랫폼 지원 및 연동이 용이하다
3. 원하는 타입으로 데이터를 주고 받을 수 있다.
4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
Restful API 단점)
1. 사용할 수 있는 메소드가 4가지 밖에 없다
2. 분산환경에는 부적합하다
3. HTTP통신 모델에 대해서만 지원한다.
3. TDD란 무엇인가
개념)
Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트 케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한후, 리팩토링 과정
TDD 장점)
1) 객체지향적이고 확장 가능이 용이한 코드
2) 재설계의 시간을 단축시킬 수 있는 코드
3) 디버깅 시간이 단축되는 코드
4. 함수형 프로그래밍
immutable vs mutable 비교)
immutable이란? 말그대로 변경 불가능함을 의미한다 immutable 객체는 객체가 가지고 있는 값을 변경할 수 없는 객체를 의미하여 값이 변경될 경우 새로운 객체를 생성하고 변경된 값을 주입하여 반환하여한다.
Mutable이란? 객체는 해당 객체의 값이 변경될 경우 값을 변경한다.
함수형 프로그래밍 패러다임에서의 함수(function)의 의미)
일급객체(first class citizen)란?
1. 변수나 데이터 구조안에 함수를 담을 수 있어서 함수의 파라미터로 전달 할 수 있고, 함수의 반환값으로 사용할 수 있다.
2. 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다
3. 함수를 리터럴로 바로 정의할 수 있다.
리터럴 이란?
코드상에서 데이터를 표현하는 방식
반응형 프로그래밍(Reactive Programming)이란?)
선언형 프로그래밍(declarative programming)이라고도 불리며, 명령형 프로그래밍의 반대말이다. 또 함수형 프로그래밍 패러다임을 활용하는것을 말한다. 반응형 프로그래밍은 기본적으로 모든것을 스트림(Stream)으로 본다.
스트림이란? 값들의 집합으로 볼 수 있으며, 제공되는 함수형 메소드를 통해 데이터를 immutable하게 관리 할 수 있다.
5. MVC패턴이란?
MVC패턴의 개념)
Controller
일종의 조정자. 클라이언트의 요청을 받았을때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 또한 클라이언트가 보낸 데이터가 있다면, 모델에 전달하기 쉽게 데이터를 가공한다. 모델이 업무를 마치면 그결과를 뷰에게 전달한다.
Model
컨트롤러가 호출할때, 요청에 맞는 역할을 수행한다. 비지니스로직을 구현하는 영역에서 응용프로그램에서 데이터를 처리하는 부분이다. 비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부라고 할 수 있다. DB에 연결하고 데이터를 추출하거나 저장,삭제,업데이트,변환 등의 작업을 수행한다. 후속 상태의 변화가 있을때 컨트롤러와 뷰에 통보해 후속 조치 명령을 받을 수 있게한다.
View
컨트롤러로 부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 한다. 만들어진 화면을 웹브라우저에 전송하여 웹브라우저가 출력하게 되는것. 화면에 표시되는 부분으로 추출한 데이터나 일반적인 텍스트 데이터를 표시하거나 입력폼 또는 사용자와의 상호작용을 위한 인터페이스를 표시하는 영역이다.
MVC패턴의 구조를 설명하시오.)
기본 동작 원리( exam : Java(Spring) /JSP)
1. 웹 브라우저가 웹 서버에 웹 애플리케이션 실행을 요청한다. (MVC 구조가 WAS라고 보면 된다.)
2. 웹 서버는 들어온 요청을 처리할 수 있는 서블릿을 찾아서 요청을 전달한다.(Matching)
3. 서블릿은 모델 자바 객체의 메서드를 호출한다.
4. 데이터를 가공하여 값 객체를 생성하거나, JDBC를 사용하여 데이터베이스와의 인터랙션을 통해 값 객체를 생성한다.
5. 업무 수행을 마친 결과값을 컨트롤러에게 반환한다.
6. 컨트롤러는 모델로부터 받은 결과값을 View에게 전달한다.
7. JSP는 전달받은 값을 참조하여 출력할 결과 화면을 만들고 컨트롤러에게 전달한다.
8. 뷰로부터 받은 화면을 웹 서버에게 전달한다.
9. 웹 브라우저는 웹 서버로부터 요청한 결과값을 응답받으면 그 값을 화면에 출력한다.
6. Git VS Github
1. Git은 Git레포지토리라고 불리는 데이터 저장소에 소스 코드등을 넣어서 이용하는것으로, 이러한 Git 레포지토리를 인터넷상으로 제공하는 서비스가 Github이다. Github에서 공개되는 소스코드는 모두 git으로 관리가 됩니다.
이상으로 감자코딩의 감자개발자는 CS 정리 - 1를 마치도록하겠습니다. 감사합니다.
'Computer Science' 카테고리의 다른 글
[CS 코딩 인터뷰 대비 2] 네트워크(HTTP/HTTPS/GET/POST/TCP/UDP) (0) | 2018.11.11 |
---|
- Total
- Today
- Yesterday
- node.js
- 리버싱
- BFS
- db
- 백준알고리즘
- 감자코딩
- 알고리즘
- 안드로이드
- C언어
- 감자개발자
- 초보자를 위한 C언어 300제
- 백준
- programming
- C langauge
- 개발하는 관광이
- 복습
- node
- Controller
- 코드엔진
- Spring
- 학교
- 프로그래밍
- 머신러닝
- 노드
- MVC
- 텐서플로우
- TensorFlow
- Algorigm
- 스프링
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |