(c)도경구 version 0.93 (2022/09/06)
1. 첫 자바 애플리케이션 만들기
1-1. 컴퓨터와 프로그램의 실행
1-1-1. 컴퓨터(computer)
- 컴퓨터는 지시/명령(프로그램)에 따라 계산을 수행하는 기계(하드웨어)이다.
- 컴퓨터의 구성 요소
- 프로세서(processor): 프로그램에 기술한대로 계산 수행
- 메모리에서 프로그램 또는 데이터 읽어오기
- 더하기, 빼기 등의 연산을 수행하기
- 계산한 결과를 메모리에 저장하기
- 외부에서 데이터를 받아오거나, 외부로 데이터를 내보내기
- 메모리(Random Access Memory, RAM): 계산 수행하는데 필요한 프로그램과 데이터를 계산하는 동안 보관해 두는 곳
- 계산에 필요한 프로그램과 데이터를 모두 기록
- 읽고 쓰는 속도가 빠름, 고비용
- 계산 작업 종료와 함께 모두 버림
- 전원이 공급되는 동안만 기억을 유지 (영구 기록 불가)
- 프로세서(processor): 프로그램에 기술한대로 계산 수행
- 외부저장장치
- 프로그램과 데이터를 영구히 보관해 두는 곳
- 전원이 공급되지 않더라도 기억을 유지, 메모리에 비해 상대적으로 저비용
- 하드디스크, USB, 클라우드, …
- 파일 단위로 보관하고, 폴더 단위로 정리 보관 가능
- 입출력장치
- 사람과 컴퓨터 사이의 소통 창구
- 입력(input): 사람이 컴퓨터로 정보를 전달
- 키보드, 마우스, 트랙패드, 디스프레이 패드, 마이크, 카메라, …
- 출력(output): 컴퓨터가 사람에게 정보를 전달
- 모니터, 스피커, 프린터, …
1-1-2. 프로그램의 실행
- 컴퓨터로 계산을 수행하기 위해서 작성한 지시 또는 명령이 프로그램(소프트웨어)이다.
- 프로그래밍은 프로그램을 작성하는 행위이다. 코딩(coding)이라고 하기도 한다.
- 컴퓨터의 프로그램 실행 절차
- 작성한 프로그램은 외부저장장치에 파일로 저장
- 파일에 저장된 프로그램을 메모리에 카피 = 로딩(loading)
- 프로세서가 로딩된 프로그램을 실행
- 기계수준 언어 (machine language, low-level language)
- 컴퓨터 프로세서가 이해하고 실행할 수 있는 0과 1의 이진수의 조합으로 표현된 언어
- 기계수준 언어 프로그램은 이진수로 되어 있어 사람이 이해하고 작성하기 난해
- 따라서 사람이 기계수준 언어로 프로그램을 작성하기는 비경제적
- 사람수준 언어 (high-level language)
- 사람이 계산 논리를 기술하기 용이한 언어
- 컴퓨터 프로세서는 사람수준 언어를 이해하지 못함
- 사람수준 언어를 컴퓨터로 실행하는 2가지 상이한 방식
- 인터프리터(interpreter) 실행 방식
- 컴파일러(compiler) 실행 방식
인터프리터 실행 방식
- 사람수준 언어를 이해하고 실행하는 프로세서를 갖춘 가상머신(virtual machine)을 소프트웨어로 구현하여 설치
- 사람수준 언어 프로그램을 가상머신 프로세서가 직접 실행 (언어 : Python 등)
컴파일러 실행 방식
- 사람수준 언어로 작성한 프로그램을 프로세서가 이해하는 기계수준 언어로 번역함
- 번역하는 과정을 컴파일(compile)이라고 함
- C 언어 등과 같이 컴퓨터 하드웨어 프로세서가 이해하는 기계수준 언어로 컴파일하여 실행하기도 하고, Java 언어 등과 같이 가상컴퓨터(VM, virtual machine)를 소프트웨어로 만들어 해당 VM의 프로세서가 이해하는 기계수준 언어로 컴파일하여 싫행하기도 함
1-1-3. 자바 프로그램의 실행
- Java 프로그램은 가상컴퓨터인 Java Virtual Machine(JVM)이 이해하는 기계수준 언어 Java Bytecode로 컴파일하여 실행한다.
- 따라서 Java 프로그램을 실행하려면 JVM 소프트웨어를 컴퓨터에 설치해야 한다.
- Java 프로그램 실행 절차
- 프로그램을 Java로 작성
- Java 프로그램을 Java Bytecode 프로그램으로 컴파일하여 로딩
- 로딩된 Java Bytecode 프로그램을 JVM이 실행
- 왜, JVM 가상컴퓨터를 사용하는가?
- 컴퓨터 하드웨어 기종에 따라 프로세서가 다르고, 프로세서마다 이해하는 기계수준 언어가 다르다.
- 따라서 컴퓨터 기종별로 전용 컴파일러를 따로 준비해야 해서 불편하다.
- 그런데 컴퓨터 하드웨어 기종별로 JVM 소프트웨어를 준비해두면, Java Bytecode로 컴파일하는 컴파일러 하나만 준비해두면 된다.
- 우수한 이식성(portability): 하드웨어 또는 운영체제와 상관없이 어디에서나 실행가능하고 항상 일정한 실행 결과 보장
1-1-4. Java 프로그램의 작동 개념
- Java는 객체지향 패러다임으로 프로그래밍이 가능한 언어이다.
- 클래스(class)
- Java 프로그램은 클래스(class)의 집합이다.
- 파일 하나에 클래스 하나씩 담는다.
- 클래스는 객체를 만들어내는(찍어내는) 형판(template) 이다.
- 객체(object)
- 객체는 프로그램 실행 중에 생성되어 메모리에 거주하는 실체(instance)이다.
- 각 객체는 고유한 상태(field)과 수행가능한 기능(method)을 보유하고 있다.
- 예를 들어 Java에서 문자열
String은 객체로 취급한다. - 다음 그림은
String객체"ERICA"를 형상화 한 것이다.

