내용:
1 자바 개발 환경 구축
자바 프로그램을 작성할 때는 메모장 등 문서편집기를 사용하면 된다. 작성한 프로그램을 컴파일하고 실행시키려면 “개발환경”이 필요하다. 학교 실습실의 컴퓨터에는 이미 필요한 개발환경이 갖추어져 있으므로 별다른 사전 작업 없이 자바 프로그래밍 실습을 할 수 있다.
여기에서는 집에 있는 컴퓨터에 자바 개발환경을 설치하는 방법을 설명한다. 학교 실습실 컴퓨터는 윈도10 컴퓨터이므로 이 문서에서도 윈도10 컴퓨터를 기준으로 설명한다.
기본적으로 자바 프로그램을 컴파일하거나 실행할 때는 명령 프롬프트 창을 이용한다.
자바 개발환경이 설치되지 않은 컴퓨터의 명령 프롬프트 창에서 자바 프로그램을 컴파일할 때 사용하는 javac 명령을 내리면 아래 그림과 같은 출력이 나타난다.
javac라는 이름의 도구(프로그램)가 설치되어 있지 않기 때문이다. javac는 자바 개발환경의 일부인데 자바 개발환경이 설치되어 있지 않은 것이다.
자바 개발환경을 설치한다는 것은 JDK (java development kit) 패키지를 설치한다는 말이다.
JDK에는 용도에 따라 여러 가지 버전이 있다. 그 중 우리는 SE(Standard Edition; SE)를 사용한다.
Java SE를 위한 JDK는 시간이 흐름에 따라 업데이트되어 왔다. 최신 버전은 Java SE 13.0.2 JDK이다.
우리는 저작권 문제가 없고 안정적인 Java SE 8 (Java SE 8u241) 버전을 사용한다.
윈도10 컴퓨터에 자바 개발환경을 설치하는 구체적인 방법은 이 문서를 참고하세요.
(IOS 컴퓨터 사용자는 이 문서를 참고하세요.)
명령 프롬프트 창에서 아래 그림과 같이 javac 명령을 입력하고 엔터를 눌렀을 때 아래 그림과 같은 출력이 나타나면 개발환경을 제대로 설치한 것입니다.
2 프로그램 편집 및 실행방법
2.1 프로그램 편집
아래 그림과 같이 C: 드라이브 아래에 자기 이름의 폴더를 하나 만들고, 그 아래에 week1라는 폴더를 만드시오. 그리고 그 아래에 실습과제 프로그램 파일을 저장합니다. 다음 주에는 week2 폴더를 만들고 그 아래에 프로그램을 작성합니다. 아래 그림에서 HelloWorld.java는 앞으로 작성할 파일입니다.
“폴더”와 “디렉토리”는 같은 말입니다. 앞으로 이 두 가지를 섞어 사용할 것입니다.
“Hello world!”를 출력하는 간단한 프로그램을 작성하고 컴파일한 후 실행해 봅니다.
우선 “메모장”을 열고 아래와 같은 소스 코드를 입력합니다.
대문자 소문자를 정확히 구분해 적어야 합니다. 철자가 틀려도 안 됩니다.
세 번째 줄 System.out.println에 있는 글자는 프린트아이엔이 아니고 프린트엘엔입니다.
두번째 줄과 네 번째 줄의 맨 앞에는 “탭”을 입력합니다. 세 번째 줄에는 “탭”을 두 번 입력합니다.
입력을 했으면 파일로 저장합니다. 메모장 메뉴에서 “파일” – “다른 이름으로 저장”을 선택한 후 아래 그림처럼 입력하고 “저장”을 클릭합니다.
이 때 파일 이름이 대소문자 구분하여 정확히 HelloWorld.java이어야 합니다. 즉 파일이름과 클래스 이름이 정확히 같아야 합니다.
그러면 아래 그림과 같이 HelloWorld 프로그램이 들어 있는 파일이 만들어집니다.
2.2 프로그램 컴파일과 실행
이제 HelloWorld.java 파일을 컴파일 하여 HelloWorld.class를 생성하고 이를 실행해 봅니다.
컴퓨터 왼쪽 아래, 아래 그림의 노란 부분을 눌러 나오는 네모 부분에 cmd라고 입력하면 명령어창(명령 프롬프트)이 뜹니다.
명령 프롬프트 창이 열리면, 나는 파일시스템 내에서 C:\Users(사용자이름)에 위치해 있습니다. 아래 그림에서는 (사용자이름)이 jck입니다. 학생이 사용하는 컴퓨터는 아마도 이름이 다를 것입니다. 그 이름에 맞춰 진행을 하세요.
위 그림의 맨 아래 줄에 있는 “C:₩Users₩jck>”를 “프롬프트(prompt)”라고 부릅니다. prompt는 “재촉하다“라는 의미를 갖는 단어입니다. 사용자가 무엇인가 입력하도록 재촉하는 의미로 이해하면 됩니다. 위 그림에서, 이 프롬프트는 사용자가 현재 파일시스템 내의 어떤 위치에 있는지를 알려주는 기능도 하고 있습니다.
우리가 작성한 프로그램은 C:(자기이름)\week1에 있는 HelloWorld.java입니다. 프로그램이 있는 곳으로 이동하기 위해 cd (change directory) 명령어를 사용합니다. 우선 아래 그림처럼 입력하여 파일시스템의 꼭대기로 갑니다. 꼭대기인 \ 위치로 이동하라는 명령입니다.
꼭대기에 무엇이 있는지 살펴봅니다. 현재 내가 있는 꼭대기 디렉토리()에 무엇이 있는지 보여달라는 명령이 dir (directory)입니다. 아래 그림과 같이 dir 명령을 입력합니다.
모두 열 세 개의 항목이 있군요. 10개의 항목에는 <DIR> 표시가 되어 있는데 이는 이 항목들이 디렉토리라는 의미입니다. <DIR> 표시가 없는 항목은 일반 파일이라는 의미입니다.
열 개 디렉토리들 중에 조금 전에 만든 “홍길동” 이라는 이름의 디렉토리가 있습니다. 그리로 이동합니다. 아래 그림처럼 입력합니다.
위 명령을 입력할 때, “cd 홍길동”을 모두 입력하는 대신, “cd”를 입력하고 한 칸 띈 후 “홍”을 입력하고 Tab 키를 누르면 “cd 홍길동”이 자동으로 완성됩니다. (파일이름 자동완성 기능)
이제 내가 있는 위치가 C:\홍길동 입니다. 이 디렉토리에는 무엇이 있는지 알아봅니다.
week1 이라는 이름의 디렉토리가 보입니다. Week1 바로 위의 점 두 개는 바로 위 디렉토리()를 의미하며 그 위의 점 하나는 현재 디렉토리(홍길동)를 의미합니다.
아래 그림과 같이 다시 week1으로 이동하여 그 곳에는 무엇이 있는지 알아봅니다.
조금 전에 작성한 HelloWorld.java 파일이 이 곳에 있습니다. 이 곳에서 파일을 컴파일하고 실행시키면 됩니다.
- 컴파일
아래와 같이 javac 명령을 사용하여 프로그램을 컴파일합니다. 이 때도 파일 이름의 첫 글자인 H만 입력한 후 Tab을 누르면 나머지 파일 이름이 자동으로 완성됩니다.
이제 컴파일에 의해서 무엇이 생겼는지 살펴봅니다.
컴파일 결과로 HelloWorld.class라는 이름의 파일이 생겼습니다. 이 파일 안에 컴퓨터가 이해할 수 있는 바이트코드가 들어 있습니다. HelloWorld.java에는 사람이 이해하는 소소코드가 들어 있고, HelloWorld.class 파일에는 컴퓨터가 이해하는 바아트코드가 들어 있습니다. 컴파일은 소스코드를 바이트코드로 번역하는 일입니다.
- 실행
아래와 같이 java 명령을 사용하여 프로그램을 실행합니다. Java 명령 다음에는 클래스 이름(HelloWorld)만 와야 합니다. HelloWorld.class라고 파일 이름을 적으면 안 됩니다.
- 명령어 창(명령 프롬프트)의 히스토리(history) 기능
위 화살표 키(↑)를 누르면 최근 실행한 명령어가 화면에 나타나므로 쉽게 이전에 실행했던 명령을 반복할 수 있습니다. 화면에 나타난 명령을 수정하여 실행시킬 수도 있습니다. 화살표 키를 여러 번 누르면 더 이전에 실행한 명령이 나타납니다. 아래 화살표 키도 사용할 수 있습니다.
3 간단한 프로그램 작성 및 실행
C:(자기이름)\week1 디렉토리에 아래 프로그램을 작성합니다.
P1
(1) 아래 문장을 실행하면 화면에 무엇이 나타날지 생각해보고 프로그램을 완성하고 실행하여 확인해보시오. 클래스 이름은 PrintTest1으로 지으시오.
System.out.print("My favorite number is");
System.out.println(1+2+3);
힌트1: 아래와 같은 클래스를 작성하고 네모 안에 실행할 문장들을 넣어줍니다.
작성한 클래스는 PrintTest1.java 라는 이름의 파일로 저장해야 합니다.
힌트2: 따옴표로 둘러 쌓인 문자열을 출력하면 문자열이 그대로 출력됩니다.
1+2+3은 문자열이 아닌 수식입니다. 이 경우에는 수식 계산이 먼저 이루어지고 그 결과 값이 출력됩니다.
위 프로그램의 출력 결과는 문자열과 숫자가 서로 붙어 있어 보양이 예쁘지 않습니다. 문자열과 숫자 사이에 한 칸 간격이 있도록 해보시오.
힌트: 공백도 하나의 글자입니다. 자판의 아래에 있는 공백문자 키를 누르면 이 공백문자가 입력됩니다.
(2) 또, 아래 두 코드 (A), (B)는 어떻게 다른지 프로그램을 실행하여 관찰하시오(print와 println의 차이). 클래스 이름은 PrintTest2로 지으시오. (PrintTest2.java에 아래 (A), (B) 코드를 차례로 입력하시오.)
(A)
System.out.print(1);
System.out.print(2);
System.out.print(3);
System.out.print(4);
(B)
System.out.println(1); // 아이엔이 아니고 엘엔입니다.
System.out.println(2);
System.out.println(3);
System.out.println(4);
(참고)
위 (A)와 (B) 사이에 아래 문장을 삽입하면
System.out.println();
새줄문자(new line)인 “\n”이 출력되어 한 줄 내려갑니다.
위 (A)와 (B) 사이에 위 문장을 삽입한 경우와 그렇지 않은 경우 출력을 비교해보시오.
(3) 아래 문장을 실행하면 화면에 무엇이 나타날지 생각해 보고 프로그램을 완성하고 실행하여 확인해보시오. 프로그램 코드와 실행결과에 있어서 위 (1)과 다른 점을 관찰하시오. 클래스 이름은 PrintTest3로 지으시오.
System.out.print("My favorite number is ");
System.out.println("1+2+3");
해설: 따옴표 안에 있는 것은 문자열입니다. 문자열은 문자열 그대로 출력됩니다. (덧셈이 되지 않습니다.)
P2
1+2+3+4+5를 계산하여 결과를 화면에 보여주는 프로그램을 작성하시오. 클래스 이름은 Sum으로 지으시오. 실행결과 출력은 아래와 같아야 합니다.
1 + 2 + 3 + 4 + 5 = 15
P3
아래와 같은 그림을 그리는 프로그램을 작성하시오. 클래스 이름은 PrintKangwon으로 지으시오.
****************
Kangwon
****************
P4
반지름이 r인 구의 부피는 4/3 π r3 입니다. 반지름이 5인 구의 부피를 구하는 프로그램을 작성하시오. 출력은 아래와 같아야 합니다.
클래스 이름은 SphereVolume으로 지으시오.
강의자료 마지막 부분을 참고하세요.
P5
아래 네 개의 연산 결과를 출력하는 프로그램을 작성하시오. 클래스 이름은 Types로 지으시오.
- $ 5/2 $
- $ 5.0/2.0 $
- $ 5/2.0 $
- $ 1.5+5 $
프로그램의 출력은 아래와 같아야 합니다.
5/2 = 2
5.0/2.0 = 2.5
5/2.0 = 2.5
1.5+5 = 6.5
(힌트)
위 출력의 첫 줄은 아래와 같은 문장에 의해 만들어집니다.
System.out.println("5/2=" + 5/2);
위 출력의 마지막 줄을 만들어내기 위한 코드를 아래와 같이 적으면 안 됩니다.
System.out.println("1.5+5=" + 1.5+5);
덧셈이 왼쪽부터 차례로 이루어지기 때문입니다. 즉, “1.5+5=” + 1.5이 먼저 되고, 그 이후에 5가 더해집니다.
P6
아래에 적힌 섭씨 온도들을 화씨 온도로 변환하여 출력하는 프로그램을 작성하시오. 클래스 이름은 CelciusToFarenheit로 지으시오.
섭씨 온도: $-40.0, -18.0, 10.0, 30.0, 40.0, 100.0$
참고: 섭씨 온도를 화씨 온도로 변환하는 식은 아래와 같습니다.
\[F = C \times 9.0 / 5.0 + 32.0\]코드에 위 숫자와 공식을 적을 때는 반드시 소수점을 적어주어야 합니다. 소수점을 적지 않으면 정수 타입으로 인식이 되고 그러면 계산 결과에서 소수점 아래가 사라집니다.
출력은 아래와 같아야 합니다.
C = -40.0 --> F = -40.0
C = -18.0 --> F = -0.3999999999999986
C = 10.0 --> F = 50.0
C = 30.0 --> F = 86.0
C = 40.0 --> F = 104.0
C = 100.0 --> F = 212.0
힌트:
소수를 저장하려면 아래와 같이 소수형 변수를 선언해야 합니다. 소수형 변수는 일반적으로 double 타입으로 선언합니다.
double c; // 섭씨 온도를 저장하기 위한 변수 선언 (c가 변수이름, 이 변수는 double 타입임, 즉 소수를 저장하는 메모리임)
double f; // 화씨 온도를 저장하기 위한 변수 선언
섭씨 -40.0도에 대한 화씨 변환값을 구하려면 아래와 같이 해 줍니다.
c = -40.0;
f = c * 9.0 / 5.0 + 32.0;
System.out.println("C = " + c + " --> " + "F = " + f);
다음으로 섭씨 -18.0도에 대한 변환값을 구하려면 아래와 같이 해 줍니다.
c = -18.00;
f = c * 9.0 / 5.0 + 32.0;
System.out.println("C = " + c + " --> " + "F = " + f);
변환값을 계산할 때마다 변수 c와 f를 새로 선언할 필요는 없습니다. 이미 선언된 c와 f 변수에 새 값을 적어주면 됩니다(엎어쓰기).
P7
Suppose the cover price(정가) of a book is $24.95, but bookstores get a 40% discount. Shipping costs $3 for the first copy and 75 cents for each additional copy. What is the total wholesale cost(총 가격) for 60 copies?
클래스 이름은 WholeSaleCost로 지으시오.
끝.
아래는 일부 문제의 모법답안입니다. 첫 실습이므로 일부 문제의 모범답안을 제공합니다.
P4 모범답안
출력:
구의 부피는 523.3333333333334입니다.
구의 부피는 523.33입니다.
P7 모범답안
출력:
총 구매 가격은 945.4499999999999입니다.
총 구매 가격은 945.45입니다.