프로그래밍 언어 분류

gyomni·2021년 7월 17일
0

Programming Language

목록 보기
1/3
post-thumbnail

📝프로그래밍 언어

컴퓨터 = 일을 대신하는 기계
프로그램 = 컴퓨터가 해야할 일을 알려주는 설명서
프로그래밍 언어 = 설명서 쓰기 위해 사용하는 언어

📝객체 지향(Object-Oriented) 지원 유무

객체 지향 프로그래밍 : 함수(기능)와 데이터를 의미있는 단위인 객체(오브젝트)로 묶어서 프로그래밍함.

📌Bottom-up 방식

작은 객체를 만들고 그 객체를 이용해서 큰 것들을 만들어감.

📌Top-down 방식

큰 단위를 만들고 작은 부분을 만들어 내는 방식.

코드 전체가 완성되지 않으면 동작을 제대로 확인해볼 수 없고, 하나의 기능을 수정할 때 모든 코드를 점검해 봐야 하는 Top-down 방식의 단점을 보완하고자 접근방식을 바꾸어 Bottom-up 방식으로 접근.

객체 지향 장점
1) 데이터에 변화 생기면 관련 객체만 신경쓰면 됨.
2) 조금 더 의미있는 단위로 나누기 때문에 코드이해와 다른프로그램에서의 재사용이 좋음.
3) 전체 완성이 되지않더라도 일부 기능 사용가능하므로 테스트에 유리.
4) 유지 보수에 용이.

객체 지향 단점
1) 코드를 잘 나누고 설계하는 것 어려움.
2) 규모가 작아 혼자 바로 만들 수 있거나, 데이터 신경쓰지 않아도 되는 경우, 혹은 이후 바뀔 염려 거의 없는 경우는 바로 만들어 버리는 것이 더 빠르고 효율적.
3) 속도가 느려지고, 저장 공간 많이 차지.
4) 임베디드와 같은 특정 분야 부적합.

✨객체 지향 적합 -> 많은 데이터 다루는 프로그램, 규모 큰 프로젝트
✨객체 지향 부적합 -> 극도로 빠른 실행 속도 필요한 분야, 성능 제한적인 기기(스마트 워치, 스마트 TV...)

📝변수 데이터 타입 지정 유무

name = "Joy"
age = 20

//파이썬, 루비...
//자료형 지정 X

String name = "Joy";
int age = 20;

//자바, 자료형 지정 O

char name[4] = "Joy";
int age = 20;

//C언어, 자료형 지정 O

자료형 지정 = 안전장치 역할 하기도 함.

📌Dynamic typing

: 변수에 자료형을 정해주지 않는 언어. (Python, Javascript, Ruby, php...)

1) 간결, 편리, 로직 이해 쉬움.
2) 실행 속도가 다소 느릴 수 있음.
3) 코드 내용 눈에 잘 들어옴.
4) 배우기 쉬움.
5) 혼자 빠르게 하는 단순 프로젝트에 적합

📌Static typing

: 실행 전 자료형을 미리 정해줌. (C, C++, Java, Kotlin... )

1) 제약, 규칙 많음.
2) 실행 속도 빠름.
3) 코드 구조 눈에 잘 들어옴.
4) 배우기 어려움.
5) 여러 사람 협업하는 크고 복잡한 프로젝트에 적합.
6) 실수 방지 및 체계적 코드 작성 가능.

📝저수준 언어 VS. 고수준 언어

컴퓨터와 가까운 언어와 사람과 가까운 언어의 상대적인 스펙트럼.

📌저수준 언어 (Low-level Programming Language)

컴퓨터와 가까운 언어, 사람이 이해하기 어려움.

📌고수준 언어 (High-level Programming Language)

사람과 가까운 언어, 컴퓨터가 이해하기 어려움.
프로그래머가 좀 더 필요한 기능과 논리에 집중할 수 있으나, 컴퓨터에게 너무 많은 것을 맡기게 됨.

추상화 : 몰라도 되는 내용은 숨기고 꼭 알아야 할 내용만 드러내는 것.
프로그래밍 언어 전반에 적용되기 때문에 문법만 달라지는 것이 아니라, 코드 작성 방식, 코드를 바라보는 관점 자체가 달라짐.

✨추상화가 많이 될수록 고수준 언어.


위의 내용을 참고하여 현재 사용되고 있는 프로그래밍 언어들을 3가지로 분류할 수 있음.
(하지만 분류들이 언어를 나누는 절대적인 기준이라고는 볼수 없고 필요에 따라 등장했다 정도만 이해)

① 자세한 언어

  • Low-level에 가까운 어셈블리 언어, C언어 등이 있음.
  • 객체 지향 개념 적용되지 않음.
  • 코드 작성 시 자료형 고려 해야 함 (static typing 언어).
  • 코드 작성, 수정 힘들고 시간소요 많음.
  • 프로그램을 만들기만 하면 실행 속도 매우 빠름.
  • 스마트 워치, TV, 가전제품...기계에 자주 사용. =>임베디드 시스템, IoT
  • 스트리밍 서비스, 검색 엔진...

② 체계적인 언어

  • static typing 언어이면서 객체 지향 개념 적용된 언어로 C++, Java등이 있음.
  • 큰 규모 프로젝트에 적합.
  • '자세한언어' 보다는 낫지만, 여전히 문법 완전히 쉽지는 않음.
  • 코드 작성 시간보다 설계하는데 시간 더 소요될 수 있음.
  • '자세한언어'보다 유지보수 편리.

③ 쉬운 언어

  • 객체 지향 개념이 적용된 Dynamic typing 언어, 쉽게 배우고 사용할 수 있는 Python, Ruby등이 속함.
  • 코드 작성 시간 가장 짧음.
  • 배우기 쉬워 진입 장벽이 낮고, 읽고 수정하는 것이 간편.
  • 코드 작성시간은 짧지만, 컴퓨터의 코드 실행 속도는 느림.
  • 많은 사람과의 협업에는 부적절.
profile
Front-end developer 👩‍💻✍

0개의 댓글