본문 바로가기
공부/JAVA

Java란?

by 밍미 2018. 5. 31.
JAVA

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

댓글