25|프로그래밍 언어의 종류·저급 언어·고급 언어·객체지향

글 요약

사무자동화산업기사 – 저급 언어와 고급 언어의 차이, 기계어·어셈블리어·주요 고급 언어의 특징, 객체·클래스·메시지와 캡슐화·추상화·상속을 정리합니다.

컴퓨터는 기계가 직접 이해하는 명령만 실행할 수 있지만, 사람은 문제를 더 이해하기 쉬운 형태로 표현하기 위해 다양한 프로그래밍 언어를 사용합니다. 프로그래밍 언어는 하드웨어와 가까운 정도, 번역 방식, 사용 목적과 문제 해결 관점에 따라 여러 종류로 구분할 수 있습니다.

이 장에서는 프로그래밍 언어의 종류를 저급 언어와 고급 언어로 나누어 기계어·어셈블리어와 주요 고급 언어의 특징을 정리합니다. 이어서 객체지향 프로그래밍의 객체·클래스·메시지와 캡슐화·추상화·상속의 의미를 예시로 살펴봅니다.

이 장의 핵심 내용

  • 저급 언어는 하드웨어의 명령 체계와 가깝고 기계 의존성이 높습니다.
  • 기계어는 컴퓨터가 직접 실행하는 이진 명령이며 별도의 번역 과정이 필요하지 않습니다.
  • 어셈블리어는 기계 명령을 기호와 니모닉으로 표현하며 어셈블러가 기계어로 번역합니다.
  • 고급 언어는 사람이 문제와 알고리즘을 표현하기 쉽도록 추상화 수준을 높인 언어입니다.
  • 고급 언어의 소스 코드는 컴파일러나 인터프리터 등의 번역 과정을 거쳐 실행됩니다.
  • 고급 언어는 일반적으로 작성·이해·유지보수가 쉽고 다른 환경으로 옮기기 유리합니다.
  • FORTRAN·COBOL·LISP·BASIC·Pascal·C·Java 등은 목적과 설계 철학이 서로 다릅니다.
  • 객체지향 프로그래밍은 데이터와 동작을 객체 단위로 모델링합니다.
  • 객체는 상태와 행동을 가지며, 클래스는 유사한 객체를 만들기 위한 공통 설계입니다.
  • 객체지향의 주요 특징은 캡슐화·추상화·상속이며 재사용성과 유지보수성을 높이는 데 활용됩니다.

프로그래밍 언어는 어떤 기준으로 구분하는가?

프로그래밍 언어는 하나의 기준으로만 구분되지 않습니다. 시험에서는 주로 하드웨어와 가까운 정도에 따라 저급 언어와 고급 언어를 구분하고, 객체지향 언어의 구성요소와 특징을 함께 묻습니다.

분류 기준대표 구분핵심 질문
추상화 수준저급 언어·고급 언어하드웨어의 명령 체계와 얼마나 가까운가?
실행 방식컴파일 방식·인터프리트 방식·혼합 방식소스 코드를 어떤 과정으로 실행하는가?
프로그래밍 패러다임절차적·객체지향·함수형·논리형문제와 프로그램을 어떤 관점으로 구성하는가?
사용 목적범용 언어·특수 목적 언어어떤 문제 영역을 주로 해결하는가?
이 글에서는 저급·고급 언어와 객체지향 프로그래밍을 중심으로 다룹니다.

핵심: 저급·고급의 구분은 언어의 우열이 아니라 하드웨어에 대한 추상화 수준과 개발 편의성의 차이를 나타냅니다.

저급 언어는 왜 기계 중심 언어라고 하는가?

저급 언어(Low-Level Language)는 컴퓨터의 명령어 집합과 메모리 구조에 가까운 언어입니다. 하드웨어를 세밀하게 제어할 수 있고 번역 결과가 기계 명령과 밀접하지만, 특정 프로세서와 시스템 구조에 의존하는 정도가 큽니다.

  • 하드웨어의 레지스터·메모리·명령어를 직접 다루기 쉽습니다.
  • 기계 구조에 맞춰 세밀하게 최적화할 수 있습니다.
  • 다른 명령어 집합을 사용하는 기계로 옮기려면 코드를 수정하거나 다시 작성해야 할 수 있습니다.
  • 프로그램 작성과 오류 분석에 하드웨어 지식이 많이 필요합니다.

