본문 바로가기

언어/Java

[Java] 자바란 무엇인가?

-자바언어의 특징

1. 운영체제에 독립적이다.

자바 언어가 나오기 전까지 기존의 언어(Programing Language)는 한 운영체제(Window, Linux, Macintosh) 등의 운영체제에 적용하기 위해 많은 노력이 필요했었다.

자바 언어가 나오면서부터 이러한 적용하기 위한 노력들이 줄어들었다.


그 이유는 뭐였을까?

바로 애뮬레이터인 자바가상머신(JVM)을 통해서 가능해졌다.


[[기존 언어]] < - > [[운영체제, 하드웨어]]

[[자바 언어]] < - > [[JVM]] < - > [[운영체제, 하드웨어]] 


기존 언어는 운영체제와 하드웨어 등이 이해 할 수 있도록 각각 운영체제에 맞는 변환과정을 거쳐야 했음 (종속적)

자바 언어는 운영체제와 하드웨어가 아닌 JVM 하고만 통신함, 응용 프로그램으로부터 전달받은 내용을 JVM이 해당 운영체제가 이해할 수 있도록 변환해 전달함 (독립적)


자바 <-> 운영체제 (독립적 관계)

JVM <-> 운영체제 (종속적 관계)


-> 결국 자바는 운영체제를 고려하지 않고, 코드를 작성하며 JVM이 이를 각 운영체제에 맞게 변환시켜줌. (개발자가 더욱 코딩에만 집중할 수 있음)


.java파일 -> 사람이 읽을 수 있는 text로 이루어짐 보통 프로그래밍을 하면 이 영역에다 함.

.class파일 -> .java파일을 컴파일 한 후 생성되는 파일, 이 곳은 bytecode로 이루어져있고, JVM이 이를 각 운영체제에 맞게 기계어로 변환하고 실행시킴.


.java 파일 (사람이 읽을 수 있는 text언어) -> (컴파일)  -> Hello.class생성 (bytecode가 존재) -> (실행) -> "Hello, world." 출력

                                                         javac.exe                                                  java.exe(JVM) 


과정 > .java파일을 컴파일러에 의해 컴파일 되면 .class파일이 생성 , 생성된 .class파일의 bytecode를 JVM이 읽고, 이를 각 OS에 맞는 기계어로 번역하여 OS에 전달.


   

2. 객체지향 언어이다.

자바는 객체지향 프로그래밍 언어로써, 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 언어이다.


3. 자동 메모리 관리

자바로 작성된 프로그램이 실행되면 가비지컬렉터가 자동적으로 메모리를 관리해 주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됨.

프로그래머가 사용하지 않는 메모리를 체크하고 자동적으로 반환시켜줌 -> 프로그래머가 다른데 신경을 쓰지 않고 프로그래밍에 더욱 집중하도록 만들어줌.


4. 네트워크와 분산처리를 지원한다.

인터넷과 대규모 분산환경을 염두에 둔 까닭에 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발 할 수 있도록 지원한다.


5. 멀티쓰레드를 지원한다.

일반적으로 멀티쓰레드는 운영체제 종류에 따라서 구현 방법과 처리방식이 다르나, 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 관계없이 구현 가능하다. 여러 쓰레드에 대한 스케쥴링(scheduling)을 자바 인터프리터가 담당하게 된다.


6. 동적 로딩(Dynamic Loading)을 지원한다.

자바는 동적 로딩을 지원해서, 실행시에 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용 할 수 있다는 장점이 있다. -> 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일할 필요가 없고, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성 할 수 있다.



-JVM(Java Virtual Machine)



 일반 애플리케이션

 OS(Windows)

 컴퓨터(하드웨어)


일반 애플리케이션은 OS만 거치고 하드웨어로 전달됨.


 Java 애플리케이션

JVM 

OS(Windows) 

컴퓨터(하드웨어)


일반적으로 Java 애플리케이션은 JVM을 거쳐서 OS에 전달함.

하드웨어에 맞게 완전히 컴파일 된 상태가 아닌 실행시에 해석(interpret)되기 때문에 다른 언어보다는(C, C++...) 속도가 느린 단점이 있다.





-자주 발생하는 에러와 해결방법


1. cannot find symbol , cannot resolve symbol

   지정된 변수나 메서드를 찾을 수 없다는 뜻. 선언되지 않은 변수나 메서드를 사용하거나

   변수 또는 메서드 이름을 잘못 사용한 경우에 발생. 대소문자 일치여부도 꼼꼼히 확인!


2. ';' expected

   세미콜론 ';'이 필요한 곳에 없다는 뜻.


3. Exception in thread "main" java.lang.NoSuchMethodError: main

   'main메서드를 찾을 수 없다'는 뜻. 클래스내에 main 메서드가 존재하지 않거나, 메서드 선언부에 'public static void main(String[] args)'에 오타가 존재하는 경우 해결방법으로는 main메서드가 클래스에 정의되어 있는지 확인, 정의되어있다면 main메서드의 선언부에 오타가 없는지 확인.


4. Exception in thread "main" java.lang.NoClassDefFoundError: Hello

   'Hello라는 클래스를 찾을 수 없다' 는 뜻이다. 'Hello'의 철자, 대소문자를 확인해보고 이상이 없으면 *.class클래스파일이 생성되었는지 확인.

   클래스파일이 존재하는데도 동일 메시지가 반복되면, 클래스패스의 설정이 바르게 되었는지 확인..


5. illegal start of expression

   문법적 오류 -> ( , { 열고 안닫거나, public이나 static 같은 키워드를 잘못사용한 경우에도 발생


6. class, interface, or enum expected

   보통 괄호 { 또는  } 의 개수가 일치하지 않는 경우에 발생.




'언어 > Java' 카테고리의 다른 글

[Java] 변수  (1) 2017.11.23

Today :
Yesterday :
Total :