1.프로그램,어플리케이션,소프트웨어(↔하드웨어)의 차이
결론 : 다 같은건데 각자 상황과 문맥에 맞게 쓸때 다르게 쓴다고 생각하면됨!
2.기계어(=머신 랭귀지)
여기서 머신은 컴퓨터를 말함.
컴퓨터는 전자회로여서 전압의차이로 신호를 인식한다.
전압이 높고 낮음 이 두가지밖에 모르는거임
그런고로 0과1의 이진수로 이루어져있다고 말하는것이다.
3.어셈블리 언어
기계어를 우리가 사용할 수 없어 나온 언어(그렇다고 우리가 사용하는 언어는 아님.지금은 거의 사용안함)
CPU나 메모리를 직접 제어할 수 있는 저수준 언어
4.고수준 언어(하이레벨 랭귀지)
c,c++,자바,파이썬,자바스크립트 등등의 언어
자기가 개발하는 목적에 따라 저수준이 적합할 수도 있고 고수준이 적합할 때도 있음
c,c++은 중간수준의 언어라고 불림(요즘 많은게 나와서)
5.컴파일러
-프로그램의 일종으로 프로그래밍을 하는데 우리가 요구하는 것을 기계어로 번역해주는 즉,컴파일 해주는 프로그램
(= 저급언어를 고급언어로 통역해주는 애)
-C++같은 컴파일러 언어는 반드시 실행파일이 생성된다.
-개발 환경 과정
고수준으로 입력한 코드 -> 컴파일 -> 실행파일(=코드로 만들어진 프로그램, 우리가 만들고자 한 프로그램임)로 변환 -> 실행파일이 하드디스크에 저장됨 -> 그러면 중앙처리장치(CPU)와 메모리가 실행파일을 운영함 -> 실행 결과를 확인할 수 있음
내부적으로 개발환경이 실행파일을 실행시켜서 중앙처리장치와 메모리에 넣어줘서 실행결과를 우리가 볼 수 있는것임
-컴파일러는 기계마다 다른 컴파일러가 존재함(윈도우,리눅스 등)
-> 이 말은 곧 실행파일도 윈도우 실행파일이 존재하고 리눅스 실행파일이 존재한다는 뜻임
6.인터프리트 언어(컴파일러 언어가 아닌것)
고수준 언어로 쓰여진 스크립트 -> 인터프리터(컴파일같은 일종의 프로그램) -> 중앙처리장치,CPU -> 실행결과
-컴파일러 언어와 다르게 실행파일이 없음
-코드가 아닌 스크립트 언어임(인터프리터 언어에서 작성한 코드를 스크립트라고 불러온거임)
-실행파일이 안생겨 빠를것같지만 의외로 더 느림 왜냐면 같은 스크립트를 여러번 시켜서 인터프리터를 여러번 거쳐야됨
7.이식성 언어(ex 자바)
자바는 컴파일러를 거치면 바이트 코드라는게 생기는데 얘는 윈도우에서든 리눅스에서든 읽을 수 있음 이게 윈도우 가상기계랑 리눅스 가상기계에 따로따로 들어가서 각 기계의 실행결과를 생성함
##c/c++언어는 무엇일까?
1. C언어는 데니스리치라는 사람이 어셈블리 언어를 쓰는게 너무 힘들어서 만든 언어임
2. C++는 70년대 후반에 Biarne Stroustrup라는 분이 만드신 언어로 C언어에서 확장된 언어 (확장된게 바로 객체지향적 프로그램)
3.이 두 언어의 철학
프로그래머를 믿어라
실제 세계에서 쓸모가 있어야한다
프로그래머가 스스로 스타일을 선택할 수 있어야한다(다양성)
유용한 기능을 추구하는것이 오용보다 더 중요하다.
(=잘못사용하는것보다 새로운 기능을 추가하는게 더 중요함)
프로그래머의 의도를 알 수 없다면 스스로 명시하게 한다
(의도 모르면 컴파일이 안됨 근데 요즘은 그냥 실행부터됨)
C++ 아래 다른 언어는 없다
지금은 세상이 달라져 프로그래밍 철학이 많이 달라짐
###프로그래밍 과정
1단계
풀어야 할 문제가 뭔지 정의한다.
(=내가 만들고 싶은게 뭔지,그 안에 세부목표들이 뭔지 정한다는 뜻)
2단계
해법을 설계한다.
(=그것을 어떻게 만들 것인지 계획을 세워보는 것.)
'나는 컴퓨터가 이런걸 하도록 만들거야'
3단계
해법을 구현하는 프로그램을 작성한다.
(=생각한대로 프로그램을 개발해 나가는 것,코드 치는걸 작성한다고도 표현)
이 단계를 위해 우리가 언어를 배우는거고,조금 더 잘 작성하고 효율적으로 하고 복잡하고 어려운 내용을 작성하기위해서 이후 여러가지 소프트웨어 개발 방법을 배우는 것이다)
4단계
프로그램을 컴파일한다.
(문서파일이 cpp의 확장자로 저장이됨 이걸 소스파일이라 하고 이걸 컴파일한 후 오브젝트 파일 즉,실행파일을 생성해낸다.이때
이건 문서파일이 하나가 될수도 3개가 될수도 있다.오브젝트 파일(확장자 obj)이 여러개의 과정을 통해 만들어질 수 있단 뜻.이게 왜 여러개냐면 협업할때 혼자 다 하는게 아니라 역할 분담을 하기때문에)
5단계
오브젝트 파일들을 링킹(=연결)한다.
우리가 하나로 만들고싶기에 여러 오브젝트 파일들을 하나로 합치는것 그리고 이 오브젝트들을 링킹해주고 실행파일을 만들어내는 애를 '링커'라 한다.우리는 이 실행파일로 기능을 쓰는것
이때 링커에 런타임 소프트라는게 연관되는데(흔히 기본적인 여러 기능을 다른 사람이 만들어놓은걸 가져다 쓰는것)
6단계
테스트 해보고 문제가 있으면 고친다.(=디버깅)
출처-인프런(홍정모의 따라하며 배우는 C++)