Java 파트1-1. 시작하기

1. 프로그래밍 언어와 자바


  • 객체 지향 프로그래밍 : 객체(부품)을 만들고, 이 객체들을 서로 연결해서 더 큰 프로그램을 완성하는 기법. 자바는 객체 지향 프로그래밍을 위한 최적의 언어
  • 기계어 : 컴퓨터(운영체제)가 이해하고 실행할 수 있는 0과 1로 이루어진 코드
  • 프로그래밍 언어 : 사람이 기계어를 이해하는 것은 매우 어렵기 때문에 사람의 언어와 기계어의 다리 역할을 하는 것. ex) C, C++, 자바 파이썬
  • 소스 파일 : 프로그래밍 언어로 작성된 파일
  • 컴파일 : 소스 파일을 기계어로 번역하는 것, 이 역할을 담당하는 소프트웨어를 컴파일러라고 함
  • JDK : 자바 개발 도구의 줄임말로, 자바로 프로그램을 개발할 수 있는 실행 환경과 개발 도구 등을 제공한다.
  • 환경 변수 : 운영체제가 실행하는 데 필요한 정보를 제공해주는 변수를 말함. JDK를 설치한 후 명령 라인(명령 프롬프트, 터미널)에서 컴파일러(javac)와 실행(java) 명령어를 사용하려면 JAVA_HOME 환경 변수를 등록하고 Path 환경 변수를 수정하는 것이 좋다.
  • 다른 경로에서 bin 폴더 안에 있는 명령어를 사용할 수 있도록 하기 위해서이다. bin 폴더 안에는 다양한 명령어가 있는데 대표적으로 자바 소스 파일을 컴파일 해주는 javac 명령어와 컴파일된 파일을 실행해주는 java 명령어가 있다.


2. 이클립스


  • 이클립스 : 무료로 사용할 수 있는 오픈 소스 통합 개발 환경, IDE란 프로젝트 생성, 자동 코드 완성, 디버깅 등과 같이 개발에 필요한 여러 가지 기능을 통합적으로 제공해주는 툴을 말함
  • 워크스페이스 : 이클립스 실행과 관련된 메타 데이터와 프로젝트 폴더가 저장되는 폴더
  • 뷰 : 이클립스 내부에서 사용되는 작은 창
  • 퍼스펙티브 : 프로젝트를 개발할 때 유용하게 사용할 수 있는 뷰들을 미리 묶어 이름을 붙여 놓는 것

단축키

  • 실행 : ctrl + F11
  • 자동 정렬 : ctrl + shft + F
  • 자동 import : ctrl + shft + o
  • 재정의 가져오기 : ctrl + space


3. 자바 프로그램


자바 프로그램을 개발하기 위해서는 우선 파일 확장명이 .java인 텍스트 파일을 생성하고 자바 언어로 코드를 작성해야 한다. 이렇게 만들어진 자바 소스 파일을 컴파일러인 javac 명령어로 컴파일 한다. 컴파일이 성공하면 확장명이 .class인 바이트 코드 파일이 생성된다.
바이트 코드 파일은 완전한 기계어가 아니므로 바로 실행할 수 있는 파일이 아니다. 바이트 코드 파일을 완전한 기계어로 번역해서 실행하려면 java 명령어를 사용해야 한다.
자바 소스 파일(hello.java) -> javac 명령어 실행(컴파일) -> 바이트 코드 파일(hello.class) -> java 명령어 실행(JVM이 기계어 번역 후 실행) -> 실행


바이트 코드 파일과 자바 가상 기계

자바 프로그램은 완전한 기계어가 아닌 바이트 코드 파일(.class)로 구성된다. 바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, 자바 가상 기계(JVM)라는 번역기가 필요하다.
자바가 JVM을 사용하는 이유는 바이트 코드 파일을 다양한 운영체제에서 수정하지 않고 사용할 수 있도록 하기 위함이다. 예를 들어 개발자는 윈도우 운영체제에서 프로그램(바이트 코드 파일)을 개발하고, 개발 완료된 프로그램은 리눅스로 옮겨 실행할 수 있다.
자바 소스 파일(hello.java) -> javac 명령어 실행(컴파일) -> 바이트 코드 파일(hello.class) -> 여기서 이제 리눅스용 JVM 또는 윈도우용 JVM으로 나뉘어 질 수 있는 것이다. javac 명령어로 컴파일된 바이트 코드 파일은 JDK가 설치된 어떤 운영체제에서도 java 명령어로 동일하게 실행할 수 있다. 즉, 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있는 것이다.


프로젝트 생성부터 실행까지

