프로그래밍 언어는 언어 처리 방법과 프로그램 설계 방식에 따라 구분합니다.
언어 처리 방법에는 크게 컴파일러(번역기)형과 인터프리터(대화형)형으로 나눌 수 있습니다.
그리고 프로그램 설계 방식으로는 절차지향형(POP)과 객체지향형(OOP)으로 구분할 수 있습니다.
1. 컴파일러(Compiler)형과 인터프리터(Interpreter)형
이전 학습 기록에서 사람에게 작업을 지시할 때 외국인인 경우 해당 외국어로 작성된 작업지시서를 전달해야 한다고 했습니다. 만약 본인이 해당 외국어를 모를 경우 어떻게 작업지시서를 작성할 수 있을까요?
두 가지 방법이 있을 수 있습니다.
첫 번째는 한국어로 작업지시서를 작성하여 번역가에게 해당 외국어로 번역을 부탁한 후, 번역된 작업지시서를 외국인에게 건네주는 방법입니다.
이와 같은 방법으로 컴퓨터에게 처리를 명령할 때, 프로그래밍 언어로 작성된 소스코드를 컴퓨터에 내장된 번역기(컴파일러)를 이용하여 기계어로 번역(컴파일)합니다.
그 후 기계어로 번역 된 프로그램을 실행시켜 컴퓨터에게 처리를 명령하게 됩니다. 이와 같은 처리 방법을 컴파일러형이라고 합니다. 컴파일러 형의 대표적인 언어로는 C/C++과 같은 언어가 있습니다.
두 번째로는 한국어로 작성된 작업지시서를 통역가를 이용하여 한 줄 한줄 통역하는 방법이 있습니다.
마찬가지로 컴퓨터에 적용하게 되면 프로그래밍 언어로 작성된 소스코드를 한줄 한줄 기계어로 번역하여 실행시킬 수 있습니다.
이와 같은 처리 방법을 인터프리터형이라고 합니다. 인터프리터 형의 대표적인 언어로는 Python과 같은 언어가 있습니다.
JAVA는 컴파일러 형과 인터프리터 형을 합쳐놓은 복합형으로 볼 수 있습니다.
JAVA로 쓰인 소스코드를 우선 중간 언어(바이트코드 or 클래스 파일)로 컴파일합니다. 그 후 바이트코드를 JVM(Java Virtual Machine)을 이용하여 프로그램을 실행시키게 됩니다.
JAVA가 이와 같이 복잡한 처리 과정을 가지게 된 이유는 JAVA의 특징 중 하나인 OS(환경)에 의존하지 않는다는 사상으로 설계된 언어이기 때문입니다.
2. 절차지향형(POP)과 객체지향형(OOP)
프로그램 설계 방식으로는 절차지향형과 객체지향형 언어가 있습니다.
- 절차지향형(POP : Procedure Oriented Program)
절차지향형 언어로는 C, VB, PASCAL 등이 있습니다. 프로그램이 시작하면 프로그래밍된 순서대로 진행하며, 모든 순서가 종료되면 프로그램 또한 종료됩니다. 절차지향형은 다음과 같은 특징을 가집니다.
- 기능을 우선시하여 프로그래밍합니다. 따라서 객체지향형에 비해 빠르게 프로그래밍이 가능합니다.
- 대부분의 함수가 프로그램 내부에서 어디서든 사용 가능한 전역 데이터를 사용하기 때문에 데이터 접근이 용이합니다. 하지만 데이터 접근이 유용하다는 뜻은 반대로 보안성이 낮다는 말과 같습니다.
- 절차지형형은 데이터의 모듈화가 어렵습니다. 모듈화 프로그램은 관리가 용이하도록 기능 단위로 분리하는 작업을 의미하는데, 예를 들면 로봇을 조립할 때 팔, 다리, 몸통 등을 따로 만들어 연결하는 것과 비슷합니다. 모듈화가 어려운 절차지향형의 경우 데이터 및 기능을 추가해야 할 때 기존에 작성된 프로그램을 수정해야 하며, 프로그램의 크기가 커질수록 유지보수가 어려워집니다.
- 객체지향형(OOP : Object Oriented Program)
객체지향형은 절차지향형의 단점을 보완하여 개발된 개념입니다. 기능 위주의 절차지향형과는 달리 "객체"라는 개념을 통해 데이터 및 함수를 모듈화 하여 프로그램의 유지 보수와 보안성을 강화하였습니다. 객체지향형 언어로는 JAVA, C++, C#, Python 등이 있습니다.
객체지향형은 크게 4가지 특징을 가지고 있습니다.
- 캡슐화 : 데이터를 캡슐화(은닉화) 함으로써, 상황에 따라 프로그램 외부에서 접근 가능한 데이터를 지정할 수 있습니다.
- 추상화 : 객체지향에서 제공하는 함수/데이터 모듈화의 일종으로써, 객체의 기본적인 틀, 즉 뼈대만 미리 만들어 놓을 수 있는 기능입니다. 추상화된 객체는 상속을 사용하여 구체적인 객체로 만들어 사용할 수 있습니다.
- 상속 : 객체지향에서 제공하는 함수/데이터 모듈화의 일종으로, 피상속 객체(부모 클래스)의 데이터 및 함수들을 상속 객체로 그대로 이어받아 사용할 수 있는 기능입니다. 이를 통해 코드의 재사용성을 높일 수 있고, 부모를 복제한 형태로 가져와 사용할 수 있기에 다시 코딩할 필요도 없습니다. 물론 상속 객체에서 가져온 함수 등을 재정의하여 사용할 수도 있습니다.
- 다형성 : 객체지향의 4가지 특징 중 가장 어려운 내용입니다. 객체가 다양한 형태로 표현될 수 있다는 개념으로, 추상화된 객체와 같이 "틀"을 가진 객체가 구체화된 객체로 표현 가능하다 라는 뜻입니다.
유영식 선생님 감사합니다.
'비전공자의 개발과 친해지기 > 프롤로그' 카테고리의 다른 글
[JAVA]3. 자바(JAVA) (0) | 2022.04.06 |
---|---|
[JAVA]1. 개발의 기초 (0) | 2022.04.06 |