프로그래밍 기초 – 문법, 구문, 기능화된 루틴들

Posted on

프로그램은 폰 노이만 구조를 따르는 현대적인 컴퓨터들에서 없어서는 안될 청사진과 같은 부분입니다. 폰 노이만 구조에서는 프로세서, 메모리, I/O 버스가 하드웨어적으로 구현하도록 구조가 짜여져있습니다. 여기에 더해 외부 프로그램을 메모리에 적재해서 프로그램이 지시하는 기능을 실행하는 구조입니다.

프로그래밍은 이 프로그램을 작성하는 과정입니다.

고전적인 컴퓨터들은 하드웨어 사양이 지금보다 훨씬 조악해서 프로그램의 구조가 복잡하지 않았고 하드웨어에 직접 액세스를 하는 어셈블리 언어를 쓰기도 했습니다. 어셈블리 언어는 프로그래밍 언어의 일종으로 기계어에 더 가깝고 하드웨어에 직접 액세스를 한다는 의미에서 저수준의 언어인데요. 문법을 사람이 이해하기 쉽게 하기 위해 타언어들도 속속 개발되기에 이릅니다. 중요한 것은 언어마다 할 수 있는 일이나 문법들이 다르다는 것인데 프로그래밍을 배움에 있어 이들 차이는 매우 중요한 분기점을 제공합니다.

문법이라는 것이 중요 개념입니다. 프로그래밍 언어도 언어인만큼 자연 언어와 같은 문법이 각각 지정되어 있습니다. 영어로 말하려면 영어의 문법을 준수해야 하듯이 어셈블리로 프로그램을 짜려면 어셈블리의 문법을 지켜야 하고 자바로 하려면 자바의 문법을 지켜야 합니다.

문법은 대체로 예약어들을 조립해서 원하는 작업을 수행할때 어떤 기능을 수행해야 하는지 표시하는 역할을 합니다. 예를 들면 아래와 같은 형태로 됩니다.

String name = "Nori-P";
System.out.println(name);

이 코드의 문법은

자료형 변수명 = 문자열
화면 표시용 함수(변수명)

의 구조인데요. 각각의 파트를 잘 숙지해서 조립을 하는 창의력에 의해 문법 준수 여부가 결정됩니다. 즉 문법이 허용하는 범위 내에서 각각의 문장이 기능하게 되고 이 문장들이 모여서 하나의 대단위 기능을 수행하게 됩니다. 문장들이 모여 하나의 기능을 하는 것을 가리켜 구문(semantics)를 준수한다는 것입니다.

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

위의 프로그램은 해독이 조금 더 필요한 문장들로 구성되어 있습니다. 시작부분의 for 루프의 괄호안의 내용이 유의되실 것입니다. 프로그래밍을 배울때 이러한 문법 요소가 구현된 구조를 잘 숙지하고 이 문장 실행 흐름을 기억해서 자신이 짜는 프로그램에 적용하는 것이 관건이 됩니다.

대다수의 프로그래밍 언어를 보면 문법이나 문장, 구문들을 보여주면서 말로 정리해줄때가 많습니다. 대개 실행 흐름을 보여주는 경우가 많죠. 이 실행 흐름을 잘 기억해두고 변행도 해보고 응용하는 실력을 기르면 됩니다.

이해가 즉시 안되더라도 상관없습니다. 그럴때는 어떤 기능인지 살펴보고 구문을 외어서 나중에 써먹으면 그만입니다. 수학 문제 풀때도 풀이 뜻이 잘 이해가 안되도 일단은 외워두고 있다가 의미를 추가해서 이해하듯이 하면 되는게 이 경우입니다.

현대적으로 널리 쓰이는 언어들은 각자의 문법 체계와 구문 루틴을 가지는데 일단 통용되는 법칙이 있으니 이를 잘 숙지해두면 문법 공부에 보탬이 됩니다. 예를 들면 명시적이든 간접적이든 변수들에 값을 저장하고 인출하는 원리, 조건문으로 논리 분기를 하거나 루프문으로 반복 작업 수행 … 이런 식입니다.

그래서 프로그래밍 언어를 배울때는 대체로 문법 공부→구문 공부→API 공부의 순서를 따르구요. 전산학 과정으로 자료구조와 알고리즘 공부도 해두어야 합니다.

API는 Application Programming Interface인데 특정한 목적으로 프로그램을 짤때 반복되거나 이미 만들어두면 좋은 구문들을 기능상으로 묶어서 미리 정의해서 배포하는 루틴들로 처음부터 끝까지 다 개발해야 하는 수고를 덜어줍니다. 대개 프로그래밍 언어 구현체들에서 제작자가 전용 API를 만들어 배포하기도 하고 오픈소스 개발자들이 공헌하기도 하죠.

자료구조와 알고리즘은 도전적인데요. 프로그램에서 자료를 효율적으로 저장하고 불러오는 추상화된 구조를 자료구조가 구현한다면, 알고리즘은 최소한도의 시간과 자원을 써서 특정 목적을 달성하는 문제 해결 전략을 학문화한 분야입니다. 이 둘은 밀접한 관련이 있어서 두 주제를 동시에 배우기도 합니다.

정리하자면

(1) 프로그램은 프로그래밍 언어로 작성된다
(2) 프로그래밍 언어는 고유의 문법이 있으며 이를 준수해야 실행된다
(3) 문장이 구문을 만들고 구문이 모이면 프로그램이 된다
(4) API를 쓰면 반복되는 작업 구현에 보탬이 된다
(5) 자료구조와 알고리즘을 알면 더 효율적이고 견고한 프로그램이 완성된다

이렇게 알아두시면 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다