[CS/면접준비] 개발상식

bye9·2021년 3월 7일
1

CS

목록 보기
1/10

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Development_common_sense

좋은 코드

  • 읽기 쉬운 코드
  • 중복이 없는 코드
  • 테스트가 용이한 코드

객체 지향 프로그래밍(Object Oriented Programming)

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

장점

  • 코드에 대한 재사용성이 높다.
  • 객체 단위로 코드가 나눠져 작성되어 디버깅이 쉽고 유지보수에 용이하다.

단점

  • 객체가 예측할 수 없는 상태를 가지게 되어 애플리케이션 내부에서 버그 발생시킴 -> 함수형 프로그래밍 등장

절차지향 프로그래밍 vs 객체지향 프로그래밍

절차지향 프로그래밍

  • 물이 위에서 아래로 흐르는 것처럼 순차적인 처리를 중요시하는 프로그래밍 기법이다.
  • 가장 대표적인 언어로 C언어가 있다.
  • 컴퓨터의 처리구조와 유사해 실행속도가 빠르다.
  • 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.

객체지향 프로그래밍

  • 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법
  • 가장 대표적인 언어로 Java가 있다.
  • 캡슐화, 추상화, 상속, 다형성과 같은 기법을 이용할 수 있다. 다형성은 동일한 키보드의 키가 다른 역할을 하는 것처럼 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 의미한다.
  • 절치지향 언어보다 실행속도가 느리다.

*캡슐화: 데이터를 캡슐화함으로써, 객체의 데이터를 외부에서 직접 접근하지 못하게 하는 것
*추상화: 객체들이 가진 공통의 특성들을 파악하고 불필요한 특성들을 제거하는 과정
Ex)개, 고양이 객체를 동물이라는 것으로 추상화
*상속: 부모 객체가 자식 객체에게 필드와 메소드를 물려주어 사용할 수 있도록 해줌
*다형성: 객체가 다양한 형태로 표현될 수 있다.


RESTful API

REST를 기반으로 서비스 API를 구현한 것.
rest=representational state transfer

API Application Programming Interface
응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.(프로그램들이 서로 상호작용하는 것을 도와주는 매개체)

REST

  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것.
  • HTTP url을 통해 자원을 명시하고 HTTP 메소드(POST,GET,PUT,DELETE)를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것.
  • 웹의 장점을 최대한 활용할 수 있는 아키텍쳐
  • 네트워크 상에서 클라이언트와 서버 사이의 통신 방식 중 하나

REST가 필요한 이유

  • 애플리케이션 분리 및 통합
  • 다양한 클라이언트의 등장

REST 구성

  • 자원(URL)
    모든 자원에 고유한 ID(HTTP URL)가 존재하고, 이 자원은 서버에 존재.
    클라이언트는 URL을 이용해 자원을 지정하고 해당 자원의 상태에 대한 조작을 서버에 요청
  • 행위(HTTP 메소드)
    HTTP 프로토콜의 메소드(POST,GET,PUT,DELETE)를 사용한다.
  • 표현
    클라이언트가 자원의 상태에 대한 조작을 요청하면 서버는 이에 적절한 응답을 보낸다.
    JSON, XML을 통해 데이터를 주고 받는 것이 일반적.

REST 특징

  • Uniform interface
    URL로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행.

  • Client-Server 구조
    REST 서버: API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.
    클라이언트: 사용자 인증이나 세션, 로그인 정보 등을 직접 관리하고 책임진다.
    -> 서로 간 의존성이 줄어든다.

  • Stateless(무상태)
    작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
    세션, 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API서버는 들어오는 요청만을 단순히 처리한다.
    -> 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않아 구현이 단순해짐.

  • Cacheable(캐시 처리 가능)
    웹 표준 HTTP프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라 그대로 활용 가능.
    HTTP가 가진 캐싱 기능 적용 가능, HTTP프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용해 구현.

    캐시: 이미 가져온 데이터나 계산된 결과값의 복사본을 저장함으로써 처리 속도를 향상시키며, 이를 통해 향후 요청을 더 빠르게 처리
  • 계층형 구조
    다중 계층으로 구성될 수 있고, Proxy, 게이트웨이 같은 네트워크 기반의 중간매체 사용가능.

  • self-descriptiveness(자체 표현 구조)
    REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어있다.

