자바란?
o 자바는 썬 마이크로 시스템즈(Sun Microsystemps)에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.
o 자바의 가장 중요한 특징으로 운영체제에 독립적이다. 따라서 운영체제의 종류에 관계없이 실행이 가능하며 운영체제에 따라 프로그램을 전혀 변경하지 않고 실행이 가능하다.
o 풍부한 클래스 라이브러리(Java API)를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공한다.
자바의 역사
o 자바의 역사는 1991년 썬의 엔지니어들에 의해서 고안된 오크(Oak)라는 언어에서 시작되었다. Oak는 처음에는 가전제품이나 PDA같은 소형기기에 사용될 목적 이였으나 여러 운영체제를 사용하는 컴퓨터의 인터넷 통신이 등장 후 운영체제에 독립적인 Oak가 적합하다고 판단하여 인터넷에 적합하도록 개발 방향을 바꾸고 이름을 자바(Java)로 변경하였다.
자바언어의 특징
1. 운영체제에 독립적이다.
기존에 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 운영체제에 적용하기가 어려웠으나 자바는 운영체제에 관계없이 실행이 가능하다. 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM(자바가상머신)하고만 통신을 하며 JVM은 자바 응용프로그램으로부터 전달받은 명령을 운영체제가 이해할 수 있도록 변환하여 전달한다. 따라서 자바 응용프로그램은 운영체제로부터 독립적이지만 JVM은 운영체제에 종속적이며 썬에서는 운영체제에 맞게 설치할 수 있는 JVM을 제공한다.
2. 객체지향 언어이다.
자바는 객체지향 언어의 특징인 상속, 캡슐화, 다형성이 잘 적용된 객체지향 언어로 평가받고 있다.
3. 비교적 배우기 쉽다.
자바의 연산자와 기본구문은 C++에서, 객체지향 관련 구문은 스몰톡(small talk)이라는 객체지향언어에서 가져왔다. 이 들 언어의 장점은 취하고 불필요한 부분은 제거하여 간결하고 이해하기 쉬운 코드를 작성할 수 있도록 했다.
4. 자동 메모리 관리(Garbage Collection)
자바 프로그램이 실행 시 garbage collector가 실행되어 메모리 할당, 회수를 자동으로 해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다. garbage collector없다면 메모리를 수동으로 할당, 회수를 해야 하기 때문에 보다 프로그래밍에 집중할 수 있도록 도와준다.
5. 네트워크와 분산처리를 지원한다.
네트워크 프로그래밍 라이브러리를 통해 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 도와준다.
6. 멀티쓰레드(multi-thread)를 지원한다.
일반적으로 multi-thread는 운영체제에 따라 구현 방법 및 처리 방법이 다르나 자바로 개발되는 multi-thread 프로그램은 시스템과 관계없이 구현이 가능하다. 관련된 라이브러리(Java API)가 제공되어 구현도 쉽다. 여러 쓰레드에 대한 스케줄링은 자바 인터프리터가 담당한다.
7. 동적 로딩(Dynamic Loading)을 지원한다.
자바로 작성된 어플리케이션은 보통 여러 개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기에 애플리케이션 실행 시 모든 클래스가 동작하지 않고 필요한 시점에 클래스만 로딩하여 사용한다. 일부 클래스가 변경되어도 어플리케이션 전체를 컴파일하지 않아도 된다.
JVM(Java Virtual Machine)
o JVM은 'java virtual machine'을 줄인 말로 직역하면 ‘자바를 실행하기 위한 가상의 기계’가 된다. 자바로 작성한 애플리케이션이 실행되기 위해서는 JVM이 필수이다.
o 일반 애플리케이션 코드는 OS만 거치고 하드웨어로 전달되는데 비해 자바로 작성된 애플리케이션 코드는 JVM을 거치고 OS, 하드웨어로 전달한다. 하드웨어에 맞게 컴파일된 상태가 아닌 실행 시 해석(interpret)되기 때문에 속도가 느리다는 단점이 있으나 JIT컴파일러와 향상된 최적화 기술이 속도의 격차를 많이 줄였다.
(JIT컴파일러 : 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 변환해주는 컴파일러)
o 이렇듯 자바 애플리케이션은 JVM하고만 소통을 하기에 운영체제에 관계없이 실행이 가능하나 JVM은 운영체제에 종속적이라 해당 OS에 맞는 JVM이 필요하다.
자바 개발도구(JDK) 설치하기
o 자바로 프로그래밍을 하기 위해서는 JDK(Java Development Kit)를 설치해야 하며 설치 시 JVM과 자바 클래스 라이브러리(Java API)외에 개발하는데 필요한 프로그램이 설치된다.
o JDK설치 완료 후 설치된 디렉토리의 bin디렉토리를 환경 변수(path)에 추가해줘야 한다. bin디렉토리는 자바로 개발하는데 필요한 실행파일이 들어있고 path는 OS가 파일의 위치를 파악하는데 사용하는 경로로 파일을 경로 없이 이름만으로도 사용할 수 있게 된다.
- javac.exe : 자바 컴파일러, 자바 소스 코드를 바이트 코드로 컴파일한다.
- java.exe : 자바 인터프리터, 컴파일러가 해석한 바이트코드를 해석하고 실행한다.
- javap.exe : 역어셈블러, 컴파일된 클래스 파일을 원래의 소스코드로 변환한다.
- javadoc.exe : 자동 문서 생성기, 소스파일에 있는 주석(/* */)을 이용하여 Java API문서와 같은 형식의 문서를 자동으로 저장한다.
- jar.exe : 압축 프로그램, 클래스 파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일(.jar)로 압축하거나 해제한다.
o JDK , JRE
JRE(Java Runtime Environment) : 자바 실행 환경, 자바로 작성된 응용프로그램이 실행되기 위한 최소환경이다. [JVM + 클래스 라이브러리(Java API)]
JDK(Java Development Kit) : 자바개발도구, [JRE + 개발에 필요한 실행파일(javac.exe 등)]
자바 코드 실행 절차
o 자바 코드가 실행 시 다음과 같은 절차를 통해 실행이 된다.
Hello.java파일 작성 -> javac.exe(컴파일) -> Hello.class 생성 -> java.exe(실행) -> “Hello World” 출력
o Java 애플리케이션은 main메소드 호출로 시작을 하기로 약속이 되어있기에 main메소드를 포함하는 클래스가 하나는 있어야 실행이 되며 main메소드가 없는 경우 실행이 불가능하다.
o 소스파일의 이름은 public class와 이름이 일치(대,소문자 포함)해야 하며 public class가 없다면 소스파일 내의 어떤 클래스 이름을 해도 상관없다.
o JAVA 애플리케이션 실행 시 내부 진행 순서는 다음과 같다.
1. 프로그램 실행에 필요한 클래스(.class)를 로드한다.
2. 클래스파일을 검사한다.(파일 형식, 악성코드 체크)
3. 지정된 클래스에서 main(String[] args)를 호출한다.
자주 발생하는 에러
1. cannot find symbol 또는 cannot resolve symbol - 지정된 변수나 메소드를 찾을 수 없다는 뜻으로 선언되지 않은 변수, 메소드를 사용하거나 잘못된 이름의 변수 또는 메소드를 사용할 때 발생한다.
2. ';' expected - 자바는 문장 끝에 세미콜론(;)을 붙여줘야 하는데 이 세미콜론이 없다는 뜻이다.
3. Exception in thread "main" java.lang.NoSuchMethodError: main - main메소드를 찾을 수 없다는 뜻으로 main메소드가 존재하지 않거나 오타가 있을 때 발생한다.
4. Exception in thread "main" java.lang.NoClassDefFoundError: Hello – Hello class를 찾을 수 없다는 뜻으로 클래스 철자 및 대소문자를 확인하며 이상이 없는 경우 클래스 파일이(.class) 생성되었는지 확인한다.
5. illegal start of expression – 괄호'(', '{'를 열고 닫지 않았거나 if, for 등 문법적 오류가 있는 경우에 발생한다.
6. class, interface, or enum expected – 보통 괄호 개수가 일치 하지 않은 경우에 발생한다.
'언어 > 자바의 정석' 카테고리의 다른 글
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(2) (0) | 2021.02.03 |
---|---|
[자바의 정석] Chapter 6 객체 지향 프로그래밍 요약(1) (0) | 2021.02.03 |
[자바의 정석] Chapter 5 배열(Array) 요약 (0) | 2021.01.27 |
[자바의 정석] Chapter 3 연산자(Operator) (0) | 2021.01.21 |
[자바의 정석] Chapter 2 변수 (0) | 2021.01.19 |