으나님의 잡다한 개발상식
웹&언어 기초 본문
1. 2진수와 16진수
(1) 2진수
1) 컴퓨터는 2진수의 숫자 즉, 1과 0만을 인식한다.
2) 2진수의 숫자로 쉽게 바꾸는 방법(보통 학교에서 배우는 방법보다 빠르다) 예시
EX) 372를 2진수의 숫자로 바꾸기
- 먼저 2의 배수를 1을 오른쪽부터 쭉 나열한다.
- 왼쪽부터 각 372에서 256을 뺄 수 있으면 1
- 그 다음 372에서 256을 뺀 나머지인 116에서 128을 못 빼니까 0
- 그 다음 128에서 64를 뺄 수 있으니 1
이런 식으로 반복한다.
256 128 64 32 16 8 4 2 1
1 0 1 1 1 0 1 0 0
(2) 16진수
1) 16진수는 메모리가 적을 때 사용되기도 한다. 순서는 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. 즉 15=F
EX) 125를 16진수로 바꾸기
- 10진수의 수를 16진수로 변환할 때는 먼저 2진수로 변환한 후 16진수로 변환하는 것이 빠르다.
- 2의 배수를 1부터 오른쪽부터 쓰고 2진수를 먼저 구한다.
- 4칸씩 나누어서 각각의 칸을 10진수로 구한 후 16진수 숫자로 변환한다.
| 128 64 32 16 | 8 4 2 1
0 1 1 1 | 1 1 0 1
여기서 오른쪽 첫째칸은 '1101(2)'이므로 10진수로 변환하면 1+4+8=13이다. 13은 16진수의 'D'이다.
왼쪽 칸은 '0111(2)'이므로 10진수로 변환하면 1+2+4=7이다.
따라서 125의 16진수 표기는 '7D'이다.
2. 저장장치
(1) RAM : PC/하드디스크와 통신하며 전원이 꺼지면 날라가는 휘발성메모리. OS는 로드되자마자 RAM에 강제로 저장된다.
(2) ROM : PC가 꺼져도 날라가지 않는 비휘발성메모리. 컴퓨터를 처음 부팅하면 ROM에 있는 바이오스가 실행되며 여러가지(하드디스크 등)을 인식하고 이들의 부팅 순서를 설정한다. 이후 바이오스가 OS가 자원을 컨트롤 할 수 있도록 변경한다.
(3) 하드디스크 : SSD, HDD 등의 종류가 있으며 역시 비휘발성이다. LP
3. OS구조(안드로이드)
(1) OS 중 안드로이드의 구조를 살펴보면 다음과 같다.
APP - JAVA
프레임워크 - JAVA, C++, 자원관리 등을 하는 역할
커널(드라이버) - C
부트로더 - 부팅시 작동
(2) 커널과 부트로더는 리눅스 기반
(3) 부트로더가 가장 아래이고 APP이 가장 위쪽에서 작동하며 개발할 때 알아야 할 부분은 APP과 프레임워크 부분이다.
4. 알고리즘과 자료구조
(1) 알고리즘
1) 알고리즘은 '문제를 푸는 방식'에 대한 것이며, 정해져 있는 알고리즘과 정해져 있지 않은 알고리즘이 있다. 초급개발자는(?) 정해져 있는 알고리즘을 주로 공부하게 된다.
2) 알고리즘은 주로 C언어로 되어있는 경우가 많다. 왜냐하면 C언어가 모든 언어의 기반이 되기 때문이다.
3) 알고리즘은 동작이 한가지로만 해석되게(즉 명확하게) 짜여야 하며 동작의 개수는 유한하여야 한다.
(2) 자료구조
1) 자료구조는 쉽게 말해서 '자료를 저장하는 구조'를 일컫는다.
2) 자료를 저장하는 방법은 4가지가 있다.
- 변수에 저장
- 배열에 저장
- ArrayList에 저장
- DataBase에 저장
5. 프로그래밍의 순서
(1) 문제 해결을 위한 프로그램 요구 인지
(2) 언어 선택
(3) 프로그램 제작
(4) 디버깅
(5) 유지보수
6. 절차지향 vs 객체지향
(1) 절차지향 : 'C언어'. 순서대로 시행된다. 근데 동시에 시행되는 경우도 있다. 클래스가 없다!
ex) 컴퓨터에서 음악 재생과 동영상 재생을 동시에 하면 둘다 스피커로 섞여서 나온다.
(2) 객체지향
1) 클래스가 있다! 객체지향도 위에서 아래로 시행된다.
2) 객체지향이란 주로 붕어빵과 붕어빵틀로 설명되곤 하는데, 즉 어떤 앙꼬를 넣은 붕어빵이든 만들 수 있는 틀이 되는 게 객체지향이라는 것이다. 객체지향언어에는 java, c#, c++, python, PHP, javascript가 있다.
7. 각 언어의 특징
(1) java
1) 웹 기반 언어로 JSP에서 가장 많이 사용되며 안드로이드의 기반 언어이기도 했다.
2) 근데 최근에는 안드로이드가 코틀린이라는 언어를 따로 사용할 것을 밝혔다. 즉 앞으로의 안드로이드는 코틀린 개발이고, 여태까지 만들어진 안드로이드 앱은 자바를 사용
3) 자바는 '이식성'이 좋다 : java virtual machin(JVM, 즉 가상머신) 위에서 자바가 실행되기 때문에 운영체제의 종류 상관없이 실행이 된다는 점을 뜻한다.
4) 가상머신이란 원래 다수의 운영체제를 하나의 하드웨어에서 돌리는 게 불가능한데 그걸 가능하게 해주는 소프트웨어이다. 윈도우에서 안드로이드를 돌릴 수 있는 가상머신으로 녹스, 블루스택 등이 있고 그 외에 버츄얼박스, vmware 등이 있다. 이는 듀얼부팅과는 다르다. 듀얼부팅은 하드웨어에 os를 2개 이상 깔고 부팅시 어떤 os로 부팅할건지 선택한다.
5) 자바는 포인터가 없는 게 아니라 모두 포인터이고, 따로 포인터를 사용하지 않는 것이다.
6) 컴파일 언어에 속한다.
(2) C
1) C는 클래스가 없다. 절차지향언어이기 때문이다.
2) C는 포인터가 있다. 포인터란 주소를 가리킨다.
(3) 파이썬
1) 인공지능 쪽에서 주로 사용되는 언어이다.
2) 인터프리터 언어에 속한다.
(4) C#
1) 자바랑 문법이 거의 동일한 언어이다.
(5) PHP와 자바스크립트
1) 둘다 웹에 기반한 언어이다.
2) 우리나라에서는 자바스크립트의 비중이 높으나 미국이나 세계적으로는 PHP의 비중이 높다.
※ java, c#, c++, python은 응용프로그램에서, php, javascript는 웹에서 쓰인다.
8. 컴파일 언어 vs 인터프리터 언어
(1) 컴파일 언어
1) 소스코드 전체를 기계어로 컴파일해서 실행파일을 만들고 실행하는 언어이다.
2) java, c, c++은 static type으로 컴파일 언어이다. 즉, type(자료형)을 지정해야 하는 언어이다. 컴파일시 자료형이 맞지 않다면 컴파일 에러가 발생한다. 개발을 할 때에는 인터프리터 언어보다 느릴 수 있으나 컴파일 시 타입에 대한 정보를 결정하기 때문에 속도가 빠르다.
ex) int = 정수, 이처럼 자료형을 지정해야 함.
(2) 인터프리터 언어
1) 코드를 한 줄씩 읽어내려가면서 실행된다.
2) python, javascript, ruby는 dynamic type으로 인터프리터 언어이다. 즉 type(자료형)을 지정하지 않아도 되며 런타임 시 type error오류가 발생할 수 있다. 개발하는 속도는 빠를 수 있으나 코드를 한 줄씩 읽기 때문에 속도는 상대적으로 느리다.
'웹 기초' 카테고리의 다른 글
[Web] 서버와 클라이언트 (0) | 2020.07.21 |
---|---|
[Web] WAS / Web Server / Web Container (0) | 2020.07.15 |
세션 (0) | 2019.12.04 |
네트워크/TCP,IP (0) | 2019.11.25 |
네트워크 기초 (0) | 2019.11.05 |