저번 코드를 보자
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1;
if (i==0) {
System.out.println("i변수의 값은 0입니다.");
} else {
System.out.println("i변수의 값은 0이 아닙니다.");
}
System.out.println("프로그램을 마칩니다.");
}
}
실행 결과
i변수의 값은 0이 아닙니다.
프로그램을 마칩니다.
정수형 변수i의 1을 저장하고 나서 i의 값에 따라 적당한 메시지를 화면에 표시하는 프로그램이다. 변수로 사용할 수 있는 단어는 다음과 같다.
- 숫자로 시작할 수 없다.
- 특수문자는 사용하지 않고, 달러표시($)와 언더스코어(_)만 허용되지만, 통상적으로 특수문자는 변수로 사용되지 않는다.
Java에서 이미 사용하는 아래 단어들은 특별한 의미를 가지고 있으므로 변수로 사용할수 없다.
boolean if interface class true
char else package volatile false
byte final switch while throws
float private case return native
void protected break throw implements
short public default try import
double static for catch synchronized
int new continue finally const
long this do transient enum
abstact super extands instanceof null
변수로 사용 가능한 단어 및 사용 불가능한 단어는 다음과 같다.
- int (x) 예약어라 안됨
- 5month (x) 숫자로 시작해서 안됨
- ?test (x) 특수문자를 사용하므로 안됨
- _myvariable (o) 사용이 가능하나 권장하지 않음
- myOwnVariable (o) 사용가능함
위의 제약 조건만 아니면 아무거나 변수로 쓸 수 있지만, 통상적으로 변수는 사람이 이해하기 쉽도록 일정한 룰을 가지고 쓰는 것을 권장한다.
이런 룰을 Naming Convention 이라고 한다.
변수명을 사용할 때에는 소문자로 시작하고, 복합단어는 첫 글자는 대문자로 한다.
코딩 시에 일반적으로 사용할 수 있는 변수명으로 아래와 같은 단어들이 사용된다.
String strFriendName = "홍길동";
String friendName = "홍길동";
int nBox = 5;
int numberOfBox = 5;
double heightOfChair = 3.2;
어려운 영어단어가 많이 나오면 사람이 이해할 수 있도록 친절히 영어 단어를 사용했구나 라고 생각하자!
반복문은 여러 번 컴퓨터에 반복해서 일을 시키는 것을 편하게 하기 위해서 만들어진 문법이다. while 반복문과 for 반복문이 있는데 while부터 배워보자.
코드 사용 예
//반복조건
while (num <5)
{
//반복영역
System.out.println("i like Java" + num);
num++;
}
반복조건이 참(true)일 경우, 반복영역의 내용을 계속해서 반복한다.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
while(i < 3 ) {
System.out.println("i는 3보다 작은 값입니다.");
}
}
}
위의 프로그램을 실행하면, 아래와 같이 무한정 반복을 한다.
실행 결과
i2는 3보다 작은 값입니다.
i2는 3보다 작은 값입니다.
i2는 3보다 작은 값입니다.
i2는 3보다 작은 값입니다.
....................
아래와 같이 조건을 주게 되면, 조건이 참일 때 까지만 반복한다.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0;
while(i <) {
System.out.println("i는 3보다 작은 값입니다.");
i = i +1;
}
}
}
실행 결과
i3는 3보다 작은 값입니다.
i3는 3보다 작은 값입니다.
i3는 3보다 작은 값입니다.
i 값이 반복문 사이에서 0에서부터 1씩 증가하기 때문에 총 3회 수행하게 된다. 즉, i=0,1,2 총 3회 경우까지 수행된다.
코드 사용 예
do
{
//반복영역
System.out.println("I like Java" + num);
num++;
//반복조건
} while (num <5);
do while 반복문은 조건확인이 뒤에 있기 때문에 최소 1번은 실행이 된다.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i4 = 0;
do {
System.out.println("i4는 3보다 작은 값입니다.");
i4 ++;
}while(i4 < 3);
}
}
위의 프로그램을 실행 하면 while반복문과 똑같이 출력된다.
실행 결과
i4는 3보다 작은 값입니다.
i4는 3보다 작은 값입니다.
i4는 3보다 작은 값입니다.
for 반복문이 가장 많이 사용된다.
코드 사용 예
① ② ③
for (int num=0; num<5; num++;)
{
System.out.println("..."); ④
}
for 반복문은 3가지 영역으로 나누어 진다.
- ①은 초기값을 지정하는 부분
- ②는 반복할지 말지 참/거짓을 판단하는 조건문 부분
- ③은 반복되는 부분을 실행하고 나서 수행되는 부분
즉, 수행은 ①(초기화) -> ②(반복여부 판단) -> ④반복문 실행 -> ③(사후처리 실행) -> ② -> ④ -> ③ -> ② -> _. 이런식으로 ②번 조건이 거짓(false)로 바뀔 때 까지 계속 반복된다.
while문과 for문은 서로 바꿔 사용이 가능하다.위의 for문을 while문으로 바꾸면 아래와 같다
예
int num=0; ①
while(num <5); ②
{
System.out.println("..."); ④
num++; ③
}
앞에서 작성한 while문을 for문으로 바꾸면 다음과 같다.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i5=0; i5<3; i5 = i5 +1) {
System.out.println("i5는 3보다 작은 값입니다.");
}
}
}
실행 결과
i5는 3보다 작은 값입니다.
i5는 3보다 작은 값입니다.
i5는 3보다 작은 값입니다.
이제까지 배운 반복문을 사용해 구구단을 출력해보자.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i6 = 2; i6 <= 9; i6++) {
for(int j = 1; j <= 9; j++) {
int result = i6 * j;
System.out.println(i6 + " * " + j + " = " + result);
}
}
실행 결과
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
.
.
.
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
이번에는 while문을 사용해 보자.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 2;
while(i<=9) {
int j = 1;
while(j<=9) {
int result = i * j;
System.out.println(i + "*" + j + "=" + result);
j = j +1;
}
i = i +1;
}
}
}
실행 결과는 for문이랑 똑같다.
앞의 구구단 출력 프로그램을 만들면서 정수형 변수를 i, j, result로 3가지 사용을 했다.
변수는 변수가 선언된(정의된) 부분에만 보이고, 정의된 부분을 벗어나면 사용할 수 없다.
저번 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//i가 사용되는 범위
int i = 2;
while(i<=9) {
//j가 사용되는 범위
int j = 1;
while(j<=9) {
//result가 사용되는 범위
int result = i * j;
System.out.println(i + "*" + j + "=" + result);
j = j +1;
}
i = i +1;
}
}
}
즉, 아래와 같이 사용하면 i값은 사용 가능하지만, j나 result의 값은 아래와 같이 바깥 영역에서는 사용할 수 없다.
작성 코드
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 2;
while(i<=9) {
int j = 1;
while(j<=9) {
int result = i * j;
System.out.println(i + "*" + j + "=" + result);
j = j +1;
}
i = i +1;
}
//j,result 을 바깥영역에 사용
System.out.println(i + "*" + j + "=" + result);
}
}
위와 같이 변수를 바깥영역에서 사용을 하게되면 j하고 result라는 값을 모르겠다면서 컴파일 에러가 나타난다
실행 결과
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
j cannot be resolved to a variable
result cannot be resolved to a variable
at Java/Study.Main2.main(Main2.java:19)
에러메시지를 보면 19번 행에 오류가 발생했다고 친절히 알려준다.
그러면, 이 문제를 해결하려면 어떻게 해야 할까?
아래와 같이 변수를 앞쪽에서 미리 선언(정의)하면 이런 문제가 해결된다.
작성 코드
//변수를 먼저 선언함
int i = 2;
int j = 0;
int result = 0 ;
while(i <= 9) {
j = 1;
while( j <= 9 ) {
result = i *j;
System.out.println(i + "*" + j + "=" + result);
j = j+1;
}
i = i +1;
}
System.out.println(i + "*" + j + "=" + result);
변경된 부분은 while 반복문을 먼저쓰지 않고 변수를 먼저 선언(정의)하고 그 다음에 반복문을 사용되었다. 즉, 아래와 같이 처리하였다.
- j = 1;
- result = i * j;
이번 장에서는 변수와 변수의 스코프 그리고, 반복문에 대해서 살펴보았다. 구구단쯤은 이제 우리가 배운 반복문으로 쉽게 처리가 가능해졌다. 다음 장에서는 반복문을 제대로 사용해보기 위해 배열을 배워보자.