기계어

  • 0과 1의 비트 패턴으로 구성됩니다.
  • CPU가 직접 해석하고 실행합니다.
  • 별도의 번역기가 필요하지 않습니다.
  • 기종별 명령어 형식과 코드가 다릅니다.
  • 사람이 작성하고 유지보수하기 어렵습니다.

어셈블리어

  • 기계 명령을 ADD·MOV 같은 니모닉으로 표현합니다.
  • 기계어와 밀접하게 대응합니다.
  • 어셈블러가 기계어로 번역합니다.
  • 기계어보다 읽기 쉽지만 기계 의존성이 높습니다.
  • 장치 제어·부트 코드·성능 핵심 구간 등에 활용될 수 있습니다.
비교 항목기계어어셈블리어
표현이진 비트 패턴기호 명령과 니모닉
번역기필요 없음어셈블러
CPU와의 관계직접 실행기계 명령으로 번역 후 실행
가독성매우 낮음기계어보다 높음
기계 의존성매우 높음높음
유지보수매우 어려움고급 언어보다 어려움
어셈블리어 명령은 어셈블러를 통해 해당 기계의 명령으로 변환됩니다.

용어 주의: 어셈블리어는 기계어 그 자체가 아니라 기계 명령을 사람이 다루기 쉬운 기호로 표현한 언어입니다.

고급 언어는 왜 사람 중심 언어라고 하는가?

고급 언어(High-Level Language)는 특정 기계의 세부 명령보다 문제 해결 절차·자료 구조·업무 규칙을 표현하는 데 초점을 둔 언어입니다. 하나의 고급 언어 문장은 번역 과정에서 여러 기계 명령으로 변환될 수 있습니다.

  • 영어 단어·수식·구조화된 문법을 사용하여 프로그램의 의미를 이해하기 쉽습니다.
  • 복잡한 하드웨어 동작을 변수·함수·객체 등의 추상화로 표현합니다.
  • 컴파일러·인터프리터 또는 가상 머신과 같은 실행 환경이 필요합니다.
  • 같은 소스 코드를 여러 환경에서 사용할 가능성이 높지만 완전한 호환성이 자동으로 보장되는 것은 아닙니다.
  • 작성·시험·수정·유지보수와 협업에 유리합니다.
비교 항목고급 언어저급 언어
중심사람과 문제 해결기계와 하드웨어
추상화 수준높음낮음
작성·이해상대적으로 쉬움상대적으로 어려움
기계 의존성상대적으로 낮음높음
이식성실행 환경이 제공되면 비교적 높음낮음
하드웨어 제어간접적이거나 제한적직접적이고 세밀함
실행 효율번역기와 구현에 따라 달라짐세밀한 최적화가 가능함
유지보수상대적으로 쉬움상대적으로 어려움
시험에서는 고급 언어가 호환성과 용이성에 유리하고, 저급 언어가 실행 속도와 직접 제어에 유리하다고 단순화하여 비교하는 경우가 많습니다.

실행 속도 주의: 고급 언어가 항상 느리고 저급 언어가 항상 빠른 것은 아닙니다. 실제 성능은 알고리즘, 컴파일러 최적화, 실행 환경과 작성한 코드에 따라 달라집니다.

주요 고급 언어에는 어떤 것이 있는가?

고급 언어는 개발 시기와 목적에 따라 서로 다른 특징을 가집니다. 다음 표는 시험에서 구분할 수 있도록 대표 용도와 핵심 키워드로 정리한 것입니다.

언어대표 성격·용도시험에서 기억할 특징
FORTRAN과학·공학·수치 계산초기의 대표적인 고급 언어로 수치 계산과 과학 기술 분야에 널리 사용됨
COBOL기업·행정 업무의 자료 처리영어와 유사한 문장형 문법을 사용하며 업무용 데이터 처리에 강함
ALGOL알고리즘 표현과 구조적 프로그래밍현대 프로그래밍 언어의 블록 구조와 문법 발전에 큰 영향을 줌
LISP리스트 처리·기호 처리리스트 구조와 함수적 표현을 중심으로 하며 인공지능 연구에 역사적으로 활용됨
APL배열 중심 수치 계산간결한 기호를 사용해 배열과 수학 연산을 표현함
PL/I과학 계산과 업무 처리를 아우르는 범용 언어FORTRAN과 COBOL 계열의 요구를 함께 다루려 한 언어
BASIC교육과 입문초보자가 쉽게 프로그래밍을 배우도록 설계됨
SNOBOL문자열·패턴 처리문자열 검색·대치·패턴 일치와 같은 문자 처리에 특화됨
Pascal구조적 프로그래밍·교육명확한 자료형과 구조를 강조하여 프로그래밍 교육에 널리 사용됨
PROLOG논리 프로그래밍사실과 규칙을 선언하고 논리적 추론으로 답을 구함
Ada고신뢰성·실시간·임베디드 시스템강한 자료형과 모듈화·동시성 기능을 제공하며 국방·항공 등에서 활용됨
C범용·시스템 프로그래밍고급 언어이지만 포인터와 메모리 접근 등 저수준 제어 기능을 제공함
Java객체지향·플랫폼 독립 실행 환경바이트코드와 JVM을 이용하며 클래스 중심 객체지향 프로그래밍을 지원함
언어의 실제 활용 범위는 매우 넓지만 시험에서는 대표적인 설계 목적과 특징을 중심으로 구분합니다.

