1. 자바(Java Programming Language)
- 자바란?
객체지향 프로그래밍 언어이다. 자바의 가장 중요한 특징은 운영체제(OS)에 독립적이라는 것이다. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에, 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능하다.
- 역사
…
- 특징
- 운영체제에 독립적이다. 이것은 자바가상머신인 JVM을 통해서 가능하다. 자바 Application은 운영체제나 하드웨어가 아닌, JVM하고만 통신하고 JVM으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. 자바는 독립적이나, JVM은 운영체제에 종속적이여서 운영체제마다 서로 다른 JVM이 제공된다.
- 객체지향언어다. 상속, 캡슐화, 다형성이 잘 적용된 순수 객체지향언어다.
- 러닝커브가 낮다.
- 자동 메모리 관리(Garbage Collection), 가비지 컬렉터가 자동적으로 메모리 관리를 해주기 때문에 따로 관리할 필요가 없다.
- 네트워크와 분산처리를 지원한다.
- 멀티쓰레드(Multi-Thread)를 지원한다. 시스템과는 상관없이 구현가능하며, 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당한다.
- 동적 로딩(Dynamic Loading)을 지원한다. 동적 로딩을 지원하기 때문에, 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 일부 클래스가 변경된다고 해서 전체 Application을 다시 컴파일하지 않아도 되며, 비교적 적은 리소스로 작업을 처리할 수 있다.
- JVM(Java Virtual Machine)
자바로 작성된 Application은 모두 JVM에서만 실행된다. 일반 Application의 코드는 OS만 거치고 하드웨어로 전달되는데, Java는 JVM을 한 번 더 거치기 때문에 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 떄문에 속도가 느리다는 단점이 있다. 그러나 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바꿔주는 JIT컴파일러와 최적화 기술의 등장으로 많이 줄였다.
일반 Application이 OS와 맞닿아 있어 종속적인 것에 비해, Java는 OS에 독립적이다.
2. 자바개발환경 구축하기
- JDK 설치하기
- javac.exe : 자바 컴파일러, 자바소스코드를 바이트코드로 컴파일 한다.
- java.exe : 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
- javap.exe : 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환한다.
- javadoc.exe : 자동문서생성기, 소스파일의 주석을 이용하여 java API문서와 같은 형식의 문서를 자동 생성한다.
- jar.exe : 압축 프로그램
Java 공식 홈페이지에서 설치하면 된다. JDK 1.5부터 JDK 5.0이라고 부르기로 했다. 설치가 되면 bin 디렉토리에 path를 추가해야 하고, 다음과 같은 주요 실행파일이 있다.
- Java API 문서 설치하기
에서 다운받을 수 있다.
3. 자바로 프로그램작성하기
- Hello.Java
public class Main { public static void main(String[] args) { System.out.print("Hello and welcome!"); } }
이 예제를 실행하려면, 자바컴파일러(javac.exe)를 사용해서 소스파일(Hello.java)로부터 클래스파일(Class.java)을 생성해야 한다. 그 다음 자바 인터프리터(java.exe)로 실행한다.
자바에서 모든 코드는 반드시 클래스 안에 존재해야 한다. 클래스 안의 main메서드 선언부는 java.exe로 실행될 수 있도록 미리 약속된 부분이라 항상 저렇게 만들어 줘야 한다.
하나의 자바 Application에는 main 메서드를 포함한 클래스가 반드시 하나는 있어야 한다. main 메서드 없이 자바는 실행될 수 없다.
하나의 소스 파일에 하나의 클래스만을 정의하는 것이 보통이지만, 둘 이상의 클래스 정의도 가능하다. 중요한 것은, “소스파일의 이름은 public class”와 일치해야 한다는 것이다.
하나의 소스 파일에 둘 이상의 public class가 존재하면 안된다. 둘 중의 하나는 public을 붙일 수 없다. 자바는 대소문자를 구분하여 파일을 작성할 때도 대소문자를 구분해야 한다.
public class Hello2 {} , public class Hello3 {} => Hello.java2 O / hello.java2 X
- 자주 발생하는 에러와 해결방법
- cannot find symbol 또는 cannot resolve symbol
- ‘;’, expected
- Exception in thread “main” java.lang.NoClassDefFoundError: main
- Exception in thread “main” java.lang.NoClassDefFoundError: Hello
- illegal start of expression
- class, interface, or enum expected
저장된 변수나 메서드를 찾을 수 없다. 선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다. 자바에서는 대소문자 구분을 하기 때문에 대소문자 일치여부도 꼼꼼하게 살펴봐야 한다.
세미콜론이 필요한 곳에 없다는 뜻이다. 자바의 모든 문자 끝에는 ;을 붙여줘야 한다. 인텔리 제이에서 command + shift + enter를 치면 세미콜론과 함께 저장된다.
‘main메서드를 찾을 수 없다’는 뜻인데, 실제 클래스 내부에 main 메서드가 존재하지 않거나 메서드 선언부 ‘public static viod main(String[] args)’에 오타가 존재하는 경우에 발생한다.
‘Hello라는 클래스를 찾을 수 없다’는 뜻이다. 클래스파일이 있는지 확인하거나 클래스 파일의 대소문자 구분을 확인해 보는 것이 좋다.
예를 들어, Hello.java 클래스가 정상 컴파일 됐다면, 클래스 파일 Hello.class가 있어야 한다. 클래스 파일이 모두 정상인데도 같은 에러가 발생하면, 클래스를 참조하는 classpath 설정을 확인해 봐야 한다.
문장에 문법적 오류인 syntax error가 발생했다는 뜻이다. 괄호를 올바르게 닫지 않거나, if문이나 for 문 등 문법 오류가 발생했을 때 public이나 static과 같은 키워드를 잘못 사용한 경우도 발생한다.
메세지의 의미는 ‘키워드는 class나 interface 또는 enum이 없다’는 뜻으로, 보통 {} 괄호의 개수가 일치하지 않는 경우 발생한다.
- 자바프로그램 실행과정
- 프로그램 실행에 필요한 클래스(*.class)를 로드한다.
- 클래스파일을 검사한다.(파일형식, 악성코드 체크)
- 지정된 클래스(Hello)에서 main(String[] args)을 호출한다.
- Exception in thread “main” java.lang.NoClassDefFoundError: main
main 메서드가 들어있는 자바 클래스 Hello.java를 실행 시켰을 때
위와 같은 흐름으로 자바프로그램은 실행된다. 지정된 클래스에 main 메서드가 없다면
에러가 발생할 것이다.
- 주석(comment)
js와 같다.
/** */
나 //
로 동작한다.- 책 공부방법
- 2 ~ 5장, 익숙해질 때 까지 반복
- 6장, 이해할 때 까지 반복 이해가 안된다면 7장을 이해할 수 없다.
- 7장, 동영상 강좌와 함께 볼 것 추천
- 9장까지가 기본 내용이기 때문에 9장 까지 봤다면 다시 2장부터 보는 것을 추천
- 10 ~ 16장, 자바 응용부분
Share article