자바에 대하여… 자바의 대한 공부는 자바의 정석(남궁성) 책으로 진행하였다.
LV0-1 자바의 특징
- 운영체제에 독립적이다.
- 자바로 작성된 프로그램은 운영체제와 하드웨어와 관계없이 실행 가능하며 이것을 ‘한번 작성하면, 어디서나 작성된다 ‘ (write one, run anywhere)’ 으로 표현되기도 한다.
- 객체지향언어이다.
자바는 프로그래밍의 대세로 자리 잡은 객체지향 프로그래밍언어중의 하나로 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어라는 평가를 받고 있다. 객체지향 ( object-oriented)
- 비교적 배우기 쉽다.
자바의 연산자와 기본구문은 c++에서, 객체지향관련 구문은 스몰톡이라는 객체지향언어에서 가져왔다. 이 들 언어의 장점은 취하면서 복잡하고 불필요한 부분은 과감히 제거하여 단순화함으로서 쉽게 배울 수 있다.
- 자동 메모리 관리
자바로 작성된 프로그램이 실행되면, 가비지컬렉터가 자동적으로 메모리를 관리해줌으로써 프로그래머는 메모리를 따로 관리 할 필요가 없다. 자동으로 메모리를 관리한다는 것이 다소 비효율적인 면도 있지만, 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와준다.
- 네트워크와 분산처리를 지원한다.
다양한 네트워크 프로그래밍 라이브러리를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
- 멀티쓰레드를 지원한다.
멀티쓰레드: CPU의 최대 활용을 위해 프로그램의 둘 이상을 동시에 실행하는 기술이다 일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법도 상이하며, 처리방식도 다르다.
자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현가능하며, 관련된 라이브러리(java api)가 제공되므로 구현이 쉽다. 그리고 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.
- 동적로딩을 지원한다.
보통 자바로 작성된 앱은 여러개의 클래스로 구성되어있다. 자바는 동적 로딩을 지원하기 떄문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 그 외에도 일부 클래스가 변경되어도 전체 앱을 다시 컴파일 하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 앱을 작성할 수 있다.
LV0-2 JVM (Java Virtual Machine)
JVM은 ‘자바를 실행하기 위한 가상 기계’라고 할 수 있다. 영어권에서는 컴퓨터를 머신이라고도 부르기 때문에 머신이라는 용어 대신에 컴퓨터를 사용해서 자바를 실행하기 위한 가상 컴퓨터라고 이해하면 좋을것이다.
자바로 작성된 앱은 모두 이 가상 컴퓨터 jvm에서만 실행되기 떄문에, 자바 앱이 실행되기 위해서는 반드시 JVM이 필요하다.
일반적인 앱의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 JAVA앱은 JVM을 한번 더 거치기 때문에, 그리고 하드웨어 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석 되기 때문에 속도가 느리다는 단점이 있다. 그러나 요즘엔 바이트코드를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어 속도의 격차를 많이 줄였다.
일반 앱은 OS와 바로 맞붙어 있기 때문에 OS에 종속적이다. 따라서 다른 OS에서 실행시키기위해서는 앱을 그 OS에 맞게 변경해야한다. 반면 자바앱은 JVM과만 상호작용을 함으로 OS 와 하드웨어에 독립적이기때문에 다른 OS에서도 프로그램의 변경없이 실행이 가능핟. 하지만 JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.
LV0-3 자바개발환경 구축하기
자바로 프로그래밍을 하기위해서는 JDK를 설치하여야 한다. 이외의 부가적인 단계와 추가로 설정해야할 부분들은 https://cafe.naver.com/javachobostudy
자바의 정석 저자의 카페에서 상세히 알수 있다. 또는 저자가 만들어논 사이트에서 설명을 볼 수 있다.
jdk를 다 설치했다면 JAVA API 문서를 설치해야한다. 자바에서 제공하는 클래스 라이브러리를 잘 하기하기 위해서는 JAVA API문서가 필수적이다. 이 문서에는 클래스 라이브러리의 모든 클래스에 대한 설명이 자세하게 나와 있다. 자주 사용되는 것만을 공부한 다음 나머지는 영어사전처럼 필요할 때 찾아서 사용하면 된다.
JAVA API 문서는 ‘http://java.sun.com/’에서 다운 받을 수 있다.
다음 단계로는 자바로 프로그램을 작성하기이다.
자바로 프로그램을 개발하려면 JDK이외에도 편집기가 필요하다. 처음 자바를 배우는 사람들에게는 이클립스나 인텔리제이와 같이 다양하고 편리한 기능을 겸비한 고급 개발도구를 사용하는것이 좋다.
‘Hello, world.’를 출력하는데에 성공하였다면 자바로 프로그래밍 할 준비가 된것이다.
자바에서 모든 코드는 반드시 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성하게 된다. 그리고 이러한 클래스들이 모여 하나의 JAVA 앱을 이루게 된다.
클래스를 작성하는 방법은 간단하다. 키워드 ‘class’ 다음에 클래스의 이름을 작고, 클래스의 시작과 끝을 의미하는 괄호{} 안에 원하는 코드를 넣으면 된다.
‘public static void main(String[] args)’는 main메서드의 선언부인데, 프로그램을 실행할 때 ‘java.exe’에 의해 호출될 수 있도록 항상 똑같이 적어주어야 한다.
모든 클래스가 main메서드를 가지고 있어야 하는것은 아니지만, 하나의 java 앱에는 main메서드를 포함한 클래스가 반드시 하나는 있어야한다. Main메서드는 자바 앱의 시작점이므로 main메서드 없이는 java앱은 실행될수 없기 떄문이다.
하나의 소스파일에 하나의 클래스만을 정의하는것이 보통이지만, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능하다. 이 때 주의할 점은 소스파일의 이름은 public class의 이름과 일치해야한다는 것이다. 만일 소스파일 내에 public class가 없다면 소스파일의 이름은 소스파일 내의 어떤 클래스의 이름으로 해도 상관없다.
LV0-3 자주 발생하는 에러와 해결방법
1.cannot find symbol 또는 cannot resolve symbol
지정된 변수나 메서드를 찾을 수 없다는 뜻으로 선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다. 자바에서는 대소문자 구분을 하기 때문에 꼼꼼하게 확인해야한다.
2.’;’ expected
세미콜론 ‘;’ 이 필요한 곳에 없다는 뜻이다. 자바의 모든 문장의 끝에는 세미콜론을 붙여주어야 한다.
3.Exceptiion in thread ‘main’ java,lang.NOSUCHMETHODERROR:main
‘main 메서드를 찾을수 없다’는 뜨인데 실제로 클래스 내에 main 메서드가 존재하지 않거나 메서드의 선언부 ‘public static void main(String[] args)’에 오타가 존재하는 경우에 발생한다.
4.Exception in thread “main” java.lang.NoClassDefFoundError:Hello
‘Hello’ 라는 클래스를 찾을수 없다는 뜻이다. hello.java가 정상적으로 컴파일 되었다면 클래스파일 hello.class가 있어야한다. 클래스 파일이 있음에도 같은 오류가 뜬다면 클래스패스의 설정이 바르게 되었는지 확인해보자.
5.illegal start of expression
직역하면 문장의 앞부분이 문법에 맞지 않는다는 의미인데, 간단히 문장에 문법적 오류가 있다는 뜻이다. 괄호, 수식,if문for문에 문법 적 오류가 있을 때 또는 public 이나 static 과 같은 키워드를 잘 못 사용한 경우에도 발생한다.
6.class, interface, or enum expected
이 메시지의 의미는 ‘키워드 calss 나 interface 또는 enum이 없다 이지만 보통 괄호의 개수가 일치 하지 않는 경우에 발생한다. 열린 괄호와 닫힌괄호의 개수가 같은지 확인하자.
마지막으로 에러가 생겼을 때 아래의 순서대로 처리해보면 도움이 될 것이다.
(1) 에러 메시지를 잘 읽고 해당 부분의 코드를 살펴본다. 이상이 없으면 해당 코드의 주위도 함꼐 살펴본다.
(2) 그래도 이상이 없으면 에러 메시지는 잊어버리고 기본적인 부분을 재확인한다.
대부분의 에러는 사소한 것인 경우가 많다.
(3) 의심이 가는 부분을 주석처리하거나 따로 떼어내서 테스트한다.
LV0-4 주석
작성하는 프로그램의 크기가 커질수록 프로그램을 이해하고 변경하는 일이 어려워진다. 이러한 어려움을 덜기 위해 사용하는 것이 바로 주석이다. 주석을 이용해 코드에 대한 설명을 덧붙여 놓으면 이해하는데 많은 도움을 준다.
그 외에도 주석은 프로그램의 작성자, 일시, 버전과 그에 따른 변경이력 등의 정보를 제공할 목적으로 사용된다
주석을 작성하는 방법은 두가지 방법이 있다. ‘/’ //’ 사이에 주석은 넣는 방법(범위 주석)과 앞에 ‘//’를 붙이는 방법 (한줄 주석)이 있다.
한가지 주의 할 점은 큰 따옴표 안에 주석이 있을 떄는 주석이 아닌 문자열로 인식되는 점을 유의바란다.