JAVA
JAVA는 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어이며, 현재는 오라클사가 판권을 가지고 있다. 웹어플리케이션과 안드로이드에 특화되어있다. (일반 어플리케이션은 거의 개발하지 않음)
JVM(자바 가상 머신)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다. 즉, 운영체제에 독립적이다.
JAVA를 설치하면 jre가 설치되는데 이게 jvm(자바가 동작하기 위한 환경)이다.
C언어는 컴파일하면 바이너리 코드(이진코드)로 변환된다. 이진코드는 운영체제마다 다르며 윈도우를 번역해서 만든 이진코드는 리눅스 OS에서 알아 듣지 못한다. (운영체제에 종속적이다.)
리눅스용 C컴파일러(gcc)와 윈도우용 C컴파일러(boland c, visual studio)는 다르다.
자바는 JVM이 알아듣도록 번역(컴파일)을 하고, 이 때 만들어지는 파일은 class 파일들이다.
자바를 실행하면 JVM이 이 클래스 파일을 다시 한 번 번역한다. (jit, 인터프리터) - 필요한 것만 바로바로 번역해서 실행한다.
자바는 OS에 상관없이 동일한 컴파일러를 사용하지만 서로 JVM 버전은 같아야 한다.
이 개념을 받아들여서 닷넷(.NET Framework)이 만들어진다.
JVM
- JVM의 장점 : OS에 독립적이다. : Java Garbage Collection(쓰레기 수집기) - 메모리관리를 스스로 해 시스템을 안정적으로 구동할 수 있다.
- JVM의 단점 : 속도가 느리다. : OS 위에 JVM이 올라가 있어 시스템이 무거워진다. : 임베디드 장비들 중에는 자바를 사용하지 못하는 경우도 있다.
- 안정성 중심으로 특화되기 때문에 웹, 안드로이드가 주 개발 업종이 된다. 자바의 awt, 스윙 시장은 거의 사장되었다.
기본 자료형을 제외한 모든 요소들이 객체로 표현된다.
- C언어는 특정 타입을 값타입과 참조타입으로 전환 가능하다. int a; // 값 타입 int *pA // 포인터(참조로 전환)
- 자바에서는 기본데이터타입 (int, float, char, long 등) 은 언제나 값타입이고 배열, 객체는 언제나 참조타입이다. 값타입: 변수와 값 모두 스택에 저장 참조타입: 변수는 스택에, 객체는 힙에 저장 (동적생성) 생성해놓고 안쓰는 쓰레기는 garbage collector가 처리한다.
객체 지향 개념의 특징인 캡슐화(추상화, 은닉화), 상속, 다형성이 잘 적용된 언어이다.
추상성
- 사용자가 내부 구조를 알지 못해도 쉽게 사용할 수 있도록 하는 성격
- 클래스(공통적인 속성이나 기능을 가진 객체들을 클래스로 묶어 추상화)
은닉성
- 데이터를 보호하기 위해 감추는 성격
- 접근권한(private)
다형성
- 형태가 다양한 성격
- over-loading, over-riding
상속성
- 부모의 특징을 자식이 물려받는 것
- 코드 재사용 목적
멀티스레드(Multi-thread)를 지원한다.
- CPU의 일정시간을 쪼개 한 번에 여러 개의 함수들이 동시 실행될 수 있도록 하는 기법
- 함수를 만들면 함수들을 하나씩 호출한다. 이 함수들을 하나의 스레드로 만들어서 여러개의 스레드가 동시에 실행하도록 하는 것을 멀티스레드라고 한다.
- 데이터 양이 너무 커서 이것을 다 읽어들인 후 작업을 하려면 시간이 너무 오래걸리기 때문에 화면 출력을 위한 스레드와 데이터를 읽어오는 스레드를 별도로 만들어 각자 작업하게 한다.
- 네트워크 프로그램 수행 시 네트워크를 통해 데이터를 읽어오는 스레드 따로, 화면에 뿌리는 스레드 따로, 데이터 전송 스레드 따로 처리를 한다. 즉, 동시처리가 가능하도록 하는 기법이다.
'공부 > JAVA' 카테고리의 다른 글
[자료구조] 선형구조 (0) | 2018.06.05 |
---|---|
정규표현식(정규식, 표현식) (0) | 2018.06.05 |
Interface, Abstract (0) | 2018.05.31 |
Overloading vs Overriding (0) | 2018.05.31 |
변수란? (0) | 2018.04.26 |
댓글