Java - (Chapter-1)

hoegon kim·2023년 1월 6일
0

JAVA

목록 보기
21/26
post-thumbnail

1. 자바(Java Programming Language)

1.1 자바란?

  1. 객체지향 프로그래밍 언어다
  2. 운영체제에 독립적이다.
  3. 클래스로 이루어져 있다.

1.2 자바의 역사

서블릿(Servlet)과 JSP(Jav Sever Pages)가 더 많이 사용되고 있다.

1.3 자바언어의 특징

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

1.4 JVM(Java Virtual Machine)

JVM : 자바를 실행하기 위한 가상 기계

일반적인 애플리케이션의 코드는
일반 애플리케이션 -> OS -> 컴퓨터 -> OS -> 애플리케이션

자바 애플리케이션의 코드는
Java 애플리케이션 -> JVM -> OS -> 컴퓨터 -> OS -> JVM -> Java 애플리케이션

OS 에 따른 JVM 송출 방식

그렇기 때문에 이렇게 서로다른 OS에서 실행할수 있음으로써

Write once, run anywhere. (한 번 작성하면 어디서든 실행된다.)

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

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

  1. JDK(Java Development Kit) 설치
  • JVM(Java Virtual Machine) : 가상서버머신
  • Java API : 자바를 개발하는데 필요한 프로그램들

※ JDK 를 설치하면 JVM,Java API가 설치된다.

  1. JDK가 설치된 이 후 bin 디렉토리에 path를 추가 해줘야 한다.
  • path는 OS가 파일의 위치(디렉토리)를 파악하는데 사용하는 경로(path)로,
  • path에 디렉토리를 등록하면, 해당 디렉토리에 포함된 파일을 파일 경로없이 파일 이름만으로도 사용할 수 있게 된다.
  1. JDK 의 path를 설정한 이 후 JDK의 bin디렉토리에 있는 주요 실행 파일들은 다음과 같다.
  • javac.exe 자바 컴파일러, 자바소스코드를 바이트코드로 컴파일한다.
  • java.exe 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하도 실행한다.
  • javap.exe 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환한다.

위와 같이 하면 Hello.class 파일이 역컴파일 되어 Hello.java에 저장된다. 그러나 원래의 소스 전체가 아닌 선언부만 저장될 뿐이다. '-c'옵션을 이용하면, 바이트코드로 컴파일된 내용도 볼 수 있다.

※ 바이트코드 - JVM이 이해할 수 있는 기계어, JVM은 바이트코드를 해당 OS의 기계어로 변환하여 OS로 전달함

  • javadoc.exe 자동문서생성기, 소스파일에 있는 주석(/** */)을 이용하여 java API문서와 같은 형식의 문서를 자동으로 생성한다.

    • C:\jdk1.8\work>javadoc Hello.java
  • jar.exe 압축프로그램, 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일(.jar)로 압축하거나 압축해제한다.

    압축 할때 : C:\jdk1.8\work>jar cvf Hello.jar Hello1.class Hello2.class
    압축 풀때 : C:\jdk1.8\work>jar xvf Hello.jar