참고
https://meetup.toast.com/posts/92, https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html


TDD(Test-Driven Development)

매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스.
개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 간단한 코드를 작성한다. 그리고 해당 코드를 상황에 맞게 리팩토링한다.
-> 테스트 주도 개발 방식

장점

  • 객체지향적인 코드 개발
    코드의 재사용성을 기반으로 작성.
  • 설계 수정 시간의 단축
  • 디버깅 시간의 단축
  • 유지 보수의 용이성

단점

  • 방대한 코드량
  • 테스트 코드 작성 어려움
  • 모든 상황에 대한 테스트 코드 작성 불가

함수형 프로그래밍

자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나.

명령형 프로그래밍(절차지향, 객체지향) - 어떻게 할 것인지를 설명
선언형 프로그래밍(함수형) - 무엇을 할 것인지를 설명

특징

  • pure function(순수 함수)
    side effect를 제거한 함수
  • immutable data(변경 불가능함)
    객체가 가지고 있는 값을 변경할 수 없는 객체를 의미하며 값이 변경될 경우, 새로운 객체를 생성하고 변경된 값을 주입하여 반환해야 한다.
  • first class citizen(1급 시민)으로서의 함수
    함수형 프로그래밍 패러다임을 따르고 있는 언어에서의 함수는 일급 객체로 간주된다.

일급 객체
1. 변수나 데이터 구조안에 담을 수 있다.
2. 함수의 파라미터로 전달할 수 있다.
3. 함수의 반환값으로 사용할 수 있다.
4. 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.


MVC 패턴

애플리케이션을 모델,뷰,컨트롤러 세가지 역할로 구분한 개발 방법론.

Model

애플리케이션이 '무엇'을 할 지 정의.
애플리케이션과 관련된 데이터를 캡슐화, 해당 데이터 조작하고 처리하는 로직과 계산 정의.

View

화면에 무엇인가를 보여주기 위한 역할.
컨트롤러의 하인으로 종속되어 컨트롤러로부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일.

Controller

모델, 뷰의 중개자로서 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델을 호출하고, 클라이언트가 보낸 데이터가 있다면 모델에 전달하기 쉽게 데이터를 가공한다.
모델이 일을 마치면 그 결과를 뷰에게 전달한다.

참고
https://asfirstalways.tistory.com/180


Parameter(파라미터) vs Argument(인자)

Parameter

함수를 선언할 때 사용된 변수

Argument

함수가 호출되었을 때 함수의 파라미터로 전달된 실제 값


Call by value vs Call by reference

Call by value

값에 의한 호출로, 함수를 호출할 때 전달되는 변수 값을 복사해서 함수 인자로 전달하므로 원래의 값은 변경되지 않는다.

  • 인자로 받은 값을 복사하여 처리하는 방식
  • 복사된 값을 증가시켜도 원래의 값이 보존된다.
  • 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어난다.

Call by reference

참조에 의한 호출로, 함수를 호출할 때 주소값을 함수의 인자로 전달하므로 주소를 참조하여 데이터를 변경할 수 있다.

  • 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식
  • 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠르다.
  • 원래의 값에 영향을 주는 리스크가 존재한다.

프레임워크 vs 라이브러리

프레임워크

특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램

  • 일정 수준 이상의 품질을 보증하는 코드를 비교적 빠르고 편하게 완성 및 유지보수할 수 있다.

라이브러리

소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들

공통점
프로그램을 쉽게 만들 수 있게 한다.

차이점
프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 필요한 라이브러리를 가져다 쓰는 것이라고 할 수 있다.

참고
https://www.youtube.com/watch?v=t9ccIykXTCM
https://jokergt.tistory.com/89
https://engkimbs.tistory.com/673


Git, Github

Git

로컬에서 관리되는 버전 관리 시스템

Github

클라우드 방식으로 관리되는 버전 관리 시스템

버전 관리 시스템(vcs)

소스코드의 변화들을 기록하고 어떤 문제가 발생했을 때 문제를 파악할 수 있게 도와주고, 필요 시 과거로 쉽게 돌아갈 수 있도록 해준다. 또한, 팀 단위로 개발 시 효율적인 작업이 가능하다.

0개의 댓글