컴퓨터 = 일을 대신하는 기계
프로그램 = 컴퓨터가 해야할 일을 알려주는 설명서
프로그래밍 언어 = 설명서 쓰기 위해 사용하는 언어
객체 지향 프로그래밍 : 함수(기능)와 데이터를 의미있는 단위인 객체(오브젝트)로 묶어서 프로그래밍함.
작은 객체를 만들고 그 객체를 이용해서 큰 것들을 만들어감.
큰 단위를 만들고 작은 부분을 만들어 내는 방식.
코드 전체가 완성되지 않으면 동작을 제대로 확인해볼 수 없고, 하나의 기능을 수정할 때 모든 코드를 점검해 봐야 하는 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
자료형 지정 = 안전장치 역할 하기도 함.
: 변수에 자료형을 정해주지 않는 언어. (Python, Javascript, Ruby, php...)
1) 간결, 편리, 로직 이해 쉬움.
2) 실행 속도가 다소 느릴 수 있음.
3) 코드 내용 눈에 잘 들어옴.
4) 배우기 쉬움.
5) 혼자 빠르게 하는 단순 프로젝트에 적합
: 실행 전 자료형을 미리 정해줌. (C, C++, Java, Kotlin... )
1) 제약, 규칙 많음.
2) 실행 속도 빠름.
3) 코드 구조 눈에 잘 들어옴.
4) 배우기 어려움.
5) 여러 사람 협업하는 크고 복잡한 프로젝트에 적합.
6) 실수 방지 및 체계적 코드 작성 가능.
컴퓨터와 가까운 언어와 사람과 가까운 언어의 상대적인 스펙트럼.
컴퓨터와 가까운 언어, 사람이 이해하기 어려움.
사람과 가까운 언어, 컴퓨터가 이해하기 어려움.
프로그래머가 좀 더 필요한 기능과 논리에 집중할 수 있으나, 컴퓨터에게 너무 많은 것을 맡기게 됨.
추상화 : 몰라도 되는 내용은 숨기고 꼭 알아야 할 내용만 드러내는 것.
프로그래밍 언어 전반에 적용되기 때문에 문법만 달라지는 것이 아니라, 코드 작성 방식, 코드를 바라보는 관점 자체가 달라짐.
✨추상화가 많이 될수록 고수준 언어.
위의 내용을 참고하여 현재 사용되고 있는 프로그래밍 언어들을 3가지로 분류할 수 있음.
(하지만 분류들이 언어를 나누는 절대적인 기준이라고는 볼수 없고 필요에 따라 등장했다 정도만 이해)