📖/자바의 정석(~ing)

[자바의 정석] Chapter01 자바를 시작하기 전에

모팔구 2023. 3. 24. 14:34
728x90
반응형

1. 자바(Java Programming Language)

1.1 자바란?

<생략>

 

1.2 자바의 역사

<생략>

 

1.3 자바언어의 특징

  1. 운영체제에 독립적이다.
  2. 객체지향언어이다.
  3. 비교적 배우기 쉽다.
  4. 자동 메모리 관리(Garbage Collection)
  5. 네트워크와 분산처리를 지원한다.
  6. 멀티쓰레드를 지원한다.
  7. 동적 로딩(Dynamic Loading)을 지원한다

 

1.4 JVM(Java Virtual Machine)

  • JVM(Java Virtual Machine): 자바를 실행하기 위한 가상 컴퓨터(영어권에서는 컴퓨터를 machine이라고도 함)
    • 가상 컴퓨터(virtual machine, virtual computer): 실제 컴퓨터가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 된다
  • 자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다
    • 일반 애플리케이션 vs. 자바 애플리케이션
      • 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달됨
        자바 애플리케이션은 JVM을 거쳐 하드웨어로 전달되고, 실행 시에 해석(interpret)되기 때문에 속도가 느림
      • 일반 애플리케이션은 OS와 바로 맞붙어 있기 때문에 OS종속적
        자바 애플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경 없이 실행이 가능하다. 단, JVM은 OS에 종속적이므로 해당 OS에서 실행 가능한 JVM이 필요하다

 

2. 자바개발환경 구축하기

2.1 자바 개발도구(JDK)설치하기

  • JDK(Java Development Kit): 자바가상머신(JVM)과 자바클래스 라이브러리(Java API) 외에도 자바를 개발하는데 필요한 프로그램들이 설치된다.
  • JDK의 bin디렉토리에 있는 주요 실행파일들은 다음과 같다.
    • javac.exe: 자바 컴파일러. 자바소스코드를 바이트코드로 컴파일한다.
      바이트코드: JVM이 이해할 수 있는 기계어. JVM은 바이트코드를 해당 OS의 기계어로 변환하여 OS로 전달함
    • java.exe: 자바 인터프리터. 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
    • javap.exe: 역어셈블러. 컴파일된 클래스파일을 원래의 소스로 변환한다.
    • javadoc.exe: 자동문서생성기. 소스파일에 있는 주석(/** */)을 이용하여 Java API문서와 같은 형식의 문서를 자동으로 생성한다.
    • jar.exe: 압축프로그램. 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일(.jar)로 압축하거나 압축해제한다.
      ※ JDK: 자바 개발도구. JRE+개발에 필요한 실행파일(javac.exe 등)
      JRE: 자바실행환경. 자바로 작성된 응용프로그램이 실행되기 위한 최소 환경. JVM+클래스라이브러리(Java API)

 

2.2 Java API 문서 설치하기

<생략>

 

3. 자바로 프로그램작성하기

3.1 Hello.java

  • 자바에서 모든 코드는 반드시 클래스 안에 존재해야 하며, 서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성하게 된다. 그리고 이 클래스들이 모여 하나의 Java 애플리케이션을 이룬다
  • 클래스를 작성하는 방법  ※ package문과 import문은 클래스 밖에 작성한다 
class 클래스 이름 {
	/* 
		주석을 제외한 모든 코드는 클래스의 블럭{} 내에 작성해야 한다.
	*/
}
  • 아래 코드의 'public static void main(String[] args)'는 main메서드의 선언부인데, 프로그램을 실행할 때 'java.exe'에 의해 호출될 수 있도록 미리 약속된 부분이므로 항상 똑같이 적어준다.
class 클래스 이름 {
	public static void main(String[] args) { // main메서드의 선언부
		// 실행될 문장들을 적는다.
	}
}
  • 자바 애플리케이션은 main메서드의 호출로 시작해서 main메서드의 첫 문장부터 마지막 문장까지 수행을 마치면 종료된다. 모든 클래스가 main메서드를 가지고 있어야 하는 것은 아니지만, 하나의 java 애플리케이션에는 main메서드를 포함한 클래스가 반드시 하나는 있어야 한다. 자바 애플리케이션의 시작점이므로 main메서드 없이는 자바 애플리케이션은 실행될 수 없기 때문이다.
  • 하나의 소스파일에 하나의 클래스만을 정의하는 것이 보통이지만, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능하다. 이 때 소스파일의 이름은 public 클래스의 이름과 일치해야 한다. 만약 소스파일 내에 public class가 없다면 소스파일의 이름은 파일 내 어떤 클래스의 이름으로 해도 상관없다.

 

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

  • 자주 발생하는 에러 
    1. cannot find symbol / cannot resolve symbol: 지정된 변수나 메서드를 찾을 수 없음. 선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생
    2. ';' expected: 세미콜론';'이 필요한 곳에 없다는 뜻이다. 
    3. Exception 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'의 철자, 특히 대소문자를 확인해보고 이상이 없으면 클래스파일(*.class)이 생성되었는지 확인한다. 
    5. illegal start of expression: 직역하면 문장(또는 수식, expression)의 앞부분이 문법에 맞지 않는다는 의미인데, 간단히 말해 문장에 문법적 오류가 있다는 의미이다. 괄호를 열고서 닫지 않거나, 수식이나 if문, for문 등에 문법적 오류가 있을 대 또는 public이나 static과 같은 키워드를 잘못 사용한 경우에 발생한다 
    6. class, interface, or enum expected: 키워드 class나 interface 또는 enum이 없다는 뜻이지만 보통 괄호의 개수가 일치하지 않는 경우 발생한다 
  • 해결방법 
    1. 에러메시지를 잘 읽고 해당 부분의 코드를 살펴본다. 이상이 없으면 해당 코드의 주위(윗줄과 아랫줄)도 함께 살펴본다. 
    2. 그래도 이상이 없으면 에러 메시지는 잊어버리고 기본적인 부분을 재확인한다. 대부분의 에런느 사소한 것인 경우가 많다 
    3. 의심이 가는 부분을 주석처리하거나 따로 떼어내서 테스트한다.

 

3.3 자바프로그램의 실행과정

  • 자바 애플리케이션을 실행시켰을 때 내부적인 진행순서는 다음과 같다.
    1. 프로그램의 실행에 필요한 클래스(*.class파일)를 로드한다
    2. 클래스파일을 검사한다.(파일형식, 악성코드 체크)
    3. 지정된 클래스(Hello)에서 main(String[] args)를 호출한다.
  •  
  • main메서드의 첫 줄부터 코드가 실행되기 시작하여 마지막 코드까지 모두 실행되면 프로그램이 종료되고, 프로그램에서 사용했던 자원들은 모두 반환된다.

 

3.4 주석(Comment)

  • 주석을 이용해서 프로그램 코드에 대한 설명을 적절히 덧부여 놓으면 프로그램을 이해하는 데 도움이 된다.
    그 외에도, 프로그램의 작성자, 작성일시, 버전과 그에 따른 변경이력 등의 정보를 제공할 목적으로 사용된다
  • 주석 사용 방법
  • 범위 주석: '/*'와 '*/' 사이의 내용은 주석으로 간주된다.
    한 줄 주석: '//'부터 라인 끝까지의 내용은 주석으로 간주된다.

 

3.5 이 책으로 공부하는 방법

<생략>

 

 

728x90
반응형