728x90
프로그래밍 언어에 대해서 여러 군데(아래 링크들)에 기록해놔서, 내가 찾아보기 편하려고 한 곳에 정리함!🙂
- 파이썬 클래스 https://hjinn0813.tistory.com/81
- 독서기록 https://hjinn0813.tistory.com/69
프로그래밍 언어의 유형별 분류
1. 개발 편의성 측면에 따른 분류
저급언어 Low-level Language |
컴퓨터가 직접 이해할 수 있는 언어. 실행 속도가 빠르지만, 기계마다 기계어가 달라 호환성이 없고 유지관리가 어렵다. |
고급언어 High-level Language |
인간이 이해할 수 있는 소스코드로 되어있는 언어. 실행을 위해 저급언어로 번역하는 과정이 필요하다. |
2. 빌드 방식에 따른 분류
인터프리터 언어 Interpreter Language |
코드를 한 줄씩 읽고 해석해서 실행하며, 컴퓨터가 이해할 수 있는 언어로 통역함. 동시통역. ex. JavaScript, Python, Basic 등 |
컴파일 언어 Compile Language |
코드를 기계어로 번역하는 컴파일러가 코드 전체를 분석해서, 컴퓨터가 이해할 수 있는 목적 코드로 변환하여 실행한다. 순차통역. ex. C언어, C++ 등 |
바이트 코드 언어 Byte Code Language |
컴파일을 통해 가상 머신이 이해할 수 있는 바이트 코드로 변환되고, 이후 가상 머신이 기계어로 번역한다. ex. Java, Scala 등 |
어셈블리 언어 Assembly Language |
인간이 이해하기 쉬운 형태의 기호를 사용하여 작성되며, 어셈블러를 통해 기계어로 변환된다. 기계어와 거의 일대일 대응 관계에 있어 하드웨어에 매우 가깝게 작동한다. 하드웨어 특정적이며, 주로 시스템 레벨 또는 하드웨어 제어 프로그래밍에 사용된다. |
3. 실행 및 구현 방식에 따른 분류
명령형 언어 (절차어) Imperative Language |
컴퓨터가 수행해야 할 절차를 기술하여 프로그래밍 상태 변경에 중점을 둠. ex. Fortran, C언어 등 |
선언형 언어 (질의어) Declarative Language |
프로그램이 수행해야 할 문제를 기술하는 언어. 목표는 명시하지만 알고리즘은 명시하지 않는다. 가독성과 재사용성이 좋으며 오류 발생 가능성이 적다. ex. SQL, Haskell 등 |
함수형 언어 Functional Language |
데이터 처리를 수학적 함수 계산으로 취급하며, 상태 변경과 가변 데이터를 피함. ex. LISP, Scala 등 |
논리형 언어 Logic Language |
논리 문장을 사용하여 프로그램을 표현하며, 조건이 만족되면 연관된 규칙이 실행됨. ex. Prolog 등 |
객체지향 언어 Object-Oriented Language |
객체 간의 메시지 통신을 통해 동작한다. 데이터와 기능을 하나의 객체로 묶고, 객체의 모음이 상호작용하며 프로그램을 구성한다. 오류가 있으면 해당 부분만 수정하면 되므로 유지/보수가 편리하다. ex. Python, Java, C++ 등 |
조금 더 명확하게 정리하자면 아래와 같이 분류할 수 있다.
선언형 언어 Declarative Language |
- 질의어 (Query Language): SQL, XQuery - 논리형 언어 (Logic Language): Prolog - 함수형 언어 (Functional Language, 선언형에 가까운): Haskell, Lisp - 마크업 언어 (Markup Language): HTML, CSS |
명령형 언어 Imperative Language |
- 절차지향 언어 (Procedural Language): C, COBOL - 객체지향 언어 (Object-Oriented Language): Java, Python - 함수형 언어 (Functional Language, 명령형에 가까운): JavaScript - 스크립트 언어 (Scripting Language): Python, JavaScript (주로 응용 프로그램 제어) |
객체지향 언어
소프트웨어의 구조를 객체로 만들고, 객체들 간의 상호작용으로 소프트웨어를 동작시키는 프로그래밍 언어.
객체를 적절히 조립하고 연결하여 소프트웨어를 구성한다.
객체지향 언어의 특징
캡슐화 Encapsulation |
데이터(속성)와 데이터를 처리하는 함수(연산)를 하나로 묶어 캡슐화. - 캡슐화된 객체는 재사용이 쉽다. - 인터페이스를 제외한 세부 내용이 외부에 은폐되어, 외부 모듈의 변경으로 인한 오류의 파급효과가 적다. - 인터페이스가 단순해지고, 객체 간의 결합도가 낮아진다. |
정보은닉 Information Hiding |
객체가 자신의 정보를 외부에 숨기고 연산을 통해서만 접근을 허용한다. - 정보은닉된 모듈과 통신할 필요가 있으면 필요한 정보만 인터페이스를 통해 주고 받는다. - 정보은닉을 통해 모듈을 독립적으로 수행할 수 있다. - 모듈이 변경되어도 다른 모듈에 영향을 주지 않아서 수정, 시험, 유지보수가 용이하다. |
상속 Inheritance |
상위(부모) 클래스의 데이터와 연산을 하위(자식) 클래스가 물려받는 것. - extends 라는 키워드를 사용한다. - 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고도 사용할 수 있다. 새로운 속성과 연산도 첨가하여 사용할 수 있음. - 객체와 클래스의 재사용이 높아질 수 있다. - 다중 상속(Multiple Inheritance): 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것. 클래스 계층이 복잡해져서 상속 순서 추적이 어렵고, 상위 클래스의 변경이 하위 클래스에 의도하지 않은 영향을 줄 수 있어서 허용하지 않는 프로그래밍 언어도 있음. |
다형성 Polymorphism |
같은 이름의 메서드가 상황에 따라 다르게 동작하는 것, 또는 메시지에 의해 객체(클래스)가 연산을 수행할 때 각각의 객체(클래스)가 가진 고유한 방법으로 응답하는 능력. - 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다. - 오버로딩(Overloading): 메소드 이름은 같지만 인수를 받는 자료형과 개수를 달리하여 여러 기능을 정의할 수 있다. - 오버라이딩(Overriding): 상위 클래스에서 정의한 메소드와 이름은 같지만, 메소드 안의 실행 코드를 달리하여 하위 클래스에서 재정의하여 사용할 수 있다. |
추상화 Abstraction |
불필요한 부분을 생략하고 중요한 부분에만 초점을 맞춰 개략화. |
객체지향 언어의 장단점
장점 | 재사용성 및 생산성 향상 → 유지보수 용이 자연적인 모델링 가능 |
단점 | 코딩 난이도 증가 → 개발 속도 저하 실행속도가 일반적으로 느린 편이다. |
객체지향 언어의 종류
Java | 가장 대표적인 객체지향 프로그래밍 언어 |
C++ | C언어에 객체지향성을 추가한 확장형 언어 |
파이썬 Python | 플랫폼이 독립적이며, 인터프리터식 객체지향적 동적 타이핑을 지원하는 대화형 언어 |
절차지향 언어
전체 코드가 유기적으로 연결되어 일련의 처리 절차를 정해진 문법에 따라 순서대로 실행하는 프로그래밍 언어
procedure(루틴, 서브루틴, 메서드, 함수)를 사용하여 작성하는 프로그래밍 스타일
절차지향 언어의 장단점
장점 | 함수를 통한 코드 재활용성 증가. 컴퓨터의 처리 구조와 유사하여 실행 속도가 빠르다. |
단점 | 코드가 유기적으로 연결되어 있어서 프로그램 분석 및 이해, 유지보수가 모두 어렵다. |
절차지향 언어의 종류
C언어 | 시스템 프로그래밍 언어로 개발되어, 현재는 운영체제 개발에 사용된다. 이식성이 뛰어나다. |
Cobol | 비즈니스 컴퓨터 프로그램을 위해 설계되어, 금융 및 인적자원 등의 분야에 사용된다. |
Fortran | 과학 계산용으로 주로 사용되는 언어. |
Basic | 교육용으로 개발되어 언어의 문법이 쉽다. |
스크립트 언어
다른 응용 프로그램에 삽입되어 응용 소프트웨어를 제어하는 프로그래밍 언어
스크립트 언어의 종류
자바스크립트 JavaScript |
HTML 문서 내에 삽입되어 사용되며, 동적인 웹페이지 제작 가능 |
JSP (JavaServer Pages) |
HTML 페이지 안에 자바 코드를 직접 삽입하여 웹 서버에서 동적 웹페이지 생성 |
PHP | 서버 측 스크립트 언어로, HTML 문서 안에서 사용. 리눅스, 아파치 웹서버, MySQL DB 환경에서 주로 사용된다. |
파이썬 Python |
귀도 반 로섬에 의해 개발된 객체지향 스크립트 언어. 컴파일 과정이 필요없으며, 다양한 플랫에서 사용 가능. |
728x90
'📚 자료실' 카테고리의 다른 글
빌드, 배포, CI/CD 개념 정리 (0) | 2024.07.16 |
---|---|
[도서] 개발자가 되고 싶습니다 (0) | 2024.06.30 |
[도서] IT 5분 잡학사전 (0) | 2024.06.06 |
페이지 교체 알고리즘 기출문제 풀이 (2020.06) (0) | 2024.05.21 |
알고리즘 종류, 함수적 종속 이해 (0) | 2024.05.20 |