일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SSAFY 10기 화이팅
- amazon
- SSAFY 화이팅
- BFS
- 텐션 업 10기!
- Have a good day :)
- DFS
- 자고 싶다
- I am Korean
- 코로나 싫어요
- 우유가옆으로넘어지면아야
- SSAFY IM/A
- 우유아야
- 텐션 업 10기 화이팅
- 자료구조
- DP
- Have a nice day.
- HAVE A GOOD DAY
- SSAFY 테스트
- Hamming weight
- 우유가 옆으로 넘어지면 아야
- 네트워크
- 수학
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- 모르고리즘
- SeongSeobDang
- have a nice day
- 아자아자 화이팅
- Java 환경 설정
- Today
- Total
Hope Everyone Is Happy
1 프로그래밍 패러다임 & 선언형과 함수형 프로그래밍 본문
본 게시글은 책 : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링
◆ 프로그래밍 패러다임 (Programming paradigm)
- MVC 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
ex) : 객체지향 프로그래밍 - 프로그래머들이 프로그램을 상호 작용하는 객체들의 집합을 관점으로 설계
: 함수형 프로그래밍 - 상태 값을 지니지 않는 함수값들의 연속을 중심으로 설계
- 서로 다른 프로그래밍 언어는 서로 다른 프로그래밍 패러다임을 지원
- 어떤 언어는 특정한 패러다임을 지원
ex) : Java = 객체 지향 프로그래밍 (jdk 1.8 이전의 Java)
: 하스켈 = 함수형 프로그래밍
- 여러 패러다임을 지원하는 언어 :
ex) : C++, Python, JavaScript, Java (jdk 1.8 이후)
- Java는 함수형 프로그래밍 패러다임을 지원하기 위해 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입, 스트림 같은 API도 추가
- 프로그래밍 패러다임은 크게 선언형, 명령형으로 나눌 수 있으며, 선언형은 함수형이라는 하위 집합을 가지며, 명령형은 다시 객체지향, 절차지향으로 구분
◆ 선언형 프로그래밍 (declarative programming )
- 선언형 프로그래밍이란 '무엇을' 풀어내는가에 집중하는 패러다임
- 또한 "프로그램은 함수로 이루어진 것" 이라는 명제가 담겨있는 패러다임- 함수형 프로그래밍은 선언형 패러다임의 일종
◆ 함수형 프로그래밍 (functional programming )
- '순수 함수' 들을 블록처럼 쌓아 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인 프로그래밍 패러다임
- JavaScript는 단순하고 유연한 언어로, 함수가 일급 객체이기 때문에 객체지향 프로그래밍 보다는 함수형 프로그래밍 방식을 선호
- 순수 함수 : 출력이 입력에만 의존 하는 함수
// 순수 함수 (Java)
int addInteger(int num1, int num2) {
return num1 + num2;
}
: num1 + num2 라는 출력은 반드시 매개변수 num1, num2로 인해서만 영향을 받음 (순수 함수 O)
static int num3 = 2;
// 순수함수가 아님 (Java)
static int addInteger(int num1, int num2) {
return num1 + num2 + num3;
}
: 출력에 + num3가 끼어들면서 함수 외부에서 영향을 받으므로 순수함수 X
- 고차 함수 : 함수를 매개로 받거나 반환하여 로직을 생성
// Javascript
function double(num) {
return num * 2;
}
// 고차 함수
function doubleNum(func, num) {
return func(num);
}
let output = doubleNum(double, 4);
console.log(output); // 8
: doubleNum함수가 double함수를 매개로 받아 사용
- 일급 객체 : 고차 함수를 쓰기 위해서는 해당 언어가 일금 객체라는 특징을 가져야함
: 변수나 메서드에 함수를 할당 가능
: 함수 안에 함수를 매개변수로 사용 가능
: 함수가 함수를 반환 가능
본인은 C++을 주로 공부를 해왔고 최근엔 Java를 공부 중이라 객체지향 프로그래밍을 설계하고 이해하는 것이 더 중요하다고 생각되어서 함수형 프로그래밍에 대해서는 간략하게 알아보았습니다.
위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)
'※ CS 스터디 > 프로그래밍 패러다임' 카테고리의 다른 글
2. 객체지향 프로그래밍 (Object-Oriented Programming) (1) | 2023.08.09 |
---|