1. 삼항연산
2. 문자열 연산
3. 연산 우선순위
1. 삼항연산
삼항연산은 이름 그대로 3개의 항으로 이루어진 연산입니다. 특정 조건식에 따라 조건이 참이냐 거짓이냐 따라 다르게 실행할 수 있는 연산으로, 뒤에서 배울 if문을 이용한 조건문과 동일한 역할을 하며, if문으로도 구현가능해 사용빈도가 아주 높진 않지만, 짧은 코드로 간단하게 조건식을 구현할 때 종종 사용되므로 최소한 소스를 보고 이해할 수 있는정도는 필요합니다.
위 그림은 삼항연산의 구조를 나타낸 그림입니다. 조건식이 참(true)이면 값1 또는 연산식이 실행되며, 그렇지 않으면(false) 값2가 실행됩니다.
public class OperationSample7 {
public static void main(String[] args) {
int score = 80;
String pass = score >= 60 ? "합격 " : "불합격";
System.out.println(pass);
}
}
실행결과
합격
이 예제는 score라는 변수에 80이 대입되어 있고, 삼항연산을 이용해 pass라는 문자열 변수에 score가 60이상이면 “합격”이라는 문자열을, 그렇지 않으면(60 미만이면) “불합격”이라는 문자열을 대입하고, 출력하는 코드입니다. score 변수의 값에 따라서 출력값은 다른값으로 출력됩니다. 만약 score 변수에 50을 대입하면 출력값은 “불합격”으로 출력됩니다.
2. 문자열 연산
지금까지 봤던 연산들은 숫자나 논리자료형으로 연산했는데 비해 문자열도 연산이 가능합니다. 문자열 연산은 + 연산자만 사용 가능하며, 문자열과 문자열을 연결해 주는 연산입니다. 다양한 상황에서 문자열 연산을 사용하는데 예제를 통해 확인해보겠습니다.
public class OperationSample8 {
public static void main(String[] args) {
String name = "홍길동";
System.out.println("안녕하세요 " + name + " 입니다.");
int height = 180;
System.out.println("저의 키는 " + height + "cm입니다.");
// String weight = 75.5; // 에러발생 (문자자료형 변수에는 숫자 대입 못함)
String weight = 75.5 + "";
System.out.println("제 몸무게는 " + weight + "kg입니다.");
int ageInt = 30; // 정수
String ageStr = "30"; // 문자열
}
}
실행결과
안녕하세요 홍길동 입니다.
저의 키는 180cm입니다.
제 몸무게는 75.5kg입니다.
출력결과를 보면 "안녕하세요 "와 "홍길동", "입니다." 세 문자열이 연결된 것을 알 수 있고, 아래 출력문은 "저의 키는 "과 180, "cm입니다." 세 개가 연결됐는데, 가운데 height라는 변수는 정수자료형인데도 연산이 가능한 것을 알 수 있습니다. 숫자는 문자열과 계산이나 연산이 불가능합니다. 그런데 정상적으로 출력이 된 것은 180이라는 값이 자동으로 문자열로 형변환 된 것이다라고 추측할 수 있습니다. 그 아래 결과도 보듯이 실수도 문자열과 +연산이 되면 문자열로 자동형변환이 일어난 것을 알 수 있습니다.
그리고, 처음 문자열을 배울 때 실수 하는 부분이 많은데, 숫자가 들어있다고해서 무조건 정수/실수 타입으로 생각하면 안되다. ageStr 변수에서 보듯이 같은 30이라는 숫자값이 대입되고 있지만, ageInt와 ageStr은 전혀 다른 변수입니다. ageInt는 정수타입 변수이며, ageStr은 문자열 변수입니다. 가장 큰 차이점은 문자열 변수는 지금까지 배운 연산들을 사용할 수 없다는 점입니다.
3. 연산자 우선순위
지금까지 자바에서 사용하는 연산에 대해서 알아보았는데, 마지막으로 연산에 우선순위에 대해 살펴보겠습니다.
연산자 | 우선 순위 |
( ) (괄호) | 1 |
증감 (++, --), 부호(+, -), 비트(~), 논리(!) | 2 |
산술 (*, /, %) | 3 |
쉬프트 (<<, >>, >>>) | 4 |
비교 (>, >=, <, <=) | 5 |
비교 (==, !=) | 6 |
비트논리 (&) | 7 |
비트논리 (^) | 8 |
비트논리 (|) | 10 |
논리 (&&) | 11 |
논리 (||) | 12 |
조건 (? :) |
13 |
대입 (+=, -=, *=, /=...) |
14 |
public class OperationSample9 {
public static void main(String[] args) {
int a = 5;
int b = 4;
int c = 3;
// * 연산이 먼저 실행됨
System.out.println(a + b * c);
// 괄호로 묶어 우선순위를 높여줌
System.out.println((a + b) * c);
}
}
실행결과
17
12
예제 보면 a + b * 3 연산식에서 + 연산보다 *연산이 우선순위가 높기 때문에 b * c가 먼저 곱하기 연산이 되고 a변수를 더한 것입니다. 우리는 사칙연산에서 우선순위 몇 개는 이해하고 있지만 위 표에서처럼 무수히 많은 연산들의 우선순위를 전부 외우기는 쉽지 않습니다. 그래서 코딩 중에 우선순위를 지정하고 싶은데, 우선순위 표가 기억이 안나면 찾아보거나 고민하지 말고, 괄호로 감싸주면 됩니다. 위 표를 다시 보면 가장 위에 있는 우선 순위가 가장 높은 것이 괄호 이고, 맨 밑에 우선순위가 가장 낮은 것 대입연산입니다. 이 우선순위표에서 이 두 개만은 반드시 기억합시다.