표현식

표현식 은 언어의 구문에 따라 하나의 값으로 평가되는 변수, 연산자, 메서드 호출로 구성된 구문입니다. 아래 코드에서 표현식의 예시를 이미 보셨을 것입니다:

int cadence = 0;
anArray[0] = 100;
System.out.println("Element 1 at index 0: " + anArray[0]);
 
int result = 1 + 2; // result is now 3
if (value1 == value2)
    System.out.println("value1 == value2");

표현식에서 반환되는 값의 데이터 타입은 표현식에 사용된 요소에 따라 달라집니다. 표현식 cadence = 0은 대입 연산자가 왼쪽 피연산자와 동일한 데이터 타입의 값을 반환하기 때문에 int를 반환하며, 이 경우 cadenceint입니다. 다른 표현식에서 볼 수 있듯이 표현식은 boolean 또는 String과 같은 다른 타입의 값도 반환할 수 있습니다.

Java 프로그래밍 언어에서는 표현식의 한 부분에 필요한 데이터 타입이 다른 부분의 데이터 타입과 일치하기만 하면 다양한 작은 표현식으로 복합 표현식을 구성할 수 있습니다. 다음은 복합 표현식의 예입니다:

1 * 2 * 3

이 특정 예에서는 곱셈의 결과가 순서와 무관하므로 곱셈을 어떤 순서로 적용하든 결과는 항상 동일하므로 식이 평가되는 순서는 중요하지 않습니다. 그러나 모든 표현식에 해당되는 것은 아닙니다. 예를 들어 다음 표현식은 덧셈 연산을 먼저 수행하느냐 나누기 연산을 먼저 수행하느냐에 따라 결과가 달라집니다:

x + y / 100    // ambiguous

균형 괄호인 ()를 사용하여 표현식이 어떻게 평가될지 정확히 지정할 수 있습니다. 예를 들어, 앞의 표현식을 모호하지 않게 만들려면 다음과 같이 작성할 수 있습니다:

(x + y) / 100  // unambiguous, recommended

수행될 연산 순서를 명시적으로 지정하지 않으면 표현식 내에서 사용 중인 연산자에 할당된 우선순위에 따라 순서가 결정됩니다. 우선 순위가 더 높은 연산자가 먼저 평가됩니다. 예를 들어 나누기 연산자는 더하기 연산자보다 우선 순위가 높습니다. 따라서 다음 두 문은 동등합니다:

x + y / 100   // ambiguous
 
x + (y / 100) // unambiguous, recommended

복합 표현식을 작성할 때는 어떤 연산자를 먼저 평가해야 하는지 괄호로 명확히 표시하세요. 이렇게 하면 코드를 더 쉽게 읽고 유지 관리할 수 있습니다.

 

부동 소수점 연산

부동 소수점 산술은 일반적인 연산이 예기치 않게 작동할 수 있는 특별한 세계입니다. 다음 코드를 살펴보세요.

double d1 = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1;
System.out.println("d1 == 1 ? " + (d1 == 1.0));

아마도 true을 출력할 것으로 예상할 수 있습니다. 부동 소수점 덧셈이 수행되고 반올림되는 방식으로 인해 false를 출력합니다.

부동소수점 연산이 Java에서 어떻게 구현되는지 설명하는 것은 이 튜토리얼의 범위를 벗어납니다. 이 주제에 대해 더 자세히 알아보려면 다음 동영상을 시청하세요.

 

명령문

명령문은 자연어의 문장과 거의 동일합니다. 명령문은 완전한 실행 단위를 형성합니다. 다음 타입의 표현식은 세미콜론(;)으로 표현식을 종결하여 명령문으로 만들 수 있습니다.

  • 할당 표현식
  • ++ 또는 --의 모든 사용
  • 메서드 호출
  • 객체 생성 표현식
  • 이러한 문장을 표현식 명령문이라고 합니다. 다음은 표현식 명령문의 몇 가지 예입니다.
// assignment statement
aValue = 8933.234;
 
// increment statement
aValue++;
 
// method invocation statement
System.out.println("Hello World!");
 
// object creation statement
Bicycle myBike = new Bicycle();

표현식 명령문 외에도 선언문과 제어 흐름 명령문이라는 두 가지 종류의 명령문이 있습니다. 선언문은 변수를 선언합니다. 선언문의 예제는 이미 많이 보셨을 것입니다:

// declaration statement
double aValue = 8933.234;

마지막으로 제어 흐름 문은 명령문이 실행되는 순서를 조절합니다. 제어 흐름 문에 대해서는 다음 섹션인 제어 흐름 문에서 배우게 됩니다.

 

블록

블록은 중괄호 사이에 0개 이상의 명령문을 묶은 그룹으로, 단일 명령문이 허용되는 곳이면 어디에서나 사용할 수 있습니다. 다음 예제인 BlockDemo는 블록의 사용법을 보여줍니다:

class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // begin block 1
               System.out.println("Condition is true.");
          } // end block one
          else { // begin block 2
               System.out.println("Condition is false.");
          } // end block 2
     }
}