1. 함수형 프로그래밍
1) 명령형 프로그래밍 (Imperative Programming)
설명 : 프로그래밍의 상태 & 상태를 변경하는 구문의 관점에서 설명하는 방식
특징 : 알고리즘을 명시하고, 목표는 명시하지 않음
예시 : 절차지향 프로그래밍(C,C++), 객체지향 프로그래밍(C++,Java)
2) 선언형 프로그래밍 (Declarative Programming)
설명 : 방법론 보다는 무엇을 해야하는지를 설명하는 방식
특징 : 알고리즘을 명시하지 않고, 목표만 명시 // 이론적 배경을 람다 계산식에 둠
예시 : 함수형 프로그래밍( Lisp, ML ), 반응형 프로그래밍
// 명령형
function add (arr) {
let result = 0
for (let i = 0; i < arr.length; i++){
result += arr[i]
}
return result
}
// 선언형
function add (arr) {
return arr.reduce((prev, current) => prev + current, 0)
}
3) 함수형 프로그래밍의 특징
- 불변성 : 데이터는 변경 불가능 (이러한 자료구조를 지원하는 언어:Java,Scala)
- 1급 객체(First Object)로서의 함수 : 1급 객체는 다음의 조건을 만족하는 객체
* 변수나 데이터 구조 안에 담을 수 있다.
* 파라미터로 전달할 수 있다.
* 변환값으로 사용할 수 있다.
- 고차함수 : 람다 계산법에서 만들어진 용어로, 다음의 조건을 만족하는 함수
* 함수에 함수를 파라미터로 전달
* 함수의 변환값으로 함수를 사용 가능
- 순수 함수 : 순사 함수에는 숨겨진 input이나 output이 없는 함수
- 합성 함수 : 새로운 함수를 만들거나 계산하기 위해 둘 이상의 함수를 조합하여 생성한 함수
4) 함수형 프로그래밍 예시
- map() 함수
5) 면접 대비
Q1) 함수형 프로그래밍의 특징은 무엇인가?
- 변경 불가능한 객체라는 것입니다.
두 번째는 1급 객체로서의 함수를 사용한다는 것입니다. 다른 말로, 함수를 파라미터로 전달하거나 함수의 반환 값으로 받아서 사용할 수 있습니다
Q2) 함수형 프로그래밍의 장점은 무엇인가?
- side-effect에 의존한 객체지향 프로그래밍에 비해 유지 보수가 용이하고 코드를 이해하기 쉽다는 것이 장점입니다.
2. 좋은 코드란 무엇인가?
1) '좋은 코드의 조건'으로 들 수 있는 예시
- 누구나 쉽게 따라가며 읽을 수 있을 것
- 언제든 원하는 기능을 다시 찾아갈 수 있을 것
- 5년 뒤에 내가 다시 보더라도 금세 이해할 수 있을 것
- 새로운 기능을 추가하더라도 크게 구조변경이 없을 것
2) 코드의 가독성1 : 표현적 가독성
- 언어마다 정해진 네이밍이나 디자인 방식을 가질 것
- 함수는 단일 책임의 원칙(하나의 함수는 한 가지 책임을 갖는다.)를 기킬 것
- 클린 코드에선 20줄 미만의 함수를 권장
- 주석은 정말 필요한 부분에만 최소한으로 사용할 것
3) 기능적 가독성
- 함수의 내려가기 규칙 : n단계의 추상 함수는 n-1단계의 추상적 함수로 구성된다.
- 의미있는 이름 가지기
- 함수의 이름은 내려갈수록 구체적으로 짓기
func Parse(filepath string) (Config, error) {
switch fileExtension(filepath) {
case "json":
return parseJSON(filepath)
case "yaml":
return parseYAML(filepath)
case "toml":
return parseTOML(filepath)
default:
return Config{}, ErrUnknownFileExtension
}
}
- 변수의 이름은 내려갈수록 추상적으로 짓기
3. MVC 패턴이란 무엇인가?
1) 탄생 배경
- 코드 내에서 서로의 역할을 분리하여 각자의 역할에 집중할 수 있게 개발한다면 유지 보수성, 애플리케이션의 확장성, 유연성 등의 장점을 살릴 수 있겠다고 판단하여 생겨난 것이 바로 MVC 패턴
2) 정의
- Model-View-Controller 의 약자로, 개발 과정에서 3가지 형태로 역할을 나누어 개발하는 방법론
3) MVC 패턴: Model
- 정의
* 애플리케이션의 정보 및 데이터를 관리하는 역할 (DB, 변수, 상수)
* '무엇'을 해야할지를 정하는 것 = Model을 설계하는 것
- 특징
* 뷰나 컨트롤러에 대해서 어떤 정보도 알지 못함
* 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 함
4) MVC패턴 : View
- 정의 : 사용자 인터페이스 요소를 나타내는 것 (input 텍스트, 체크박스)
- 특징
* 모델이 가지고 있는 정보를 따로 저장해서는 안됨
* 모델이나 컨트롤러에 대해서 어떤 정보도 알지 못함
5) MVC 패턴 : Controller
- 정의 : 데이터와 사용자 인터페이스 요소들을 연결하는 Bridge 역할
- 특징
* 모델이나 뷰에 대해서 알고 있어야 함
* 모델이나 뷰의 변경을 모니터링 해야 함( 모델이나 뷰의 변경 통지를 받으면 이를 해석해서 각각의 구성 요소에게 통지를 해야 함)
6) 장점과 한계
- 장점
각 구성 요소를 분리함으로써 팀원이 각자 맡은 부분의 개발에만 따로 집중할 수 있게 만들어 개발의 효율성과 유저 보수성 및 확장성을 보장
- 한계
Controller 하나에 많은 Model과 View가 복잡하게 연결되는 상황이 발생할 수 있음
MVC가 너무 복잡하고 비대해지면 새 기능을 추가할 때마다 코드분석 및 수정이 어려워짐
'전공 > 그 외' 카테고리의 다른 글
[자료구조] 전공 필기 시험 정리 (0) | 2022.04.01 |
---|---|
[알고리즘] 전공 필기시험 정리 (0) | 2022.04.01 |
[소프트웨어공학] 전공 필기 시험 정리 (0) | 2022.03.31 |
[컴퓨터 구조] 전공 필기 시험 정리 (0) | 2022.03.31 |
[스터디 1일차] - git / TDD / 객체지향 프로그래밍 (0) | 2021.10.27 |