※ 참고 : JDK 와 JRE

  • JDK - 자바개발도구(Java Development kit)
  • JRE - 자바실행환경(Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
  • JDK = JRE + 개발에 필요한 실행파일(javac.exe 등)
  • JRE = JVM + 클래스라이브러리(Java API)

2.2 Java API 문서 설치하기

Java 에서 제공하는 문서를 잘 사용하기 위해서는 클래스 라이브러리인(Java API)를 문서가 필수적이다.

3. 자바로 프로그래밍 작성하기

3.1 Hello.java

자바로 프로그래밍을 개발하기 위해서는 JDK이외에도 편집기가 필요하다.

편집기 종류

  • eclipse : 이클립스
  • intelli.J : 인텔리제이

다양하고 편리한 기능을 겸비한 고급 개발도구를 사용하는 것이 좋다.

※ 참고 editplus 는 http://www.editplus.com에 가면 평가판을 무료로 제공한다.

예제 1-1 /ch1/Hello.java


class Hello {
	public static void main(String[] args){
    	System.out.printIn("Hello, world."); // 화면에 글자를 출력한다.
    }

}

이 예제는 화면에 'Hello, world'를 출력하는 아주 간단한 프로그램이다. 이 예제를 통해서 화면에 글자를 출력하려면 어떻게 해야하는지 쉽게 알 수 있을것이다.

예제 1-1을 편집기나 editplus를 이용해서 작성한 다음 Hello.java로 저장하자. 이 때 클래스의 이름 'Hello'가 대소문자까지 정확히 같아야한다.

이 예제를 실행하려면, 먼저 자바컴파일러(javac.exe)를 사용해서 소스파일(Hello.java)로 부터 클래스파일(Hello.class)을 생성해야한다.

그 다음에 자바 인터프리터(java.exe)로 실행한다.

3-1-1 자바 클래스 작성시 주의사항

자바에서 모든 코드는 반드시 클래스 안에 존재해야한다.

서로 관련된 코드들을 그룹으로 나누어 별도의 클래스를 구성하게된다.

그리고 이 클래스들이 모여 하나의 Java 애플리케이션을 이룬다.


3-1-2 클래스를 작성하는 방법

class 클래스 이름 {
	/*
	주석을 제외한 모든 코드는 클래스의 블럭{} 내에 작성해야 한다.
    */
}

※ 나중에 배우게 될 package문과 import문은 예외적으로 클래스의 밖에 작성한다.

3-1-3 메소드 선언

class 클래스이름{
	public static void main(String[] args)	// main 메소드의 선언부
    {
    	// 실행돌 문장들을 적는다.     
    }
}

  • [] : 은 배열을 의미
  • String[] args : String 타입의 배열 args를 선언한 것이며, 동일하게, String args[] 와 같이 쓸 수도 있다.
  1. Java 애플리케이션은 main 메서드의 호출로 시작해서 main메서드의 첫 문장부터 마지막 문장까지 수행을 마치면 종료된다.

  2. 모든 클래스가 main 메서드를 가지고 있어야 하는 건 아니다.
    하지만 Java 애플리케이션에는 main메소드를 포함한 클래스가 반드시 하나는 있어야 한다.

  3. main 메서드는 java 애플리케이션의 시작점 이므로 main 메서드 없이는 Java 애플리케이션은 실행될 수 없기 때문이다.

  4. Java 애플리케이션을 실행 할 때는 java.exe 다음에 main메서드를 포함한 클래스의 이름을 적어줘야 한다.

< 규칙 >
1. 하나의 소스파일에 하나의 클래스만을 정의하는 것이 보통
2. 소스파일의 이름은 public class의 이름과 일치해야 한다.
3. 소스파일 내에 public class가 없다면, 소스파일의 이름은 소스파일 내의 어떤 클래스의 이름으로 해도 상관없다.

이름 설정 시 주의해야 할점

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

1. cannot find symbol 또는 cannot reslove symbol

지정된 변수나 메서드를 찾을 수 없다는 뜻으로 선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생한다. 자바에서는 대소문자 구분을 하기 때문에 철자 뿐 만아니라 대소문자의 일치여부도 꼼꼼하게 확인해야 한다.

2. ';' expected

세미콜론 ';'이 필요한 곳에 없다는 뜻이다. 자바의 모든 문장의 끝에는 ';'을 붙여주어야 하는데 가끔 이를 잊고 실수하기 쉽다.

3. Exception in thread "main" java.lang.NosuchMethodError: main

'main'메서드를 찾을 수 없다. 는 뜻인데 실제로 클래스 내에 main 메서드가 존재하지 않거나 메서드의 선언부 public static void main(Stringp[] args)에 오타가 존재하는 경우에 발생한다.

이 에러의 해결방법은 main 메서드가 클래스에 정의되어있는지 확인하고, 정의되어 있다면 main 메서드의 선언부에 오타가 없는지 확인한다.

자바는 구별하므로 대 소문자의 일치여부까지 정확히 확인해야한다.

※ args는 매개변수의 이름이므로 args나 argv나 arg와 같이 다른 이름을 사용할 수 있다.

4. Exception in thread "main" java.lang.NoclassDefFoundError: Hello

"Hello"라는 클래스를 찾을 수 없다는 뜻이다. 클래스 Hello 철자, 특히 대 소문자를 확인해보고 이상이 없으면 클래스 파일(*.class)이 생성이 되었는지 확인한다.

예를 들어 Hello.java가 정상적으로 컴파일 되었다면 클래스파일 Hello.class 가 있어야한다.

클래스파일이 존재하는데 동일한 메시지가 반복해서 나타난다면 클래스 패스(classpath)의 설정이 바르게 되었는지 다시 확인해보자.

5.illegal start of expression

직연하면 문장(또는 수식, expression)의 앞부분이 문법에 맞지 않는다는 의미인데, 간단히 말해서 문장에 문법적 오류가 있다는 뜻이다. 괄호 '(' '{' 를 열고서 닫지 않거나, 수식이나 if문, for문 등에 문법적 오류가 있을 때 또는 public이나 static과 같은 키워드를 잘 못 사용한 경우에도 발생한다. 에러가 발생한 곳이 문법적으로 옳은지 확인하라.

6. class, interface, or enum expected

이 메시지의 의미는 '키워드 class 나 interface 또는 enum이 없다.' 이지만, 보통 괄호 '{' 또는 '}'의 개수가 일치 하지 않는 경우에 발생한다.

열린괄호"{" 와 닫힌괄호 "}"의 개수가 같은지 확인하자.

7. 이외의 오류 해결방법

마지막으로 한 가지 더 얘기하고 싶은 것은 에러가 발생했을 때, 어떻게 해결할 것인가에 대한 방법이다.

  1. 에러 메시지를 잘 읽고 해당 부분의 코드를 살펴본다. 이상이 없으면 해당 코드의 주위(윗줄과 아래 줄)도 함께 살펴본다.

  2. 그래도 이상이 없으면 에러 메시지를 잊어버리고 기본적인 부분을 재확인한다.

  3. 의심이 가는 부분을 주석처리하거나 따로 떼어내서 테스트 한다.

에러 메시지가 실제 에러와는 관계없는 내용 일때도 있지만, 대부분의 경우 에러 메시지만 잘 이해해도 문제가 해결되는 경우가 많으므로 에러 해결을 위해서 제일 먼저 해야 할 일은 에러 메시지를 잘 읽는 것임을 명심하자.

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

콘솔에서 아래와 같이 Java 애플리케이션을 실행시켰을 때

c:\jdk1.8\work>java Hello

내부적인 진행순서는 다음과 같다.

  1. 프로그램의 실행에 필요한 클래스(*.class파일)를 로드한다.
  2. 클래스파일을 검사한다. (파일형식, 악성코드 체크)
  3. 지정된 클래스(Hello)에서 main(String[] args)를 호출한다.

main메서드의 첫 줄 부터 코드가 실행되기 시작하여 마지막 코드까지 모두 실행되면 프로그램이 종료되고, 프로그램에서 사용했던 자원들은 모두 반환된다.

만일 지정된 클래스에 main 메서드가 없다면 다음과 같은 에러 메시지가 나타날 것이다.

Exception in thread "main" java.lang.NoSuchMethodError : main

3.4 주석(comment)

범위 주석 : /* 주석에 넣을 내용 */
한줄 주석 : '//' 부터 라인 끝까지의 내용은 주석으로 간주된다.

3.5 책에 대해서

2장부터 ~ 5장까지 : 익숙해 질때까지 반복해서 봐야하고 실습
6장부터 ~ 9장까지 : 객체지향 개념

11장, 12장, 15장을 제외한 나머지는 필요할때 공부하면 좋다.

0개의 댓글