소개
이번 랩에서는 Java 의 기본 데이터 타입과 연산자에 대해 배웠습니다. 이번 랩에서는 절차 지향 프로그래밍을 작성하는 방법을 배우기 시작할 것입니다. 주요 아이디어는 제어 구조의 패러다임, 즉 조건식을 사용하는 것입니다.
이번 랩에서는 Java 의 기본 데이터 타입과 연산자에 대해 배웠습니다. 이번 랩에서는 절차 지향 프로그래밍을 작성하는 방법을 배우기 시작할 것입니다. 주요 아이디어는 제어 구조의 패러다임, 즉 조건식을 사용하는 것입니다.
유용한 프로그램을 작성하려면 거의 항상 조건을 확인하고 그에 따라 프로그램의 동작을 변경해야 합니다. 조건문은 이러한 기능을 제공합니다.
가장 간단한 형태는 if-else 문입니다.
예시:
/home/labex/project/ifelseTest.java 파일에 다음 코드를 작성합니다.
public class ifelseTest{
public static void main(String[] args){
int x = 1;
if (x > 0) {
System.out.println("x is positive");
}
else{
System.out.println("x is non-positive");
}
}
}
출력:
터미널에서 다음 명령을 사용하여 ifelseTest.java 파일을 실행합니다.
javac /home/labex/project/ifelseTest.java
java ifelseTest
출력을 확인합니다.
x is positive
괄호 안의 표현식을 **조건 (condition)**이라고 합니다. 참이면 if 다음에 오는 중괄호 안의 문장이 실행됩니다. 조건이 참이 아니면 else 다음에 오는 중괄호 안의 문장이 실행됩니다. else가 없고 if 조건이 거짓이면, if-else 다음에 오는 문장 (있는 경우) 이 실행됩니다. 조건에는 비교 연산자 (comparison operators), 즉 관계 연산자 (relational operators) 중 하나가 포함될 수 있습니다.
예시:
if (x == y){ } // x equals y
if (x != y){ } // x is not equal to y
if (x > y) { } // x is greater than y
if (x < y) { } // x is less than y
if (x >= y){ } // x is greater than or equal to y
if (x <= y){ } // x is less than or equal to y
이러한 연산은 아마 익숙하겠지만, Java 에서 사용하는 구문은 =, ≠ 및 ≤와 같은 수학 기호와 약간 다릅니다. 흔한 오류는 이중 등호 (==) 대신 단일 등호 (=) 를 사용하는 것입니다. =는 할당 연산자이고 ==는 비교 연산자임을 기억하십시오. 또한 =< 또는 =>는 존재하지 않습니다.
조건 연산자의 양쪽은 동일한 유형이어야 합니다. int 는 int 와, double 은 double 과만 비교할 수 있습니다. 연산자 == 및 !=는 String과 함께 작동하지만, 예상대로 작동하지 않습니다. 그리고 다른 관계 연산자는 문자열에 전혀 적용되지 않습니다.
예시: x를 2로 나눈 나머지가 0이면 x가 짝수임을 알고 이 코드는 그에 대한 메시지를 출력합니다. 조건이 거짓이면 두 번째 print 문이 실행됩니다. 조건은 참 또는 거짓이어야 하므로 정확히 하나의 대안이 실행됩니다. 숫자의 패리티 (짝수 또는 홀수) 를 자주 확인해야 한다고 생각되면 다음과 같이 이 코드를 메서드로 "래핑"할 수 있습니다.
예시:
/home/labex/project/conditionTest.java 파일에 다음 코드를 작성합니다.
public class conditionTest
{
public static void printParity(int x) {
if (x%2 == 0) {
System.out.println(x + " is even");
} else {
System.out.println(x + " is odd");
}
}
public static void main(String[] args){
printParity(17);
printParity(18);
}
}
출력:
터미널에서 다음 명령을 사용하여 conditionTest.java 파일을 실행합니다.
javac /home/labex/project/conditionTest.java
java conditionTest
출력을 확인합니다.
17 is odd
18 is even
이제 제공하려는 모든 정수에 대해 적절한 메시지를 출력하는 printParity라는 메서드가 있습니다. main에서 이 메서드를 호출합니다. 메서드를 호출할 때 제공하는 인수의 유형을 선언할 필요가 없다는 것을 항상 기억하십시오. Java 는 해당 유형을 파악할 수 있습니다. printParity(int 3)과 같은 것을 작성하려는 유혹을 참아야 합니다. 또한, 다른 조건문 안에 하나의 조건문을 중첩할 수도 있습니다.
예시:
/home/labex/project/nestedConditionTest.java 파일에 다음 코드를 작성합니다.
public class nestedConditionTest{
public static void main(String[] args){
int x = 0; // you can try x = 1, x = -1
if (x == 0) {
System.out.println("x is zero");
}
else {
if (x > 0) {
System.out.println("x is positive");
}
else {
System.out.println("x is negative");
}
}
}
}
출력:
터미널에서 다음 명령을 사용하여 nestedConditionTest.java 파일을 실행합니다.
javac /home/labex/project/nestedConditionTest.java
java nestedConditionTest
출력을 확인합니다.
x is zero
이제 두 개의 분기를 포함하는 외부 조건문이 있습니다. 첫 번째 분기에는 간단한 print 문이 포함되어 있지만, 두 번째 분기에는 자체적으로 두 개의 분기가 있는 다른 조건문이 포함되어 있습니다. 두 분기 모두 print 문이지만, 조건문일 수도 있었습니다.
들여쓰기는 구조를 보기 좋고 이해하기 쉽게 만들지만, 그럼에도 불구하고 중첩된 조건문은 매우 빠르게 읽기 어려워집니다. 가능하면 피하십시오. 반면에 이러한 종류의 중첩 구조는 일반적이므로 다시 보게 될 것입니다. 그러니 익숙해지는 것이 좋습니다.
Switch-case 문은 또 다른 조건식입니다. switch-case 문의 구문은 다음과 같습니다.
예시:
// value type can be byte, short, int, char, String, but long type is not correct.
switch (variable or an value expression)
{
// case value must be a constant value
case value1:
// code
;
case value2:
// code
;
default:
// code
;
}
예시:
/home/labex/project/switchTest.java 파일에 다음 코드를 작성합니다.
public class switchTest
{
public static void main(String[] args){
// you can change i = 2, then try again
int i = 2;
switch(i)
{
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
// if no break expression, sometimes you'll get a confusing answer.
// you can try deleting the break expression and see what happens.
break;
// if none of the above matches, execute the default statements
default:
System.out.println("default");
break;
}
}
}
출력:
터미널에서 다음 명령을 사용하여 switchTest.java 파일을 실행합니다.
javac /home/labex/project/switchTest.java
java switchTest
출력을 확인합니다.
2
이번 랩에서는 조건식과 두 가지 스타일의 조건문을 배웠습니다. 이는 프로그래밍에 매우 유용합니다. 다음 랩에서는 또 다른 제어 구조인 재귀 (recursion) 와 루프 (loops) 에 대해 배우겠습니다.