이클립스에서 자바 소스 파일을 저장하려면 우선 자바 프로젝트를 생성해야 한다.
[File] - [New] - [Java Project] - Project layout에서 자바 소스 파일(.java)와 컴파일된 바이트 코드 파일(.class)를 분리해서 저장하도록 설정 - Finish
이후에는 NEW module-info.java 대화 상자가 나타나는데 이클립스가 생성하는 프로젝트는 모듈로 만들어지기 때문에 모듈 기술자(module descriptor)라고 부르는 module-info.java가 필요하다. 입력란에 모듈명을 입력하면 되는데, 기본적으로 프로젝트명이 들어가 있다. 모듈명을 적고 crete를 누르면 된다. 모듈명을 꼭 프로젝트명으로 할 필요는 없다. JDK 11 버전 이후부터는 명령 프롬프트와 같은 명령 라인에서 프로젝트를 실행할 때 모듈명이 필요하므로 모른다면 module-info.java 를 보고 확인한다.
module-info.java 편집 뷰에서 중괄호 안에 requires java.se; 를 작성한다. 이는 java SE(JDK)가 제공하는 모든 모듈이 필요함을 의미한다. save하고 닫는다.
Package Explorer 뷰에서 프로젝트의 src 폴더를 오른쪽 클릭해서 new - package를 선택한다. 자바는 소스 파일 및 컴파일된 바이트 코드 파일들을 기능별로 쉽게 관리하기 위해 패키지를 사용한다. 패키지는 마치 파일 시스템의 폴더(디렉토리)와 비슷하다. Name 입력란에 sec03.exam01 을 입력하고 Finish 누른다. 탐색기로 보면 프로젝트 폴더 안에 src 안에 sec03 안에 exam01폴더가 있는 것이다. 생성된 sec03.exam01 패키지에 오른쪽 클릭으로 new - class 클릭한다. Name 입력란에 클래스 이름을 적고 public static void main을 체크하고 finish 한다. 체크한 것은 main()메소드를 자동으로 추가해 주기 위한 작업이다. 그럼 이제 sec03.exam01 패키지 안에 .java 소스 파일이 생성된 것을 확인할 수 있다. 이제 여기서 소스 파일을 저장하면 자동으로 컴파일 된다. 이클립스는 컴파일을 위한 메뉴가 따로 없다. 컴파일된 바이트 코드 파일은 해당 프로젝트 폴더에 bin 폴더 내부에 패키지 폴더와 함께 .class로 생성된다.

명령 프롬프트에서 실행하기

  • 먼저 src 폴더에 있는 소스 파일을 javac 명령어로 컴파일해서 바이트 코드 파일을 bin 폴더에 생성해야 한다.
    • javac -d [바이트 코드 파일 저장 위치] [소스 경로/module-info.java 소스 경로/*.java]
    • javac -d bin src/module-info.java src/sec03/exam01/*.java
    • *.java 는 모든 java 파일을 의미한다
  • 이제 java 명령어로 바이트 코드 파일을 실행할 차례다.
    • java -p [바이트 코드 파일 저장 위치] -m 모듈/패키지이름… 클래스이름
    • java -p bin -m chap01/sec03.exam01.Hello

모듈이란

  • 외부에서 재사용할 수 있는 패키지들을 묶은 것
  • 이클립스의 프로젝트는 하나의 모듈을 개발하는 것
  • 프로젝트를 모듈이라고 생각하면 된다.


그림1

그림2

모듈 기술자

  • 해당 모듈의 이름이 무엇인지
  • 해당 모듈이 의존하는 모듈이 무엇인지
  • 해당 모듈을 외부에서 어떻게 사용할 수 있는지에 관한 내용이 작성되어 있다.

의존하는 모듈

  • 해당 모듈(프로젝트)가 실행하기 위해 필요한 외부 모듈을 의미함
  • 기본적으로 java.base 모듈만 사용 가능하므로 다른 모듈을 사용할 경우 의존 모듈로 등록해야 한다.

그림3

모듈 기술자에 등록하기 위한 방법은 중괄호 안에 아래와 같이 작성한다.

requires java.sql;
requires java.desktop;

requires java.se; // se 전체 모듈 사용하겠다는 의미

.java 파일에서 사용할 때는
import javax.swing.*; // 파이썬과 비슷

소스 분석

package sec03.exam01;

public class hello {

	public static void main(String[] args) {
		System.out.println("hello world");

	}

}
  • 최상단에는 package 키워드와 sec03이 명시되어 있다. hello.java는 sec03.exam01 패키지에 저장되어 있기 때문에 패키지 선언이 반드시 있어야 한다.
  • public class hello를 클래스 선언부라고 한다. public class는 공개 클래스라는 뜻이고 hello는 클래스 이름이다. 클래스 이름은 소스 파일명과 동일해야 하며, 대소문자도 일치애햐 한다. 클래스 선언부 뒤에 {} 중괄호를 클래스 블록이라고 한다.
  • public static void main(String[] args)를 메소드 선언부라고 한다. main은 메소드 이름이다. java 명령어로 바이트 코드 파일을 실행하면 제일 먼저 main() 메소드를 찾아 블록 내부를 실행한다. 그래서 main() 메소드를 프로그램 실행 진입점이라고 한다.

용어 정리

  • 바이트 코드 파일 : 자바 소스 파일을 javac 명령어로 컴파일한 파일
  • JVM : 자바 가상 기계(JVM)는 바이트 코드 파일을 운영체제를 위한 완전한 기계어로 번역하고 실행하는 역할을 한다. JVM은 java 명령어에 의해 구동된다.
  • 클래스 선언 : 자바 소스 파일은 클래스 선언부와 클래스 블록으로 구성된다. 이렇게 작성하는 것을 클래스 선언이라고 한다.
  • main() 메소드 : java 명령어로 바이트 코드 파일을 실행하면 제일 먼저 main() 메소드를 찾아 블록 내부를 실행한다. 그래서 main 메소드를 프로그램 실행 진입점이라고 한다.

본 포스팅은 ‘혼자 공부하는 자바’를 읽고 공부한 내용을 바탕으로 작성하였습니다.


© 2021. By Backtony