- 이
String객체는"ERICA"문자열을 갖고 있고, 다양한 기능을 할 수 있도록 준비되어 있다. 그 기능 중 하나가length()라는 메소드이다. -
즉, 이 객체가 갖고 있는 문자열의 길이을 알고 싶으면
length()메소드 호출 메시지를 이 객체에 보낸다. 그러면 이 객체는 해당 기능을 수행하여 결과인5를 내준다. - 자바 세상에서 계산이란 프로그램에 짜놓은 각본대로 객체들이 만들어져 메모리에 거주하면서 객체들끼리 서로 메시지를 주고받는 일련의 소통 과정으로 볼 수 있다.
- 프로그램이 이와 같은 방식으로 작동하는 패러다임을 객체지향 프로그래밍, 영어로 Object-Oriented Programming, 또는 줄여서 OOP, 패러다임이라고 한다.
1-1-5. Java 프로그래밍 준비
- 프로그램을 작성하고 실행하는 작업을 한 군데에서 모두 할 수 있게 해주는 소프트웨어를 통합개발환경, 영어로는 IDE(Integrated Development Environment)라고 한다.
- 다양한 상용 IDE가 시판되고 있으니 어떤 것이든지 취향에 맞는 걸 골라서 사용하면 된다.
- 많이 사용하는 IDE를 몇 개만 나열해보면, Eclipse, intelliJ IDEA 등이 있다.
- 이 수업에서는 Eclipse를 사용한다.
- 실습 또는 숙제를 하면서 이미 친숙한 다른 IDE가 있다면 굳이 Eclipse를 사용하지 않아도 상관없지만, 소통의 원활함을 원한다면 Eclipse 사용을 권한다.
- 대부분의 상용 IDE는 회사에서 업무용으로 쓰는 경우 유료이지만, 학교에서 교육용으로 쓰는 경우 Community Edition 이라고 하며 무료이다.
1-2. Hello, World! 애플리케이션
- 애플리케이션(Application)은 컴퓨터 운영체제로 실행가능한 모든 소프트웨어를 말한다. 우리말로는 응용프로그램이라고도 한다.
- 일부 시스템소프트웨어를 제외한 거의 대부분 소프트웨어를 자바로 작성할 수 있으므로 자바로 작성한 프로그램을 보통 자바 애플리케이션 (Java Application) 이라고 많이 부른다.
- 이제 자바 애플리케이션을 작성하고 실행하는 과정을 간단한
Hello, World!애플리케이션 사례를 가지고 경험해보자.
1-2-1. 표준 출력 버전
요구사항
- Eclipse에서
Hello, World!를 콘솔창에 프린트하는 애플리케이션을 만들어 실행해보자.
Eclipse로 프로그래밍 준비
- Eclipse를 연다.
- 먼저 프로그램을 만들어 저장할 장소를 마련해야 한다.
- 메뉴에서
Java Project클릭하여 프로젝트 만들기- 프로젝트 이름은
Project name칸에hello(모두 소문자)로 적고Finish클릭 - 다음 창에서 모듈은 (당분간) 만들지 않을 것이므로
Don't Create클릭 hello이름의 폴더가 만들어짐. 앞으로 작성하는 프로그램은 이 폴더에 저장됨hello폴더 안에bin과src폴더가 생성됨src폴더에는 작성하는 소스 코드가 보관되고,bin폴더에는 컴파일된 바이트 코드가 보관됨
- 프로젝트 이름은
- 메뉴에서
Class클릭하여 클래스 만들기Package이름은 (당분간) 빈칸으로 둠- 클래스 이름은
Name칸에HelloWorld(각 단어의 첫 문자만 대문자)로 정함 public static void main(String[] args)체크박스 클릭하여 선택Finish클릭HelloWorld.java파일이src폴더 안에 생김- 자바 프로그램이라는 표시를 해주기 위해 확장자
.java가 붙음 - 확장자를 제외하면 파일 이름과 클래스 이름이 동일함을 주목
- 자바 프로그램 파일마다 클래스가 하나씩 있음
- 자동 생성된
HelloWorld.java파일 살펴보기

