Seren dev's blog
이 글은 남궁성 님의 "자바의 정석: 기초편" 책을 읽고 정리한 내용입니다.

자바란?

자바는 객체지향 프로그래밍 언어다.
자바의 가장 중요한 특징은 운영체제(OS, 플랫폼)에 독립적이라는 것이다. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에, 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능하다.
이러한 장점으로 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다.
자바는 풍부한 클래스 라이브러리(Java API)를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공하기 때문에 단순히 이 클래스 라이브러리만을 잘 활용해도 강력한 기능의 자바 프로그램을 작성할 수 있다.
지금도 자바는 꾸준히 새로운 버전을 발표하고 있으며, 모바일(J2ME)이나 대규모 기업환경(J2EE), XML 등의 다양한 최신 기술을 지원한다.

자바의 특징

1. 운영체제에 독립적이다.
일종의 에뮬레이터인 자바가상머신(JVM)이 있기 때문에 가능하다.
자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고, JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
자바 응용프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 여러 버전의 JVM이 있다.

2. 객체지향언어다.
상속, 캡슐화, 다형성 등 객체지향개념의 특징이 적용되어 있다.

3. 비교적 배우기 쉽다.
자바의 연산자와 기본구문은 C++에서, 객체지향관련 구문은 스몰톡(small talk)이라는 객체지향언어에서 가져왔다. 이들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단순화함으로 쉽게 배울 수 있다.

4. 자동 메모리 관리(Garbage Collection)
자바 프로그램이 실행되면, 가비지 컬렉터(Garbage Collector)가 자동적으로 메모리를 관리해주기 때문에, 프로그래머는 사용하지 않는 메모리를 체크하고 반환하는 일을 수동적으로 처리할 필요가 없다.

5. 네트워크와 분산처리를 지원한다.
다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 네트워크 관련 프로그램을 개발할 수 있다.

6. 멀티쓰레드를 지원한다.
일반적으로 멀티쓰레드는 운영체제에 따라 구현방법과 처리 방식도 다르지만, 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현가능하며, 관련 라이브러리(Java API)가 제공된다. 그리고 여러 쓰레드에 대한 스케줄링(scheduling)을 자바 인터프리터가 담당한다.

7. 동적 로딩(Dynamic Loading)을 지원한다.
실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용한다. 그리고 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 된다.

자바 가상 머신

JVM(Java virtual machine)은 '자바를 실행하기 위한 가상 컴퓨터'이다.

가상 기계: 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어
가상 컴퓨터: 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터

자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.

일반 애플리케이션 -> OS -> 컴퓨터(하드웨어)
자바 애플리케이션 -> JVM -> OS -> 컴퓨터(하드웨어)
그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점을 가지고 있다. 하지만 요즘엔 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 최적화 기술이 적용되어서 속도의 격차를 많이 줄었다.

자바 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다. 하지만 JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.

자바 API 문서

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

1. cannot find symbol 또는 cannot resolve symbol
지정된 변수나 메서드를 찾을 수 없다는 뜻으로 선언되지 않은 변수나 메서드를 사용하거나 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다.

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

3. illegal start of expression
문장에 문법적 오류가 있다는 뜻이다. 괄호를 열고서 닫지 않거나, 수식이나, if문, for문 등에 문법적 오류가 있거나 public이나 static과 같은 키워드를 잘못 사용한 경우에도 발생한다.

4. class, interface, or enum expected
키워드 class, interface, 또는 enum이 없다는 뜻이다.
보통 괄호 '{' 또는 '}'의 개수가 일치하지 않는 경우에 발생한다.

에러 해결방법

1. 에러 메시지를 잘 읽고 해당 부분의 코드를 살펴본다. 이상이 없으면 해당 코드의 주위(윗줄과 아래줄)도 함께 살펴본다.
2. 그래도 이상이 없으면 에러 메시지는 잊어 버리고 기본적인 부분을 재확인한다. 대부분의 에러는 사소한 것인 경우가 많다.
3. 의심이 가는 부분을 주석처리하거나 따로 떼어낸다.

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!