세상에는 정말 다양한 프로그래밍 언어가 있습니다. 웹 개발자가 필수적으로 배워야 한다고 여겨지는 프로그래밍 언어만 나열해도 5개는 무조건 넘을 거 같습니다.
하지만 프로그래밍 언어가 다 같은 프로그래밍 언어가 아니라는거 알고 계셨나요?
프로그래밍 언어의 짧은 역사
1. 처음 프로그래밍 언어는 기계어와 1:1 매칭되는 어쎔블리(Assembly)에서 시작했습니다.
2. 구조적 프로그래밍 : 더 복잡한 구조를 쉽게 표현하기 위해 if, else, while, for 등을 도입
3. 절차적 프로그래밍 : 함수를 도입해 코드의 반복, 복잡도를 줄임
4. 객체지향 프로그래밍 : 프로그램을 객체들의 협력으로 봄
5. 함수형 프로그래밍 : 구체적인 방법을 묘사하지 않고, 원하는 것을 함수들을 사용해 선언
프로그래밍 언어의 궁극적인 목적
컴퓨터는 0과 1밖에 모릅니다.
하지만 인간을 0과 1을 효율적으로 다룰 수 없습니다.
프로그래밍 언어는 정보를 더 효율적으로 다루기 위한 추상화 계층
새로운 프로그래밍 패러다임을 처음 접하면 쓸데없이 복잡한 개념을 도입하는거 같지만, 사실은 점점 복잡해져만 가는 IT 업계의 상황에 대체하기 위해 더 효율적으로 정보를 조작하기 위한 것입니다.
정보를 더 효율적으로 다룰려면 정보를 보는 방식을 바꿔야 합니다. 외국어를 처음 배운 사람은 단어 하나하나를 알파벳 단위로 바라봐 정보 처리 속도가 느리지만, 네이티브에게는 단어, 더 나아가 문장을 한 덩어리로 바라보기 때문에 정보 처리 속도가 빠릅니다. 즉, 패러다임이 다른 겁니다.
프로그래밍 언어 페러다임 분류
프로그래밍 언어는 크게 3가지로 나눌 수 있습니다.
이름 | 설명 | 예시 |
명령형 | 원하는 것을 어떻게 할지 순서대로 알려주는 패러다임 | 구조적 프로그래밍, 절차적 프로그래밍, 객체지향 프로그래밍 |
선언형 | 원하는 것을 어떻게 할지 구체적인 절차 보다는, 원하는 것을 선언하는 방식 | 함수형 프로그래밍 |
논리형 | 논리학과 수학에 바탕을 둔 패러다임 | - |
명령형 프로그래밍 알아보기
명령령 프로그래밍은 직접 명령하는게 핵심입니다. 중간중간 if, else, while 등을 도입하기도 하고, 함수를 도입하기도 하고, 객체를 도입하기도 하지만, 결국 어떻게 할지 명령을 내리는건 똑같습니다.
함수형 프로그래밍 알아보기
함수형 프로그래밍은 순수함수들을 사용해 내가 원하는 것을 선언하는 것입니다. 명령형 프로그래밍에서는 구체적으로 어떻게 해야 할지 하나 하나 명령을 내렸기 때문에 많은 변수들을 추적해야 하고, 그만큼 오류가 있을 가능성이 높았습니다. 이 점을 보완하기 위해 함수형 프로그래밍이 태어났습니다.
아래 코드는 1부터 100까지의 수 중에 짝수만 골라 2배한 후, 그 값을 모두 더하면 몇 일까?라는 문제를 명령형 프로그래밍으로 해결한 예시입니다.
val evenNumbers = mutableListOf<Int>()
for (number in (1 .. 100)) {
if (number % 2 == 0) evenNumbers.add(number * 2)
}
var sum = 0
for (number in evenNumbers) {
sum += number
}
evenNumbers, sum 이라는 변수를 만들고, 리스트를 하나 하나 돌면서 구체적으로 어떻게 할 것인지를 명령하고 있습니다. 같은 코드를 함수형 프로그래밍으로 작성하면 어떨까요?
(1 .. 100)
.filter { it % 2 == 0 }
.map { it * 2 }
.reduce(Int::plus)
함수형 프로그래밍에서는 내가 원하는 값은 단순히 1부터 100까지 중에 짝수를 필터(filter)하고, 각각에 2를 곱한 값을 매핑(map)한 뒤에, 모든 값을 더한 것(reduce)이라고 선언했습니다. 이 연산을 구체적으로 어떻게 할지는 프로그래머가 참견하지 않고, 컴파일러에게 맡기는 것입니다.
'👨💻 프로그래밍' 카테고리의 다른 글
🥳 토스 NEXT 2023 합격 후기 (서버 전형, 신입) (1) | 2023.09.23 |
---|---|
깃허브 코파일럿 (Github Copilot) 1달 사용 후기 (0) | 2023.05.17 |
Clean Code, 읽기 쉬운 코드를 쓰는 법 (0) | 2022.09.17 |
프로그래밍을 할려면 영어를 잘해야 할까? (0) | 2021.08.01 |
방구석에서 스탠퍼드 대학 컴퓨터 공학 학위 따는 법 (0) | 2021.06.21 |