Java의 첫 줄과 출력
딱지 지도 — 지금 여기
- 다섯 줄에서 클래스 틀·main·중괄호·문장 끝
;의 역할을 구별해요. println과print로 줄바꿈과 빈칸을 정확하게 만들어요.public class뒤의 이름과 파일 이름이 같아야 한다는 것을 읽어요.
지난 강에서 오늘로
0강에서 다섯 줄을 따라 쳐서 안녕하세요를 화면에 띄웠어요. Run을 누르면 컴파일(번역) → JVM 실행이 이어진다는 것도 봤지요. 기억나시죠?
오늘은 그 다섯 줄을 조각으로 나눠 읽어요. 다섯 줄 중 네 줄은 매번 그대로 두는 틀이고, 우리가 바꾸는 곳은 가운데 한 줄뿐이라는 걸 알게 될 거예요. 그다음 출력 도구 두 개, println과 print의 차이를 결과 칸 하나하나로 확인해요.
- 다섯 줄에서 클래스 틀·main·중괄호·문장 끝
;의 역할을 구별해요. println과print로 줄바꿈과 빈칸을 정확하게 만들어요.public class뒤의 이름과 파일 이름이 같아야 한다는 것을 읽어요.
오늘의 도착점: 결과 창에 나올 글자를 칸 하나, 줄바꿈 하나까지 미리 적고, 실행해서 똑같이 나오는지 확인해요.
새 말 두 개만 먼저 풀어 둘게요.
- 예약어는 Java가 미리 뜻을 정해 둔 낱말이에요.
class,public,static,void같은 것이에요. 우리가 다른 뜻으로 쓸 수 없어요.main,String,System은 예약어가 아니라 이름이에요. - 문장은 컴퓨터에게 시키는 명령 하나예요. 오늘의 출력문 끝에는
;를 붙여요. 나중에 배울 if·for처럼 중괄호로 묶는 문장까지 모두;로 끝내는 것은 아니에요.
Java 프로그램을 건물 하나라고 생각해 볼게요.
| 건물에서 | Java에서 | 하는 일 |
|---|---|---|
| 건물 이름이 붙은 울타리 | public class Main { … } | 코드를 담는 바깥 틀. 이름은 Main |
| 손님이 들어오는 정문 | public static void main(String[] args) { … } | 프로그램이 시작하는 곳 |
| 정문 안 안내 데스크의 일 순서 | 중괄호 안의 문장들 | 위에서 아래로 하나씩 해요 |
| 안내 전광판 | 결과 영역 | 출력한 글자가 나타나요 |
전광판에는 깜박이는 커서가 있어요. 커서는 ‘다음 글자가 찍힐 자리’예요.
println은 글을 쓰고 나서 커서를 다음 줄 맨 앞으로 옮겨요. ‘쓰고 줄 바꿈’이에요.print는 글을 쓰고 커서를 그 자리에 둬요. 다음 글은 바로 옆에 이어서 써져요.
이름의 ln은 line(줄)에서 왔어요. println을 ‘프린트 라인’이라고 읽으면 ‘줄 단위로 쓴다’는 뜻이 떠올라요.
비유의 한계: 실제 건물에는 문이 여러 개 있지만, 오늘 우리 프로그램의 시작점은 main 하나예요.
그림처럼 다섯 줄은 상자 두 겹이에요. 바깥 상자는 클래스, 안쪽 상자는 main이에요. 우리가 바꾸는 것은 노란 줄, 즉 main 안쪽의 문장이에요. 나머지 네 줄은 앞으로 오랫동안 그대로 써요.
안쪽 상자의 머리 줄 public static void main(String[] args)는 낱말이 많아서 겁이 나지요? 바로 아래에서 한 조각씩 나눠 볼게요.
| 낱말 | 무슨 일을 하나요(한 줄) | 자세히는 |
|---|---|---|
public | 누구나 부를 수 있게 문을 열어 둬요. 프로그램을 시작하는 JVM도 밖에서 부르니까 열려 있어야 해요 | 13강 예제 5 끝 |
static | 객체를 만들지 않고 바로 부를 수 있어요. 시작할 때는 아직 Main 객체를 만들지 않았거든요 | 7강에서 붙여 쓰고, 12강에서 까닭 |
void | 일을 마치고 돌려주는 값이 없어요 | 7강 |
main | 시작점의 이름이에요. JVM이 이 이름을 찾아 첫 줄부터 실행해요 | 7강 |
( | 이 일이 받을 것을 적는 자리가 시작돼요 | 7강 |
String | 받을 것의 종류: 글자 줄 | 2강·11강 |
[] | 그 글자 줄을 여러 개 담는 배열 표시 | 6강 |
args | 받은 것을 담는 칸의 이름. 관례로 이렇게 써요 | 6강 |
) | 받을 것 자리가 끝나요 | 7강 |
한 문장으로 이으면 ‘누구나 부를 수 있고(public), 객체 없이 바로 부를 수 있고(static), 돌려주는 값은 없는(void), 시작점(main)이며, 글자 줄 여러 개(String[])를 args라는 칸으로 받아요’예요.
지금은 이 표를 외워 두면 충분해요. 직접 바꿀 일은 없고, 철자 그대로 두는 틀이에요. 오른쪽 칸의 강에 가면 그 낱말을 다시 불러와 자세히 풀어요.
0강의 코드를 다시 봐요. 이번에는 줄마다 역할을 붙여 읽어요.
public class Main { public static void main(String[] args) { System.out.println("안녕하세요"); }}
안녕하세요
| 줄 | 코드 | 역할 |
|---|---|---|
| 1 | public class Main { | 클래스 틀 시작. 이름은 Main |
| 2 | public static void main(String[] args) { | 시작점 main 시작 |
| 3 | System.out.println("안녕하세요"); | 실제로 일하는 문장 |
| 4 | } | main 끝 |
| 5 | } | 클래스 끝 |
넷째 줄과 다섯째 줄은 둘 다 }예요. 어느 것이 무엇을 닫는지는 들여쓰기를 보면 알아요. 넷째 줄 }는 둘째 줄과 같은 깊이에서 시작하니까 main을 닫고, 다섯째 줄 }는 첫째 줄과 같은 깊이니까 클래스를 닫아요.
들여쓰기(줄 앞의 빈칸)는 사람이 읽기 좋게 하려고 넣어요. Java는 들여쓰기가 틀려도 실행은 해요. 그래도 짝을 찾으려면 꼭 맞춰 써요.
한 줄 정리: 다섯 줄 중 네 줄은 틀이고, main 안의 문장이 실제로 일해요.
예제 2 · println 세 번 정프
main 안에 문장을 세 개 넣어 볼게요. 틀 네 줄은 그대로예요.
public class Main { public static void main(String[] args) { System.out.println("왕"); System.out.println("딱"); System.out.println("지"); }}
실행 결과를 예상해 보세요. 한 줄일까요, 세 줄일까요?
왕 딱 지
세 줄이에요. println은 쓰고 나서 줄을 바꾸니까요. 문장은 위에서 아래로 한 번씩 실행돼요. 순서를 바꿔 쓰면 화면 순서도 바뀌어요.
한 줄 정리: println은 ‘쓰고 줄 바꿈’, 문장은 위에서 아래로 실행돼요.
예제 3 · print와 println을 섞어요 정프
이번에는 print를 섞어요. 결과 칸이 어떻게 채워질지 칸 단위로 생각해 보세요.
public class Main { public static void main(String[] args) { System.out.print("A"); System.out.print("B"); System.out.println("C"); System.out.print("D"); }}
ABC D
전광판 커서를 따라가 볼게요.
| 실행한 문장 | 화면에 찍힌 것 | 커서 위치 |
|---|---|---|
print("A") | A | A 바로 뒤 |
print("B") | AB | B 바로 뒤 |
println("C") | ABC 그리고 줄바꿈 | 둘째 줄 맨 앞 |
print("D") | 둘째 줄에 D | D 바로 뒤 |
println("C")의 줄바꿈은 C를 쓴 다음에 일어나요. 줄바꿈이 C 앞에 생기는 게 아니에요.
한 줄 정리: print는 커서를 그 자리에 두고, println은 쓰고 나서 다음 줄로 보내요.
예제 4 · 빈칸도 글자예요
화면의 빈칸(띄어쓰기)은 저절로 생기지 않아요. 따옴표 안에 빈칸을 넣어야 생겨요.
public class Main { public static void main(String[] args) { System.out.print("왕두목"); System.out.println("샘"); System.out.print("왕두목 "); System.out.println("샘"); System.out.println(); System.out.println("끝"); }}
왕두목샘 왕두목 샘 끝
- 첫 줄은
왕두목뒤에 빈칸이 없어서왕두목샘으로 붙었어요. - 둘째 줄은
"왕두목 "처럼 따옴표 안 끝에 빈칸을 넣어서 띄어졌어요. System.out.println();처럼 괄호 안이 비어 있으면 아무 글자 없이 줄만 바꿔요. 그래서 빈 줄이 하나 생겼어요.
한 줄 정리: 빈칸은 따옴표 안에 내가 넣은 만큼만 나와요. println()은 글자 없이 줄만 바꿔요. 이번처럼 이미 새 줄 맨 앞에 있을 때 쓰면 빈 줄 하나가 생겨요.
예제 5 · 따옴표가 있을 때와 없을 때
괄호 안에 따옴표 없이 숫자 계산을 넣으면 어떻게 될까요?
public class Main { public static void main(String[] args) { System.out.println("1 + 2"); System.out.println(1 + 2); }}
1 + 2 3
따옴표 안의 1 + 2는 글자 그대로 나와요. 따옴표가 없는 1 + 2는 Java가 계산한 값 3이 나와요. 따옴표는 ‘계산하지 말고 글자 그대로’라는 표시예요. 계산은 3강에서 더 자세히 해요.
그럼 글자에 따옴표 없이 안녕하세요만 쓰면요? Java는 그것을 글자가 아니라 무언가의 이름으로 읽어요. 그런 이름은 없으니 오류가 나요.
public class Main { public static void main(String[] args) { System.out.println(안녕하세요); }}
Main.java:3: error: cannot find symbol
System.out.println(안녕하세요);
^
symbol: variable 안녕하세요
location: class Main
1 errorcannot find symbol은 ‘그런 이름을 찾을 수 없어요’라는 뜻이에요. Java가 안녕하세요를 변수 이름(2강에서 배워요)으로 읽었다는 것도 symbol: variable에서 보여요. 글자를 보여 주려면 큰따옴표로 감싸요.
한 줄 정리: 큰따옴표 안은 글자 그대로, 따옴표 밖은 Java가 계산하거나 이름으로 읽어요.
예제 6 · 클래스 이름과 파일 이름
public class 뒤의 이름은 파일 이름과 같아야 해요. 파일이 Main.java라면 클래스 이름도 Main이에요. 실행기의 파일 이름이 Main.java인데 클래스 이름을 Hello로 바꾸면 이렇게 돼요.
public class Hello { public static void main(String[] args) { System.out.println("안녕하세요"); }}
Main.java:1: error: class Hello is public, should be declared in a file named Hello.java
public class Hello {
^
1 error메시지를 풀면 ‘Hello가 public이니까 Hello.java라는 파일에 있어야 해요’예요. 이 책의 모든 예제는 파일 이름 Main.java, 클래스 이름 Main으로 맞춰요. 실행기 화면의 파일 이름 칸이 Main.java인지 한 번 확인해 두면 안심이에요.
Main의 M은 대문자예요. main(시작점)은 소문자예요. 둘은 다른 이름이에요.
아래 코드의 결과를 칸 단위로 적어요. 실행하기 전에 먼저 적고, 실행해서 대조해요.
public class Main { public static void main(String[] args) { System.out.print("Ja"); System.out.println("va"); System.out.print("1"); System.out.print(" "); System.out.println("강"); }}
| 차례 | 실행한 문장 | 화면 줄 1 | 화면 줄 2 | 줄바꿈? |
|---|---|---|---|---|
| 1 | print("Ja") | Ja | 아니요 | |
| 2 | println("va") | Java | 예 | |
| 3 | print("1") | Java | ||
| 4 | print(" ") | Java | ||
| 5 | println("강") | Java |
Java 1 강
대조 답: 3행 화면 줄 2는 1, 줄바꿈 아니요. 4행은 1 (1 뒤 빈칸), 아니요. 5행은 1 강, 예. 빈칸만 따로 출력해도 빈칸 한 칸이 생겨요.
빈칸 틀은 종이 연습이에요. 실행기에는 완성한 코드만 넣어요.
연습 1. 틀 네 줄을 채워요.
public [① ] Main {
public static void [② ](String[] args) {
System.out.println("연습");
[③ ]
}①: ②: ③:
연습 2. 화면에 아래처럼 나오게 main 안의 문장만 써요. print를 두 번, println을 한 번 써요.
왕두목 샘
연습 3. System.out.println("A"); 와 System.out.print("A");의 차이를 한 문장으로 써요.
스스로 대조하는 답
연습 1은 ① class ② main ③ }예요. 연습 2는 여러 답이 있어요. 예를 들면 아래처럼 써요.
public class Main { public static void main(String[] args) { System.out.print("왕두목"); System.out.print(" "); System.out.println("샘"); }}
왕두목 샘
연습 3은 ‘println은 A를 쓰고 줄을 바꾸고, print는 A를 쓰고 줄을 바꾸지 않아요’예요.
학습용 창작 문항이에요.
문제. 다음 Java 프로그램의 실행 결과를 쓰시오.
public class Main { public static void main(String[] args) { System.out.print("K"); System.out.println("O"); System.out.print("R"); System.out.print("E"); System.out.println("A"); }}
내 답:
정답먼저 풀고 눌러서 펼쳐 보세요
KO REA
해설: println("O")에서 O를 쓴 다음에 줄이 바뀌어요. 그래서 첫 줄은 KO예요. 둘째 줄은 print 두 번과 println 한 번이 이어져서 REA가 돼요. KOREA를 한 줄로 쓰면 오답이에요. 시험의 출력 문제는 줄바꿈 위치까지 채점해요.
딱지 떼기
도장
- 다섯 줄에서 클래스 틀, main, 실제로 일하는 문장을 구별할 수 있어요.
- 닫는 중괄호 두 개가 각각 무엇을 닫는지 들여쓰기로 찾을 수 있어요.
println과print의 차이를 ‘다 쓰고 줄을 바꾸느냐’로 말할 수 있어요.- 빈칸은 따옴표 안에 넣어야 나온다는 것을 알아요.
public class이름과 파일 이름이 같아야 한다는 것을 알아요.
오늘 내가 뗀 딱지: 다시 볼 곳: