본문 바로가기
컴퓨터공학/자바프로그래밍

1. 프로그래밍 언어 개론

by meow0110 2024. 5. 22.

컴퓨터 아키텍쳐

  • 컴퓨터의 하드웨어는 연산 장치 / 메모리 / 입출력 장치로 구성
  • 소프트웨어는 펌 웨어 / 운영체제 / 미들 웨어 / 응용 프로그램으로 계층적 구성

객체 지향 언어

  • 절차 지향 언어와 구분되는 프로그래밍 기법
  • 데이터 기반의 프로그래밍 기법
  • Object Oriented Design (Programming)

컴파일러

  • 프로그래밍 언어로 구성된 문서를 기계어로 변환하는 작업
  • 기본적 문법 오류 점검 기능

 

*모니터, 키보드, 마우스는 I/O 입출력장치다.

 

■ 애플은 M1칩같이 CPU를 자체 개발함. 그리고 자신들이 만든 iOS에 탑재함. 즉, 하드웨어와 소프트웨어를 조화롭게해서 성능을 극대화함.

■ CPU와 RAM이 좋을수록 프로그래밍 언어를 컴파일러하는데 시간이 단축된다.

■ 그래픽카드 : 별도의 컴퓨터라고 보자.(자체적인 GPU와 RAM이 들어감). 화면처리를 위해 GPU가 들어감.

 

■ ALU : 연산장치

■ Register :

 연산장치 가까이에 있는 메모리이다. 다른 말로는 캐쉬메모리라고 한다. 가격이 엄청 비싸다. 공간적인 제약이 크다.

 연산속도에 큰 영향을 미침 /  Main Memory(RAM)보다 가까이 있기 때문이다. 그래서 개발자는 이 메모리를 어떻게 최적화시키느냐가 중요하다. Main Memory까지는 거리가 머니까! 

■ 데이터에 대해 : 앞으로는 AI시대다. AI는 빅데이터를 쓴다. 즉 데이터를 쓰는것도 중요하지만 이를 처리하는 것도 매우 중요해졌다.

 

■ 데이터 요청(주소)

 연산을 하기 위해서는 데이터가 중요하다. 즉 데이터(피연산자)를 요청해야한다.

 즉 데이터가 어디있는지 주소를 알아야 한다. 근데 메모리 장치는 어마어마하게 넓다.

 메모리에는 Byte의일련번호가 있다. 즉 해당 데이터가 있는 위치이다. 

 그러나 일련번호를 다 외우기에는 너무 어렵다. 그러니 쉽게 기억할 방법을 찾아야한다.

 그렇기에, 고유한 이름을 붙인다.

 

 쉽게 생각하자면 휴대폰 내 전화번호를 외워 찾는 것보다, 이름으로 찾는게 더 빠르다.

■ 요청 데이터 전송(데이터)

■ 연산 결과 전송 (주소/데이터)

 

*프렉탈 : 단순할걸 반복하면 복잡해진다. (그냥 나온 단어. 알아만 두자.)

*데이터 : 피연산자라고도 부름. 

*결론 : 소프트웨어는 위의 데이터를 주고받는걸 반복하는 과정이다. 즉 이러한 과정을 얼마나 효율적이고 매끄럽게 만드냐가 중요하다.

 

 

■ 과정

 연산(CPU)하기 위해서는 데이터(메모리)가 필요함. 그리고 처리한 데이터를 되돌려야함. 그렇기 위해 주소가 필요하다.

 그러나 주소를 다 알 수 없다. 그렇기 때문에 우리는 이름(변수)을 붙인다. 

 이제 데이터를 가져왔으니 연산장치를 통해 계산(연산자)할 수 있다.

 연산자를 효과적으로 사용하기 위해서는 반복 구문이다. (개발자는 힘을 덜 들이고, CPU는 부지런히 일하게)

 변수(데이터)를, 반복 구문에 최적화하여 저장하고 있으면 좋지 않을까? 해서 나온게  배열 / 구조체

 그리고 이러한 것들이 통합된다. 이것이 객체지향(클래스)적이라고 표현하는 것이다.

 

■ 변수 : 메모리의 어떤 특정 위치. (값을 의미할 때도 있다) / 작명하는 것이다!  위치의 이름을 구별해야하니까.

■ 알고리즘 : 반복 구문 + 연산자

■ 자료구조론 : 배열,구조체 + 변수 

 

 

 

 Fortran : 계산용도로 시작!

 C > C++ > Java 위주로 공부한다고 한다!

 

 

■ 기계어 : 하드웨어(CPU)가 인식하는 언어. 그런데 CPU를 만드는 회사마다 기계어가 다르다!

■ 자연어 : 인간이 인식하는 언어이다. 한국어, 영어, 아랍어 

■ 프로그래밍 언어 : 기계어와 자연어 특성을 모두 담고 있다.

■ 결론 : 즉 기계어와 자연어의 특성을 모두 담고 있기 때문에 중간자의 역할을 해서  자연어를 기계어로 처리해주는 것이다.

소프트웨어 개발 : 프로그래밍 개발 , 코딩 이다.

■ 컴파일 : 내가 작성한 프로그래밍 언어를 기계어로 바꾸는 것. 

■ 컴파일러 : 컴파일 해주는 프로그램.

 기계어로 바꿔준다.

 문법 오류도 잡아준다.

 어법도 찾아주기도 한다.

■ 소스코드 : 프로그래밍 언어로 짜여진 것

 

 

■ 자바와 자바스크립트의 차이 : 서버(ex네이버)에서 클라이언트(유저)에게 결과를 보내줌. 근데 요즘은 일부 작업을 보내줌. 이때 코드(소스코드or기계어)를 보내기도 함. 

 

■자바(Java Applet) /컴파일 언어 :

 자바는 기계어를 보냄

 컴파일과 실행 파일이 분리되어 있다.

 

■자바스크립트(Java Script) / 스크립트 언어 :

 소스코드를 보냄.

 인터프리터 : 인터프리터 내에 컴파일(기계어를 만드는 과정)과 실행파일(실행하는 과정)이 다 들어있다.

 

■ 결론 : 

인터프리터 소스코드를 받아서 컴파일과 실행을 다 해버리는구나. 

컴파일러는 실행 파일을 만들지만, 인터프리터는 실행 가능한 코드를 파일로 만들지는 않는다.

 

■ 절차 지향형(CPU 중심)에서 객체 지향형(메모리중심)이 되었다.

■ 절차 지향, 객체지향 모두 중요하다. 둘다 상호적으로 필요하기 때문. 포커싱의 차이일뿐

 

■ 절차 지향형 :  알고리즘에 포커

■ 자료구조론 : 데이터에 포커싱

 

■ 왜 객체 지향형으로 가는가?

 데이터 양 증가

 데이터의 중요성 증대

 네트워크 분산 데이터 관리 : 하나의 컴퓨터에 저장하기 힘들어서 분산 저장해야하기 때문에

 객체 지향형 데이터 관리 :  Hierarchical(트리구조) 하게  만든 OODB (오브젝트 오리엔티드 데이터베이스 / 객체지향DB)

 

■ 관계형 데이터베이스 (RDB)

 테이블 형태, 엑셀같이 구성되어 있다.

 

■ 객체 지향형 데이터베이스 (OODB)

 인간이 생각하는 형태로 구성되어 있다.

 호랑이 > 포유류 > 동물 > 생물    이런식으로 올라가면 일반화 (호랑이? 일반적으로 생물이지!)

 생물 > 동물 > 포유류 > 호랑이  이런식으로 내려가면 구체화 (생물? 음 구체적으로 보자면 호랑이가 있지!)

 

 

 

학습정리

1. 컴퓨터 구조

  • 연산 장치는 메모리에 데이터를 요청, 처리한 후 다시 메모리에 저장
  • 소프트웨어의 연산자는 연산 장치를 활용하기 위해 만들어짐
  • 변수는 메모리상의 데이터를 구분하여 관리하기 위해 만들어짐

2. 기계어에서 자연어로

  • 프로그래밍 언어의 발전 과정이기도 함
  • 개발자의 역할은 자연어를 프로그래밍 언어로 변환하는 것
  • 컴파일러, 혹은 인터프리터의 역할은 프로그래밍 언어로 구성된 파일, 즉 소스 코드를 기계어로 변환하는 것