수치·과학·공학

FORTRAN, APL, PL/I는 계산과 배열·수치 처리의 역사에서 중요한 언어입니다.

업무·자료 처리

COBOL은 기업과 행정의 대규모 업무 자료 처리 언어로 대표됩니다.

교육·구조적 프로그래밍

BASIC, Pascal, ALGOL은 입문 교육과 구조화된 알고리즘 표현에서 자주 언급됩니다.

기호·문자열·논리 처리

LISP, SNOBOL, PROLOG는 각각 리스트, 문자열 패턴, 논리 추론이라는 특징으로 구분합니다.

C 언어 분류: C는 공식적으로 고급 프로그래밍 언어로 분류되지만 하드웨어와 메모리를 세밀하게 다룰 수 있어 ‘중급 언어’처럼 설명되기도 합니다. 시험에서는 시스템 프로그래밍에 적합한 언어라는 특징을 함께 기억합니다.

객체지향 프로그래밍은 무엇인가?

객체지향 프로그래밍(Object-Oriented Programming)은 현실 세계나 문제 영역의 대상을 객체로 모델링하고, 각 객체의 상태와 행동 및 객체 사이의 상호작용으로 프로그램을 구성하는 방식입니다.

절차적 프로그래밍이 처리 순서와 함수를 중심으로 프로그램을 나누는 경향이 있다면, 객체지향 프로그래밍은 데이터와 그 데이터를 처리하는 동작을 객체 단위로 묶어 표현합니다.

비교 항목절차적 관점객체지향 관점
중심 요소함수·프로시저와 처리 순서객체와 객체 사이의 협력
데이터와 처리데이터와 처리 절차를 분리하는 경향상태와 행동을 객체 안에 함께 구성
설계 관점작업을 어떤 순서로 수행하는가어떤 객체가 어떤 책임을 가지는가
재사용함수·모듈 단위 재사용클래스·상속·구성 등을 통한 재사용
대표 언어C, Pascal 등Smalltalk, C++, Java, Ada 등
  • 현실의 대상을 객체 단위로 나누어 이해하기 쉽습니다.
  • 객체가 담당하는 책임을 분리하여 변경 범위를 줄일 수 있습니다.
  • 검증된 클래스와 컴포넌트를 재사용할 수 있습니다.
  • 대규모 프로그램의 구조화와 유지보수에 유리할 수 있습니다.

주의: 객체지향 언어를 사용한다고 해서 프로그램이 자동으로 이해하기 쉽거나 재사용 가능해지는 것은 아닙니다. 객체의 책임과 관계를 적절하게 설계해야 장점을 얻을 수 있습니다.

객체·클래스·메시지는 어떻게 연결되는가?

구성요소의미계좌 예시
객체
Object
상태와 행동을 가지며 프로그램에서 구별되는 하나의 실체특정 고객의 실제 계좌 객체
상태·속성
State·Attribute
객체가 현재 가지고 있는 데이터계좌번호, 예금주, 잔액
행동·메서드
Behavior·Method
객체가 수행할 수 있는 연산입금, 출금, 잔액 조회
클래스
Class
유사한 객체가 공유하는 상태와 행동을 정의한 설계계좌 객체를 만들기 위한 계좌 클래스
메시지
Message
객체에 특정 행동을 요청하는 상호작용계좌 객체에 출금 메서드 실행 요청
클래스는 설계이고 객체는 그 설계를 바탕으로 생성된 구체적인 인스턴스입니다.

