본문 바로가기
컴퓨터 지식/IT 기술면접 대비

[IT 면접대비] 개발자 기술면접 대비 🖥️/ 1️⃣ - 공통 직군 (2)

by 서상혁 2021. 3. 1.

TDD 란 무엇일까요?

Test Driven Development 의 약자로, 개발을 하기 앞서서 테스트 코드를 먼저 작성하고, 그 다음에 기능을 하나하나 추가시켜가면서 테스트 검증도 병행하는 개발 방식을 말합니다. 

 

장단점

 

장점 

  • 리팩토링에 수월하다.
  • 오작동이 어느정도 방지가 되고, 코드의 퀄리티가 늘어난다.

단점

  • 상황에 따라 생산성이 하락될 수 있다.
  • 모든 케이스에 해당하는 테스트 코드를 짠다는것은 불가능하다.

 

함수형 프로그래밍이란 무엇인가요?

저는 프로그래밍 언어 -> 컴파일러로 이어지는 학부 수업 을 통해 Ocaml을 기반으로 하는 함수형 프로그래밍 언어를 접했는데요, 객체지향형 프로그래밍이랑은 다르게 함수 위주로 프로그래밍을 짜는 것을 의미합니다. 객체지향형 프로그래밍의 단점으로는 객체가 상태를 갖게 되기 때문에 상황에 따라 예기치 못한 결과를 내게될 수 있습니다. side effect 라고 하죠. 함수형 프로그래밍은 일반적으로 Input에 따라 같은 output이 나오는 순수함수 라는 개념을 사용하고 데이터가 변하지않는 Immutability(불변성) 을 따르기 때문에, 그러한 단점을 보완할 수 있습니다.

 

주요 키워드

  • Recursion (재귀)
  • Immutability (불변성)
    • 말그대로 변하지 않음 을 의미한다. 객체 내부 속성까지 변하지 않도록 함으로써 Side-Effect 를 방지한다. 함수형 프로그래밍의 중요한 특성이다.
  • Side effect (부작용)
    • 객체가 상태를 저장하고 있음에서 나올 수 있는 부작용을 의미한다.
  • First-Object (일급 객체)
    • 일급 객체란 언어에서 연산을 지원하는 객체를 의미한다. 즉, 쉽게 말해서 매개변수가 될 수 있고, 입력값, 반환값, 비교대상 등이 가능한 객체를 의미한다. 함수형 프로그래밍에서는 함수 자체도 함수의 input으로 들어갈 수 있어야 하기 때문에, 함수를 일급객체로 사용할 수 있는 언어들에 한해서 함수형 프로그래밍이 가능하다. 
  • Currying (커링)
    • 인자를 여러개 받는 함수를 하나를 받는 함수 여러개로 분리해서, 재사용성을 늘리는 기법을 의미한다.
  • Pure Function (순수 함수)

참고

- velog.io/@kyusung/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9A%94%EC%95%BD

 

함수형 프로그래밍 요약

프로그래밍 패러다임 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게하고 결정하는 역할을 한다. 명령형 프로그래밍: 프로그래밍의 상태와 상태를 변경시키는 구문의 관점

velog.io

 

 

MVC 패턴이란 무엇인가요?

Model, View, Controller 세 가지 컴퍼넌트를 이용해서 구현하는 아키텍쳐를  말합니다. 모델은 객체 인터페이스를 이용해서 
데이터베이스와 직접적으로 접촉하는 역할을 하고, View는 사용자가 보게되는 부분, Controller는 View로부터 읽어들이고 Model과 컨택하면서 내부적으로 필요한 로직들을 수행하는 역할을 합니다.

참고하면 좋을만한 링크 : asfirstalways.tistory.com/180

 

 

 

 

Git 을 써본적이 있나요? Git Flow 에 대해 아시나요?

Git은 소스코드 관리, 버전관리, 협업등에 쓰이는 시스템입니다. 저는 데스크탑이나 노트북을 병행하면서 개발하고 있기 떄문에 개발하는 모든 코드를 git 과 github를 이용해서 관리하고 있습니다. 그리고 Git flow는 카카오 추천팀에서 근무할 때 git flow 를 통해 브랜치 관리를 했어서 그때 접하면서 공부하게 됐습니다. Git flow 흐름을 모두가 따른다는 조건하에 안정적인 유지보수와 배포가 가능하다는 것을 느낀 이후로는 저도 프로젝트를 진행할 때 최대한 git flow 대로 진행하려 하는 중입니다.

 

 

 

Git Flow 흐름에 대해 간단하게 설명해주세요.

제가 따르는 Git flow는 Daniel Kummer 기반 git flow 이며, 우선 기본적으로 rebase 대신 merge 중심으로 이루어집니다. master 브랜치가 코드의 직접적인 배포와 핵심이 되고, 개발하는 코드들은 develop 브랜치에서 따로 기능에 따라 feature 브랜치를 분기 시켜서 자유롭게 기능을 추가/제거 합니다. 그리고 배포가 준비되었다고 생각이 되면 feature들이 merge 된 develop 브랜치를 release브랜치로 빼고, 배포할 버전을 명시해줍니다. 그 release 브랜치가 준비되면, master 브랜치와 dev 브랜치에 병합함과 동시에 배포가 진행됩니다. 만약 배포된 코드에 버그로 인해 긴급 수정이 필요할 때는, master 코드에서 직접적으로 hotfix 브랜치를 분기해서 버그를 수정하고 hotfix라는 태그와 함께 다시 master 브랜치에 병합합니다.

 

Git Flow CheetSheet (Daniel Kummer 기반) : danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html

 

git-flow cheatsheet

 

danielkummer.github.io

 

728x90

댓글