본문 바로가기

프로그래밍

1. 프로그래밍 언어와 구조적 프로그래밍

보통 처음 IT를 공부할 때는 대부분 프로그래밍 언어를 배웁니다.

누군가는 C를 배웠을 거고, 누군가는 Python배웠겠지만, 어쨌든 어떤 상용 언어를 공부했을 겁니다.

 

그런데, 대부분 이를 배우는데에 큰그림을 안그리고 시작합니다.

프로그래밍에 필요한 기본 요소들을, 그때그때 하나씩 조각조각 배웁니다.

변수가 나오니 변수를 공부하고, 그다음엔 자료형이 나오고, 그 다음엔 조건문이 나옵니다.

각각을 독립적으로 배우고, 나중에 취합하는 방식이고, 대부분 이렇게 배우셨을 겁니다.

그래서 배우고나서도 프로그래밍에 익숙하지 않아서 각 개념을 왜 배우는지를 모르겠다, 어떻게 쓰는지 모르겠다, 정리가 안되어 뭐가 뭔지 모르겠다고 생각하시는 분들도 종종 보이는거 같습니다.

 

그래서 이렇게 글을 통해서 각 프로그래밍 언어들의 개념이 왜 필요한지, 서로 어떻게 연결되는지 이해해보는것도 좋을거 같다 생각했습니다.

그래서 배우기 전이든 후든 간에 프로그래밍에 대한 큰 그림을 그려보면 이해에 도움이 되지 않을까 싶어 글 써봅니다.

이 글이 그런분들에게 조금이라도 도움이 되었으면 좋겠습니다.

 

프로그래밍 언어의 문법은 상당히 필연적입니다.

그 이유에 대해 뜯어보면 꽤 많은 얘기를 해야하지만, 적당히 압축해서 말해보겠습니다.

 

프로그래밍 언어는 기본적으로, 컴퓨터에게 일을 시키기 위한 수단입니다.

즉, 컴퓨터를 효율적으로 부려먹기 위해 우리는 언어를 만든 건데,

이 언어에 따라서 컴퓨터가 할 수 있는 일이 달라질 수 있습니다.

아무리 아랫사람이 일을 잘해도 윗사람이 거지같이 시키면 프로젝트가 망하잖아요?

즉, 제대로된 언어를 정의해주지 않으면 컴퓨터는 그 힘을 100% 발휘 할 수 없다는 얘기입니다.

 

그럼 그 컴퓨터가 100% 힘을 발휘할 수 있는, 제대로 된 언어는 뭐냐?

우리는 이런 언어를 '튜링 완전 언어'라고 부릅니다.

우리가 프로그래밍을 하려면 이런 제대로 된 언어를 정의 해야하고,

때문에 실존하는 대부분의 상용 언어는 '튜링 완전 언어'입니다.

 

좋아요. 좋은 언어를 만드는게 필요하다는건 알겠고, 우리가 쓰는 언어들이 그렇다는건 알겠어요.

그런데 그런 좋은 언어를 어떻게 만듭니까?

꽤 머리아픈 문제지만, 이미 똑똑한 아저씨들이 만든 정리 하나가 있습니다. (구조적 프로그래밍 정리)

1.순차 실행 (Sequence)

2.선택 실행 (Selection)

3.반복 실행 (Iteration)

이 세가지가 가능하면, 그 언어는 '튜링 완전'하게 됩니다.

여기에 우리가 데이터를 넣어주면, 어떤 결과값을 뱉는 하나의 '프로그램'이 되는 것이죠.

 

즉, 3가지 실행+데이터 처리가 가능하면 적절한 프로그래밍 언어라는 뜻입니다.

그래서 이게 상용 프로그래밍 언어에 어떻게 적용이 되어 있을까요?

 

각 요소를 뜯어 봅시다.

1. 순차 실행

프로그램 코드는 기본적으로 위에서 아래로 실행됩니다.

2. 선택 실행

조건문(if, if-else)로 선택적으로 실행합니다.

3. 반복 실행

반복문(while, for)로 반복해서 실행합니다

 

그리고 1,2,3의 실행을 정리한 것이 함수가 됩니다.

 

여기에 데이터를 넣어주면 프로그램이 된다고 했었죠?

이 데이터를 다루기 위해 사용하는 것이 변수, 배열구조체 등입니다.

여기서 데이터와 실행을 적절히 버무려서 개량하면 클래스가 됩니다.

현존하는 상용 언어들은 대부분 이러한 형식을 따릅니다.

 

이제 여기서 언어별로 디테일이 약간씩 추가됩니다.

 

1.데이터

C,C++에서는 데이터타입의 구분이 희미하고 거의 다 숫자처럼 취급합니다. 'A'+1은 66이 되듯이 말이죠.

반면, Python같은 언어에서는 런타임에러가 납니다. 'A'와 1은 다른 자료형인데 왜 더하냐면서 화를 냅니다.

그리고 Javascript에서는 'A'+1은 'A1'이 됩니다. 그냥 유도리 있게 다 문자열로 생각하고 연결해 준겁니다.

이렇듯, 언어에 따라 데이터를 다루기 위한 관점이 약간씩 다릅니다. 

 

2.실행

C에서 파생된 언어들은 대부분 논리 연산 기호로 &&와 ||를 씁니다.

반면 파이썬은 and와 or를 씁니다.

C에서 파생된 언어들은 반복에 index를 흔히 이용하지만,

Python에서는 범위 기반 반복문이 기본입니다.

 

이런 언급을 한 이유는, 결국 이루고자 하는건 같으나 그걸 구현하기 위한 방법이 언어적으로 약간씩 차이가 있다는 걸 알려드리기 위해서입니다.

저 형태에 맞춰서 생각하시면, 아마 프로그래밍을 이해하는데에 도움이 되지 않을까 싶습니다.