- 라인 2에서
public는 누구나 쓸 수 있도록 공개된 클래스임을 나타내는 키워드이고, - 이어서 나오는
HelloWorld는 클래스의 이름을 나타낸다. - 라인 4-7은
main메소드(method)라고 하며, 애플리케이션 실행과 동시에 저절로 바로 실행되므로 시동을 거는 역할을 한다고 볼 수 있다. main메소드 앞에static이라는 키워드는 이 메소드가 클래스소속임을 나타낸다. 클래스소속은 객체로 만들지 않아도 호출(사용)이 가능하다.- 메인 메소드의 몸체를 이루는 중괄호 사이에 코드를 작성한다.
구현
- 콘솔창에
Hello, World!를 프린트하는 코드는 다음과 같다.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
- 작성한 코드 한 줄의 의미를 파악해보자.
System은java.lang패키지(package) 소속의 클래스이다.java.lang패키지는 프로그램에서 따로 언급하지 않아도 쓸 수 있도록 준비되어 있다.System클래스가 보유하고 있는 클래스소속 필드out에 콘솔창에 프린트하는 기능을 가진PrintStream객체가 연결되어 있다.PrintStream객체가 보유하고 있는println("...")를 호출하면 콘솔창에...을 프린트한다.
컴파일
- 프로그램을 실행하려면 먼저 컴파일을 해야한다.
- IDE에서는 프로그램을 완성하고 저장하면 저절로 컴파일이 되어 바이트코드가 생성된다.
- 생성된 바이트코드는
bin폴더에서 확인할 수 있다. - 바이트코드는 소스코드와 파일 이름이 같으며, 확장자만
.class로 다르다.
실행
- 메뉴에서 다음과 같은 모양의
Run버튼을 찾아서 클릭한다.
- 콘솔창에서 실행 결과
Hello, World!확인한다.
실행 추적을 통한 실행 의미의 이해
Run버튼을 누름과 동시에HelloWorld클래스의main메소드가 저절로 호출되어 실행된다.System클래스의out필드에 연결되어 있는PrintStream객체에println("Hello, World!")메시지를 보낸다.PrintStream객체는"Hello, World!"를 콘솔창에 프린트 한다.

