
Chapter01. 자바를 시작하기 전에 (getting started with java)
1. Java
1.1 자바란?
: Oracle사에서 운영하는 객체지향 프로그래밍 언어이다. 자바의 가장 중요한 특징은 운영체제(OS, 플랫폼)에 독립적이라는 것이다. 운영체제 종류에 관계없이 프로그램을 변경하지 않고도 실행이 가능하다. 객체지향개념과 기존의 다른 언어, 특히 C++의 장점을 채택하면서 잘 사용되지 않는 부분은 과감히 제외시킴으로써 배우기 쉽고 이해하기 쉬운 간결한 표현이 가능하도록 했다.
풍부한 클래스 라이브러리(Java API)를 활용하여 강력한 기능의 자바 프로그램을 작성할 수 있다. 또한 모바일(J2ME)이나 대규모 기업환경(J2EE), XML 등 다양한 최신 기술을 지원하고 있다.
1.2 자바의 역사
: 자바는 Oak라는 언어에서부터 시작되었다. 처음에는 가전제품에 탑재될 소프트웨어를 만들기 위해 고안된 언어였으나, 인터넷이 등장하면서 운영체제에 독립적인 Oak가 이에 적합하다고 판단하여 이름을 Java로 바꾸고 인터넷에 최적화시키는 방향으로 개발되었다. 정적 웹페이지에서 멀티미디어적 요소를 제공할 수 있는 애플릿(Applet)은 보안상의 이유로 최신 웹브라우저에서는 더 이상 지원하지 않지만, 최근에는 서버 쪽 프로그래밍을 위한 서블릿(Servlet)과 JSP(Java Server Pages)가 많이 사용되고 있다. 그리고 구글의 스마트폰 운영체제인 안드로이드에서도 Java를 사용한다. 앞으로는 Java의 원래 목표였던 소규모 가전제품과 대규모 기업환경을 위한 소프트웨어 개발 분야에 활발히 사용될 것으로 기대된다.
1.3 자바언어의 특징
1. 운영체제에 독립적이다 : 자바가상머신(JVM)이 자바 응용프로그램(code)으로부터 전달받은 명령을 운영체제가 이해할 수 있도록 변환하여 전달한다. 즉, 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM이 제공되고 있다. "Write once, run anywhere"
2. 객체 지향언어이다 : 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다.
3. 비교적 배우기 쉽다 : 자바의 연산자와 기본 구문은 C++에서, 객체지향 관련 구문은 스몰 톡(small talk)이라는 객체지향 언어에서 가져왔다. 이들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감하게 제거하여 단순화하였다.
4. 자동 메모리 관리(Garbage Collection) : 자바 프로그램이 실행되면 가비지컬렉터(garbage collector)가 자동적으로 메모리를 관리해주기 때문에 프로그래머가 사용하지 않는 메모리를 체크하고 반환하는 일을 하지 않아도 된다.
5. 네트워크와 분산처리를 지원한다 : 인터넷과 대규모 분산환경을 염두에 둔 까닭인지 다양한 네트워크 프로그래밍 라이브러리를 지원한다.
6. 멀티쓰레드를 지원한다 : 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다.
7. 동적 로딩(Dynamic loading)을 지원한다 : 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 그 외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성할 수 있다.
1.4 JVM(Java Virtual Machine)
: 자바를 실행하기 위한 가상 컴퓨터. 소프트웨어로 구현된 하드웨어.
자바 프로그램은 컴파일시 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)이 필요하기 때문에 속도가 느리다는 단점을 가지고 있었다. 그러나 요즘엔 바이트코드(컴파일된 자바 코드)를 하드웨어의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다.

*JIT 컴파일러: 런타임 때 인터프리터 방식으로 기계어를 생성하면서 캐싱해둔다.
2. 자바로 프로그램 작성하기
2.1 Hello.java
: 자바 애플리케이션은 실행의 시작점인 main메서드를 포함한 클래스가 반드시 하나는 있어야 한다.
public class는 하나의 소스 파일 내에 한 개만 존재할 수 있으며, 이 때 클래스의 이름이 파일명이 된다. public class가 없다면 어떤 클래스 이름으로 파일명을 지정해도 상관없다.
2.2 자주 발생하는 에러와 해결방법
1. cannot find symbol 또는 can resolve symbol
: '지정된 변수나 메서드를 찾을 수 없다.'는 뜻으로 선언되지 않는 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다.
2. Exception in thread "main" java.lang.NoSuchMethodError: main
: 'main메서드를 찾을 수 없다.'는 뜻으로 실제로 클래스 내에 main 메서드가 존재하지 않거나 메서드의 선언부에 오타가 존재하는 경우에 발생한다.
3. Exception in thread "main" java.lang.NoClassDefFoundError: Hello
: 'Hello라는 클래스를 찾을 수 없다.'는 뜻으로 오타의 문제이거나 클래스 파일(*. class)이 생성되지 않은 것이다. 클래스 파일이 있는데도 동일한 메시지가 반복된다면 클래스 패스(classpath) 설정을 확인해야 한다.
4. illigal start of expression
: 문장에 문법적 오류가 있다는 뜻이다.
5. class, interface, or enum expected
: 보통 괄호의 개수가 일치하지 않는 경우에 발생한다. 열린 괄호와 닫힌 괄호의 수가 같은지 확인하자.
2.3 자바 프로그램의 실행 과정
1. 프로그램의 실행에 필요한 클래스(*. class)를 로드한다.
2. 클래스 파일을 검사한다. (파일 형식, 악성코드 체크)
3. 지정된 클래스에서 main메서드를 호출한다.
4. main메서드의 마지막 코드까지 모두 실행되면 프로그램이 종료되고 사용했던 자원들이 반환된다.
'Advance I > Java' 카테고리의 다른 글
| [Servlet/JSP] (0) | 2023.02.01 |
|---|---|
| 22.02.10 (0) | 2022.02.10 |