본문 바로가기
Java/Java의 정석

[Java의 정석]Chapter 01. 자바를 시작하기 전에

by 엑츄얼리 2022. 10. 26.

1. 자바 (Java Programming Language)

1.1 자바란?

  • 1996년 썬 마이크로시스템즈에서 개발한 객체지향 프로그래밍 언어
  • 운영체제에 독립적 => 다양한 OS가 존재하는 인터넷 환경에 적합
  • 클래스 라이브러리(Java API)를 통해 기본적인 프로그래밍에 필요한 요소를 제공

 

1.2 자바의 역사

Oak

  • 자바의 시작이 된 언어
  • 가전제품이나 소형기기에 사용할 목적으로 C++의 단점을 보완하여 개발
  • 인터넷의 등장으로 운영체제에 독립적인 Oak의 적합성을 인지 후, 
    이를 인터넷 환경에 적합하도록 개발하여 이름을 Java로 변경

Java

  • Applet(애플릿)
    자바로 개발된, 정적인 웹페이지에 사운드와 애니메이션 등의 요소를 제공하는 유일한 방법
    Java의 인지도를 단시간에 올릴 수 있었으나, 보안 상의 이유로 더 이상 사용되지 않음
  • Servlet(서블릿)과 JSP(Java Server Page)
    서버 쪽 프로그래밍에서 사용
  • Android(안드로이드)
    구글의 스마트폰 운영체제에 사용

 

1.3 자바 언어의 특징

  1. 운영체제에 독립적 by 자바가상머신(JVM)
    Write once, run anywhere
    자바 응용프로그램의 명령이 JVM을 통해 운영체제와 하드웨어에게 이해할 수 있도록 변환되어 전달된다.
    (JVM은 운영체제에 종속적,
    다른 언어와 비교할 때 응용프로그램이 아닌, JVM이 운영체제에 종속적인 부분은 큰 장점)
  2. 객체지향 언어 (OOP, Object Oriented Programming Language)
                                                                                                                  참고 : https://simsimjae.tistory.com/293
    • 추상화 : 공통적인 부분이나 관심있는 특성을 한 곳에 모으는 것 (공통 메서드를 인터페이스로 정의)
    • 상속 : 클래스를 재사용 (자식 클래스가 상위 클래스의 멤버변수와 메서드를 그대로 사용 가능)
                생산성 향상 및 유지보수 용이
    • 캡슐화 : 비슷한 역할을 하는 속성과 메서드들을 하나의 클래스로 모으는 것 
                    로직이나 변수를 감추고 외부에는 기능만 제공하는 것(api)
    • 다형성 : 같은 메서드가 상황에 따라 다르게 동작하게 만드는 것
  3. 비교적 배우기 쉬움
    객체지향적 설계를 단순화함으로써 객체지향개념을 쉽게 이해하고 활용할 수 있도록 함
  4. 자동 메모리 관리 (Garbage Collection)
    자바 프로그램은 실행 시, Garbage Collector가 자동으로 메모리를 관리
    => 사용자가 수동적으로 메모리를 관리하는 수고를 줄여줌 (어느정도의 비효율은 편의성을 위해 감수해야함)
  5. 네트워크와 분산처리를 지원
    인터넷과 대규모 분산환경을 고려하고 개발한 언어로
    라이브러리(Java API)를 통해 네트워크 프로그램 개발을 지원
  6. 멀티스레드 지원 (Multi-Thread)
    일반적으로 멀티스레드의 지원은 운영체제에 따라 구현방법이 상이하여 어려움이 있음
    하지만 자바에서는 멀티스레드 관련 라이브러리(Java API)를 제공함과 동시에
    멀티스레드 스케쥴링을 자바 인터프리터가 담당하여 운영체제에 상관없이 구현 가능
  7. 동적 로딩(Dynamic Loading)을 지원
    일반적으로 자바 프로그램(Application)은 여러 개의 클래스로 구성
    동적 로딩으로 인해 실행 시 모든 클래스가 로딩되지 않고, 필요한 시점에 해당 클래스를 로딩하여 사용
    (이 부분을 실행 속도 향상으로 생각할 수 있겠지만, 자바 자체가 다른 언어에 비해 느리기 때문에 이를 근거로 자바가 다른 언어로 설계된 프로그램에 비해 실행 속도가 빠르다고 생각하면 안됨.)
    일부 클래스가 변경되더라도 전체 어플리케이션을 컴파일하지 않고, 적은 작업으로 수정사항을 처리할 수 있다.

 

1.4 JVM (Java Virtual Machine)

 * 가상 기계 (Virtual Machine)의 의미

   소프트웨어로 구현된 하드웨어 ex. TV와 Video를 소프트웨어 한 Window Media Player

  • Java Application은 JVM을 통해 OS, 하드웨어에 명령이 전달되기 때문에 OS와 하드웨어에 독립적이지만,
    일반 Application은 OS에 맞게 Application을 변경해야 실행 가능하다.
    (JVM은 OS에 종속적)
  • 일반 Application의 코드는 OS와 하드웨어로 직접 전달되는데 반해, 
    Java Application의 경우 JVM을 통해 해석(Interpret)되어 OS와 하드웨어에 전달되기 때문에 느림
    => 최적화 기술JIT컴파일러(컴파일된 자바코드(바이트코드)를 하드웨어의 기계어로 바로 변환)
          를 적용하여 속도의 격차를 줄임

 

 

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

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