1-2-2. Swing 패키지 활용 버전
요구사항
Hello, World!를 Swing 패키지에서 제공하는Messsage출력창에 프린트하는 애플리케이션을 만들어보자.
구현
Messsage출력창에Hello, World!를 프린트하는 코드는 다음과 같다.
import javax.swing.*;
public class HelloWorld {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello, World!");
}
}
javax.swing은 Java Standard API Library에서 제공하는 Graphic User Interface(GUI) 라이브러리 패키지 이다. (Java API Documentation 사이트 방문하여 확인)- 이 패키지를 사용하려면
import키워드를 붙여 위와 같이 프로그램 앞부분에 선언해야 한다. - 작성한 코드 한 줄의 의미를 파악해보자.
JOptionPane은javax.swing패키지가 제공하는 클래스이다.JOptionPane은showMessageDialog클래스소속 메소드를 보유하고 있다.showMessageDialog(null,"...")메소드를 호출하면 메시지 출력창을 띄워...을 프린트하여 보여준다.
실행
- 메뉴에서
Run버튼을 찾아서 클릭하여 실행하여, 다음과 같은 출력창이 생기는지 확인

실행 추적을 통한 실행 의미의 이해
Run버튼을 누름과 동시에HelloWorld클래스의main메소드가 저절로 호출되어 실행된다.JOptionPane클래스에showMessageDialog(null, "Hello, World!")메시지를 보낸다.JOptionPane클래스는"Hello, World!"를 새긴 메시지 출력창을 띄운다.

1-3. 실습 : IDE 준비
- IDE를 개인 컴퓨터에 설치한다.
- 강의 시간에 시연한
Hello, World!애플리케이션을 강의 노트에 기술한대로 똑같이 따라서 작성하고 실행하여 문제없는지 확인한다.
1-4. 실습 : 현재 시각 출력 애플리케이션
- 실행하는 시점의 시각을 출력하는 애플리케이션을 공부하자.
1-4-1. 표준 출력 버전
요구사항
- 현재 시각을 콘솔창에 프린트하는 다음 애플리케이션을 실행하여 콘솔창에서 현재 시각을 확인하고, 실행 추적해보자.
import java.time.*;
public class Clock {
public static void main(String[] args) {
System.out.println(LocalTime.now());
}
}
실행 추적을 통한 실행 의미의 이해
Run버튼을 누름과 동시에Clock클래스의main메소드가 저절로 호출되어 실행된다.java.time패키지에 준비되어 있는LocalTime클래스의 클래스소속 메소드인now()를 호출하여 현재 시각을 받아온다.- 전달받은 현재 시각을 콘솔창에 출력해달라는
println메시지를PrintStream객체에 보낸다. PrintStream객체는 전달받은 현재 시각을 콘솔창에 프린트 한다.

1-4-2. Swing 패키지 활용 버전
요구사항
- 현재 시각을 Swing 패키지에서 제공하는
Messsage출력창에 프린트하는 다음 애플리케이션을 실행하여 결과를 확인하고, 실행 추적해보자.
import java.time.*;
import javax.swing.*;
public class Clock {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, LocalTime.now());
}
}
실행 추적을 통한 실행 의미의 이해
Run버튼을 누름과 동시에Clock클래스의main메소드가 저절로 호출되어 실행된다.java.time패키지에 준비되어 있는LocalTime클래스의 클래스소속 메소드인now()를 호출하여 현재 시각을 받아온다.- 전달받은 현재 시각을
Messsage출력창에 프린트해달라는showMessageDialog메시지를JOptionPane클래스에 보낸다. JOptionPane클래스는 전달받은 현재 시각을 새긴 메시지 출력창을 띄운다.