클래스: 계좌

  • 공통 속성: 계좌번호, 예금주, 잔액
  • 공통 메서드: 입금(), 출금(), 잔액조회()
  • 여러 계좌 객체가 공유할 구조를 정의

객체: 김민수의 계좌

  • 계좌번호: 100-01
  • 예금주: 김민수
  • 잔액: 500,000원
  • 계좌 클래스의 구체적인 인스턴스

객체와 클래스: 객체는 데이터와 메서드로 구성되고, 클래스는 하나 이상의 유사한 객체가 공유할 특성과 행동을 정의합니다.

캡슐화·추상화·상속은 무엇인가?

객체지향 언어의 주요 특징으로 캡슐화, 추상화, 상속이 있습니다. 각 개념은 서로 관련되어 있지만 해결하려는 문제와 강조점이 다릅니다.

특징핵심 의미계좌 예시주요 효과
캡슐화
Encapsulation
데이터와 메서드를 하나의 객체로 묶고 내부 상태에 대한 직접 접근을 제한함잔액을 외부에서 직접 바꾸지 못하게 하고 입금·출금 메서드로만 변경정보 은닉, 무결성 보호, 변경 영향 감소
추상화
Abstraction
불필요한 구현 세부사항은 숨기고 중요한 특성과 기능만 표현함사용자는 은행 내부 처리 과정을 몰라도 입금·출금 기능을 사용복잡성 감소, 핵심 역할에 집중
상속
Inheritance
기존 클래스의 상태와 행동을 바탕으로 새로운 클래스를 정의함계좌 클래스를 바탕으로 적금계좌·대출계좌 클래스를 정의공통 기능 재사용, 계층적 분류와 확장

캡슐화는 무엇을 숨기는가?

객체 내부 데이터의 표현과 변경 방법을 감추고 공개된 메서드를 통해서만 안전하게 사용하도록 합니다.

추상화는 무엇을 남기는가?

대상을 사용하는 데 필요한 핵심 특징과 기능만 모델에 남기고 복잡한 구현 세부사항은 제거합니다.

상속은 무엇을 재사용하는가?

상위 클래스에 정의된 공통 상태와 행동을 하위 클래스가 이어받아 추가하거나 변경할 수 있게 합니다.

다형성은 어떻게 관련되는가?

객체지향에서는 같은 요청에 객체 종류별로 다른 동작을 수행하는 다형성도 함께 설명됩니다.

간단한 코드에서는 객체지향 특징이 어떻게 나타나는가?

다음 Java 예시는 계좌의 잔액을 외부에서 직접 바꾸지 못하게 하고 메서드를 통해서만 변경하도록 캡슐화한 뒤, 적금계좌가 계좌 클래스를 상속하도록 구성한 형태입니다.

class Account {
    private int balance;

    public void deposit(int amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public int getBalance() {
        return balance;
    }
}

class SavingsAccount extends Account {
    private double interestRate;
}
  • balanceprivate으로 선언하여 외부의 직접 접근을 제한합니다.
  • deposit() 메서드가 잔액 변경 규칙을 담당합니다.
  • SavingsAccountAccount를 상속하여 계좌의 공통 기능을 재사용합니다.
  • 실제 프로그램에서는 예외 처리와 금액 자료형, 동시성, 업무 규칙 등을 더 엄밀하게 설계해야 합니다.

시험에서 자주 혼동되는 개념

기계어와 어셈블리어

기계어는 CPU가 직접 실행하는 이진 명령이고, 어셈블리어는 이를 니모닉으로 표현하여 어셈블러로 번역하는 언어입니다.

저급 언어와 고급 언어

저급 언어는 하드웨어와 가깝고 기계 의존성이 높으며, 고급 언어는 사람과 문제 표현에 가깝고 추상화 수준이 높습니다.

객체와 클래스

클래스는 공통 구조와 행동을 정의한 설계이고, 객체는 해당 클래스를 바탕으로 생성된 구체적인 인스턴스입니다.

캡슐화와 추상화

캡슐화는 내부 데이터와 구현을 보호하는 방법이고, 추상화는 중요하지 않은 세부사항을 제거해 핵심만 표현하는 관점입니다.

C와 Java

C는 시스템 프로그래밍과 저수준 제어에 강한 고급 언어이고, Java는 JVM 기반의 클래스 중심 객체지향 언어입니다.

상속과 객체 재사용

상속은 기존 클래스의 공통 특성을 확장하는 방법이지만 모든 재사용을 상속으로 해결하는 것은 아니며 객체 구성도 활용됩니다.

암기 기준: 기계어는 0과 1, 어셈블리어는 니모닉과 어셈블러, 고급 언어는 번역 과정, 객체지향은 객체·클래스·메시지와 캡슐화·추상화·상속으로 연결합니다.

이번 장 핵심 요약