JDK(Java Development Kit)

설치 시, JVM과 자바 클래스 라이브러리(Java API)외에 자바를 개발하는데 필요한 프로그램들이 설치됨

JDK의 bin 디렉토리를 시스템 환경변수 path에 추가해주어야 함

(path는 OS가 파일의 위치를 파악하는데 사용하는 경로, 경로 등록 시 파일 이름만으로도 사용 가능)

 

JDK bin 디렉토리의 주요 실행 파일

  • javac.exe : 자바 컴파일러, 자바 소스코드를 바이트코드로 컴파일
    c:\jdk1.8\work>javac Hello.java => Hello.class 생성
  • java.exe : 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행
    c:\jdk1.8\work>java Hello 
  • javap.exe 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환
    c:\jdk1.8\work>javap Hello > Hello.java

* 바이트코드 : 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 - 자바개발도구 (Java Development Kit)
    JRE + 개발에 필요한 실행파일 (위에 언급된 javac.exe 등)
  • JRE - 자바실행환경 (Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
    JVM + 클래스라이브러리 (Java API)

 

 

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

3.1 Hello.java

Hello.java

 

                                                                                                                         참고 : https://yoonemong.tistory.com/183

 

[JAVA] 자바 class 파일 실행방법

우리는 이클립스에서 .java 파일을 만들고 실행시키면 자동으로 결과값을 보여주기 때문에 편하게 사용만하고 있지만 실무에서는 .java 파일을 이클립스가 아닌 환경에서 실행해야하는 경우가 많

yoonemong.tistory.com

Hello.java =컴파일(javac.exe)=> Hello.class 생성 =실행(java.exe)=> Hello, World 출력

디렉토리 구조
Terminal에서 Java 프로그램 실행

* package가 자바 프로그램에 선언되어있으면, java.exe를 통해 실행되는 클래스 파일이 해당 디렉토리에 있어야함

  => ch01.Hello로 디렉토리를 설정해야 실행됨 

   말이 조금 난해하지만,

   아래와 같이 디렉토리를 ch01로 이동 후에 java Hello를 실행하면 main class를 load하지 못하는 오류가 뜬다.

   이런 것은 그냥 받아들이자.

 

Java Application 구성

  •  Java Application 은 Class로 구성되며 모든 코드는 Class 내부에 존재
class 클래스이름 {

}

 * package와 import 문은 예외적으로 class 밖에 작성

 

main 메서드

  • 아래의 public static void main(String[] args) 구문은 자바 인터프리터(java.exe)에 의해 호출되기로 약속된 부분인
     main 메서드의 선언부
  • Java Application은 main 메서드의 호출로 시작해서 main 메서드의 마지막 줄을 실행 후 종료
class 클래스이름 {
	public static void main(String[] args){
    
    }
}
  • 하나의 Java Application에 1개의 main메서드 클래스가 반드시 존재해야함
    Java Application 실행 시, 아래와 같이 실행
> java.exe [main메서드를 포함한 클래스이름]

 * 하나의 소스파일에는 일반적으로 1개의 클래스만을 정의하지만, 둘 이상의 클래스를 정의하는 것도 가능

   소스 파일의 이름은 public class의 이름과 일치해야함 (public class가 없어도 됨)

  소스파일(*.java)와 달리 클래스파일 (*.class)는 클래스마다 하나씩 만들어지므로
  위의 경우에서 6번째 줄이 없다고 가정하면 Hello.class, Hello2.class, Hello3.class 3개의 class파일이 생성됨

 

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

  1. cannot find symbol 또는 cannot resolve symbol
    선언되지 않은 변수나 메서드를 사용했을 때 발생
  2. ';' expected
    자바의 모든 문장의 끝에는 ';'이 있어야함
  3. Exception in thread "main" java.lang.NoSuchMethodError:main
    main 메서드를 찾을 수 없다라는 의미로, main 메서드가 올바르게 선언되어 있는지 확인
  4. Exception in thread "main" java.lang.NoClassDefFoundError:Hello
    public class명이 소스파일의 이름과 일치하는 지 확인, classpath의 설정이 올바른지 확인
  5. illegal start of expression
    문장에 문법적 오류가 존재
  6. class, interface, or enum expected
    class, interface, enum이 존재하지 않을 때 발생하나 보통 {}개수가 일치 하지 않을 경우 발생

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

c:\jdk1.8\work>java Hello

위와 같이 Java Application이 실행되었을 때 내부적인 진행 순서는

  1. 프로그램의 실행에 필요한 Class파일(Hello.class)를 로드
  2. 클래스파일을 검사 (파일형식, 악성코드 체크)
  3. 지정된 클래스의 main 메서드를 호출
  4. main 메서드의 모든 코드가 실행된 후 프로그램 종료

 

3.4 주석(comment)

  • 프로그램 코드에 대한 설명을 적절히 덧붙여 프로그램을 이해하는데 도움
  • 작성자, 작성일시, 버전, 변경이력 등의 정보를 제공

'Java > Java의 정석' 카테고리의 다른 글

[Java의 정석]Chapter 02. 변수(Variable)  (0) 2022.11.02
Chapter 04. 조건문과 반복문  (0) 2022.04.10
Chapter 03. 연산자(Operator)  (0) 2022.04.10
Chapter 02. 변수(Variable)  (0) 2022.04.10

댓글