일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 웅진씽크빅
- 프론트엔드
- 리액트프로젝트
- 프론트엔드 개발
- TypeScript
- STATE
- 유데미
- 상태 관리 라이브러리
- Server State
- 프로젝트캠프
- sucoding
- React
- 수코딩
- 스나이퍼팩토리
- frontend
- 개발
- React Query
- tanstack query
- 공식문서
- Today
- Total
yunicornlab
프로그래밍이란? 본문
프로그램(Program)이란?
먼저, 프로그램은 뭘까?
Program은 미리(pro) 쓰다(graphein)의 의미를 가진 prographein이라는 라틴어에서 유래했다고 한다.
즉, 할 일을 미리 정해서 적어놓은 것이고, 계획이라고 볼 수 있으며, 좀 더 나아가면 방법과 순서를 나열한 것이라고 볼 수 있다.
그럼 왜 "컴퓨터 프로그램"이라고 말할까?
우리가 사용하는 컴퓨터 프로그램은 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령문의 집합이기 때문이다.
즉, 컴퓨터에게 무엇을 해야할 지 요구사항(지시 사항들)을 구체적으로 알려주는 명령어들의 집합이다.
프로그래밍(Programming)이란?
그렇다면 프로그래밍은 내가 원하는 요구사항을 컴퓨터에게 지시해서 해결하는 것, 다르게 말하면 문제 해결 과정이다.
"요구사항"과 "문제"가 동떨어지게 느껴질 수 있지만, 실무에서는 동일하게 생각되어지는 것 같다.
요구사항도 문제도 결국은 "해결"해야하는 과제이기 때문이다.
그렇다면, 컴퓨터 프로그램을 만드는 "프로그래밍"은 결국 "문제 해결 과정"이라고 볼 수도 있다.
컴퓨터와 커뮤니케이션을 하는 것이 프로그래밍인데, 내가 원하는 요구사항을 컴퓨터가 수행하게 하는 것이 커뮤니케이션의 목적이다.
그럼 결국 컴퓨터를 사용해서 문제를 해결하는 것이 프로그래밍인 것이다.
그런데 컴퓨터는 애매하고 모호하게 설명하면 못 알아 듣는다. 그렇기 때문에 명확하고 구체적으로 전달해야 한다.
이게 가능하려면 지시하는 사람이 먼저 요구사항에 대해 제대로 파악하고 있어야 한다.
먼저, 요구사항(문제)을 명확히 이해해야 한다.
그리고 복잡한 상황을 단순하게 분해해야 한다. 이때, 문제를 잘 쪼개서 구분하고 그 사이들간의 관계로 원인과 결과 또는 중요도를 파악해서 정리해 놓아야한다.
마지막으로 정리된 요구사항을 바탕으로 구체적이고 명확한 지시를 전달하면 된다.
프로그래밍 언어(Programming Language)란?
그럼 이걸 "어떻게" 할 수 있을 까?
컴퓨터와 사람의 커뮤니케이션이 어떻게 가능할까?
이 재료가 바로 "프로그래밍 언어"이다!
우리가 평소 사용하는 한국어, 영어와 같은 언어는 "자연어"이다.
하지만 컴퓨터와 대화하기 위해서는 인공어인 "프로그래밍 언어"를 사용해야 한다.
"언어"라는 말이 붙은 이유는, 프로그래밍 언어도 문법과 문맥이 있기 때문이다. 다르게 말하면 구문과 의미가 있는 규칙이기 때문에 언어라고 표현된다.
고수준 언어( vs 저수준 언어
그런데, 프로그래밍 언어도 종류가 있다.
구분하는 기준은 많이 있는데, 먼저는 저수준 언어와 고수준 언어를 알아보자.
여기서 "수준"은 보통 말하는 그 수준이 맞다. 영어로는 Level이다.
컴퓨터가 이해하기 쉬울수록 저수준 언어에 가깝고, 사람이 이해하기 쉬울수록 고수준 언어에 가깝다.
컴퓨터가 이해하기 쉽다는 말은, 컴퓨터의 주요 기능을 관할하는 장치인 CPU(컴퓨터의 대뇌라고 생각하면 된다)가 직접 해독하고 실행할 수 있는 비트 단위로 쓰이거나, 그러한 규칙에 가까운 것을 말한다.
이것에 해당하는 것이 저수준 언어이고, 기계어와 어셈블리어가 해당된다.
기계어는 정말 CPU와 특화되어 0과 1로 나열되어있기 때문에 별다른 변환 과정 없이 컴퓨터가 실행할 수 있는 유일한 언어이다.
어셈블리어는 기계어보다는 낫지만 여전히 사람이 이해하기는 어렵다.
컴퓨터는 이해하기 빨라서 실행 속도가 빨라지지만, 사람이 사용하지 못하면 무슨 소용이겠는가
그래서 나온 것이 고수준 언어이다. 컴퓨터 공학 전공은 거의 필수로 배우는 C언어, 그리고 Java, Python, JavaScript 등의 언어들이 다 고수준 언어이다.
C언어가 무슨 약어인가 생각했는데, 원래 A 언어라는 것도 있었고, 켄 톰슨이라는 사람이 언어를 개발한 벨 연구소의 B를 따서 B 언어를 만들었고(BCPL 언어를 개조함), 데니스 리치라는 사람이 이것을 개선해서 C언어가 탄생했다고 한다.
이 중 사람들에게 선택받은 C언어만이 살아남은 것이다.
컴파일러(Compiler) vs 인터프리터(Interpreter)
그러면, 고수준 언어는 컴퓨터가 알아들을 수 없는 언어인데 어떻게 이걸로 대화가 되는 것일까?
그걸 가능하게 해주는 것이 바로 컴파일러와 인터프리터이다.
간단히 말해, 기계어 번역기라고 보면 된다.
사람이 이해할 수 있는 고수준 언어를 컴퓨터가 이해할 수 있는 기계어로 번역해서 컴퓨터에게 전달해준다.
당연히 반대의 과정도 진행해준다. 이렇게 사람과 컴퓨터 사이에서 번역기 담당을 해주는 것이 컴파일러와 인터프리터이다.
컴파일러와 인터프리터는 둘 다 번역기 역할이지만 번역 방식이 다르다.
컴파일러(compiler)는 프로그램 파일 전체를 한번에 기계어로 번역해준다.
(컴파일(compile) : 사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꾸어 주는 과정)
인터프리터(interpreter : 통역사)는 프로그램을 실행하면 한 번에 한 문장씩만 번역한다.
컴파일러는 한번에 전체를 스캔해서 실행 파일을 만들어 놓고, 이후에 실행할 때는 이미 만들어놓은 실행파일을 실행하므로 초기 스캔 시간은 오래 걸리지만 전체 실행 시간은 인터프리터보다 빠르다. 대신 인터프리터보다 많은 메모리를 사용하는 편이다.
컴파일 언어로는 대표적으로 C, C++, Java가 있고, 인터프리터 언어로는 Python, JavaScript, Ruby 등이 있다.
하지만 브라우저에서 실행되는 JavaScript는 상황이 조금 다를 수 있다. 구글이 도입한 V8 엔진에서는 인터프리터 방식과 컴파일러 방식을 혼합한 JIT(Just-In-Time) 컴파일러로 실행 속도를 개선했다.
결론
오늘의 공부를 요약하자면,
프로그래밍이란 프로그래밍 언어를 사용해서 컴퓨터에게 요구사항(문제)을 정확하고 상세하게 전달하여 실행시키는 과정이다.
보통의 프로그래밍은 사람이 이해할 수 있는 고수준 언어를 작성해 컴퓨터에게 전달하면 컴파일러나 인터프리터와 같은 번역기가 컴퓨터가 이해할 수 있는 기계어로 번역해서 전달해 명령을 수행하게 만든다.
이렇게 작성한 고수준 언어가 Code이다.
'Developer' 카테고리의 다른 글
[개발 스터디 운영] 서드파티 빡공 취준단 스터디 운영 - 디스코드 셋팅 (0) | 2024.07.31 |
---|---|
[개발 스터디 운영] 서드파티 빡공 취준단 스터디를 개설하다! (0) | 2024.07.31 |
프론트엔드 개발자에게 필요한 역량은? - 기술측면 (1) (0) | 2024.06.08 |
프론트엔드 개발자에게 필요한 역량은? - 인성측면 (2) (0) | 2024.06.08 |
프론트엔드 개발자에게 필요한 역량은? - 인성측면 (1) (0) | 2024.06.07 |