  1. 프로그래밍 언어는 추상화 수준·실행 방식·패러다임·사용 목적에 따라 구분할 수 있습니다.
  2. 저급 언어는 하드웨어와 가까워 기계 의존성이 높고 세밀한 제어가 가능합니다.
  3. 기계어는 이진 명령으로 구성되어 CPU가 직접 실행합니다.
  4. 어셈블리어는 니모닉으로 명령을 표현하고 어셈블러가 기계어로 번역합니다.
  5. 고급 언어는 문제와 알고리즘을 사람이 이해하기 쉬운 형태로 표현합니다.
  6. 고급 언어는 컴파일러·인터프리터·가상 머신 등의 실행 환경을 필요로 합니다.
  7. 고급 언어의 이식성은 높을 수 있지만 운영체제·라이브러리·구현 차이에 영향을 받습니다.
  8. FORTRAN은 과학 계산, COBOL은 업무 처리, LISP는 리스트 처리, PROLOG는 논리 추론이 대표 특징입니다.
  9. C는 고급 언어이면서 시스템 프로그래밍에 필요한 저수준 접근 기능을 제공합니다.
  10. Java는 JVM 기반의 클래스 중심 객체지향 프로그래밍 언어입니다.
  11. 객체는 상태와 행동을 가지며 클래스는 객체의 공통 설계입니다.
  12. 메시지는 객체에 특정 행동을 요청하는 상호작용입니다.
  13. 캡슐화는 데이터와 메서드를 묶고 내부 접근을 제한합니다.
  14. 추상화는 불필요한 세부사항을 제거하고 핵심 특성과 기능에 집중합니다.
  15. 상속은 기존 클래스의 공통 상태와 행동을 이어받아 새로운 클래스를 정의합니다.

복습 문제

컴퓨터가 직접 이해하고 실행하는 0과 1의 명령으로 구성된 언어는?

기계어입니다.

기계 명령을 니모닉으로 표현하고 어셈블러로 번역하는 언어는?

어셈블리어입니다.

기계어와 어셈블리어를 함께 부르는 분류는?

저급 언어 또는 저수준 언어입니다.

사람이 이해하기 쉬운 표현을 사용하고 번역 과정을 거쳐 실행되는 언어는?

고급 언어입니다.

과학·공학의 수치 계산을 대표하는 초기 고급 언어는?

FORTRAN입니다.

기업과 행정의 업무 자료 처리를 대표하는 언어는?

COBOL입니다.

리스트 처리와 기호 처리에 강하고 인공지능 분야에서 역사적으로 활용된 언어는?

LISP입니다.

사실과 규칙을 기반으로 논리적 추론을 수행하는 언어는?

PROLOG입니다.

객체가 공통으로 가질 상태와 행동을 정의한 설계는?

클래스입니다.

클래스를 바탕으로 생성된 구체적인 실체는?

객체 또는 인스턴스입니다.

데이터와 메서드를 하나로 묶고 내부 구현에 대한 직접 접근을 제한하는 특징은?

캡슐화입니다.

불필요한 세부사항을 숨기고 중요한 특성과 기능만 표현하는 특징은?

추상화입니다.

상위 클래스의 상태와 행동을 하위 클래스가 이어받는 특징은?

상속입니다.

객체지향 언어에서 공통 속성과 행위의 집합을 의미하는 것은?

클래스입니다.

시스템 프로그래밍에 적합하고 포인터를 통해 저수준 메모리 접근을 지원하는 고급 언어는?

C 언어입니다.

참고자료

이 글은 사무자동화산업기사 제2과목 프로그래밍 일반의 프로그래밍 언어 종류와 객체지향 프로그래밍 개념을 이해하고 복습할 수 있도록 재구성한 정리입니다. 언어의 분류와 활용 분야는 시대·구현·교재에 따라 다르게 설명될 수 있으며, 실제 시험에서는 문제에 제시된 정의와 최신 Q-Net 출제기준을 함께 확인해야 합니다.


같은 주제의 다른 글

이 글과 같은 카테고리에 있는 이전 글과 다음 글을 확인해보세요.