자바 연산자, 조건문, 반복문 간단 명령어 정리
산술 연산자
산술 연산자는 숫자를 계산하는 데 사용되며, 기본적인 수학 연산을 수행합니다. 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%) 연산자가 있습니다. int형끼리 계산하면 결과도 int형이 되므로, 소수점 이하를 포함하려면 형변환이 필요합니다. (ex. double)
예제:
- 5 / 2 = 2 (int형 나눗셈)
- 5 % 2 = 1 (나머지 연산)
주의: 숫자를 0으로 나누는 것은 허용되지 않으며, 예외가 발생합니다.
문자열 연산자
자바에서는 문자열에 + 연산자를 사용하여 문자열을 연결할 수 있습니다. 문자열과 다른 타입의 데이터를 더하면, 자바는 자동으로 해당 데이터를 문자열로 변환한 후 연결합니다.
증감 연산자
증감 연산자(++, --)는 변수의 값을 1만큼 증가시키거나 감소시키는 연산자입니다.
전위 연산자(++a, --a)는 변수의 값을 먼저 증가/감소시킨 후 연산을 수행하고,
후위 연산자(a++, a--)는 연산을 수행한 후 변수의 값을 증가/감소시킵니다.
예제:
- int a = 1; int b = ++a; (a=2, b=2)
- int a = 1; int b = a++; (a=2, b=1)
비교 연산자
비교 연산자는 두 값을 비교하여 참(true) 또는 거짓(false)을 반환합니다. 동등성(==), 불일치(!=), 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=) 연산자가 있습니다. 문자열 비교에는 .equals() 메서드를 사용해야 합니다.
예제:
- 2 == 3 (false)
- "hello".equals("hello") (true)
주의: 문자열 비교 시 == 대신 .equals()를 사용해야 합니다.
논리 연산자
논리 연산자는 boolean 값에 대해 논리 연산을 수행합니다. AND(&&), OR(||), NOT(!) 연산자가 있습니다. AND는 두 피연산자가 모두 참일 때만 참을 반환하고, OR는 두 피연산자 중 하나라도 참이면 참을 반환하며, NOT은 피연산자의 논리적 부정을 반환합니다.
예제:
- true && false (false)
- true || false (true)
- !true (false)
대입 연산자
대입 연산자(=)는 변수에 값을 할당하는 데 사용됩니다. 축약 대입 연산자(+=, -=, *=, /=, %=)는 연산과 대입을 한 번에 수행합니다.
예제:
- int a = 5; (a에 5 할당)
- a += 3; (a = a + 3과 동일)
문제 : 짝수의 합과 홀수의 합 구하기
문제 설명:
1부터 100까지의 숫자 중에서 짝수의 합과 홀수의 합을 구하는 프로그램을 작성하시오.
1~4 에 각각 들어가야하는 코드를 작성해주세요!
package variable;
public class evenodd{
public static void main(String[] args) {
int evenSum = 0;
int oddSum = 0;
for (int i =1; i <=100; i++) { // 반복문 작성
if (i % 2 == 0) { // 짝수일 경우
evenSum += i; // 짝수 합산 대입연산자 이용
} else {
oddSum += i; // 홀수 합산 대입연산자 이용
}
}
System.out.println("짝수의 합: " + evenSum);
System.out.println("홀수의 합: " + oddSum);
}
}
정답!
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
evenSum += i;
} else {
oddSum += i;
}
}
왜 if(i % 2 = 0) 이 아니라 ==을 사용해야할까?
1. =는 대입 연산자이며 왼쪽 변수에 오른쪽 값을 할당할 때 사용된다.
2. ==는 비교 연산자로, 두 값이 같은지 비교할 때 사용된다.
3. 우리는 값을 할당해주는 것이 아닌 i를 2로 나누었을 때 나머지가 0일 경우에 evenSum에 i를
더해줘야하기 때문에 비교 연산자를 사용해야한다.
번외
package variable;
public class VarEx3{
public static void main(String[] args) {
System.out.println("A" + 3); //A3
char a = 'A';
//Char형이 글자 한개를 담는 변수이기도 하지만 정수를 받는 형태이기도 함
System.out.println(a + 3); //68 char a = 'A';에서 'A'는 실제로 아스키 코드 값으로
//65를 가지고 있습니다.
System.out.println(a + "A"); //AA 자바에서는 문자열 연산에서 char 타입을 문자열로
// 자동으로 변환하여 처리
System.out.println(a + a); //130
}
}
<조건문>
조건문에는 if 문, switch 문이 있다. 둘다 특정 조건에 따라서 다른 코드를 실행하는 것이라 생각하면 된다.
if문 - if, else
if 문은 특정 조건이 참인지 확인하고, 그 조건이 참( true )일 경우 특정 코드 블록을 실행한다.
if (condition) {
// 조건이 참일 때 실행되는 코드
}
코드 블록: {} (중괄호) 사이에 있는 코드
else 문은 if 문에서 만족하는 조건이 없을 때 실행하는 코드를 제공한다.
if문 - else if
else if 문은 앞선 if 문의 조건이 거짓일 때 다음 조건을 검사한다. 만약 앞선 if 문이 참이라면 else if 를 실행 하지 않는다.
if (condition1) {
// 조건1이 참일 때 실행되는 코드
} else if (condition2) {
// 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else if (condition3) {
// 조건2이 거짓이고, 조건3이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
쉽게 이야기해서 이렇게 전체 if 문을 하나로 묶는다고 보면 된다. 이렇게 하면 특정 조건이 만족하면 해당 코드를 실행하고 if 문 전체를 빠져나온다. 특정 조건을 만족하지 않으면 다음 조건을 검사한다. 여기서 핵심은 순서대로 맞는 조건을 찾아보고, 맞는 조건이 있으면 딱 1개만 실행이 되는 것이다.
참고로 else 는 생략할 수 있다.
if문 - if문과 else if문
if 문에 else if 를 함께 사용하는 것은 서로 연관된 조건일 때 사용한다. 그런데 서로 관련이 없는 독립 조건이면 else if 를 사용하지 않고 if 문을 각각 따로 사용해야 한다.
// 예시1. if-else 사용: 서로 연관된 조건이어서, 하나로 묶을 때
if (condition1) {
// 작업1 수행
} else if (condition2) {
// 작업2 수행
}
// 예시2. if 각각 사용: 독립 조건일 때
if (condition1) {
// 작업1 수행
}
if (condition2) {
// 작업2 수행
}
예시 1은 작업1, 작업2 둘 중 하나만 수행된다. 그런데 예시 2는 조건만 맞다면 둘다 수행될 수 있다.
if 문에 여러 조건이 있다고 항상 if-else 로 묶어서 사용할 수 있는 것은 아니다. 조건이 서로 영향을 주지 않고 각각 수행해야 하는 경우에는 else if 문을 사용하면 안되고, 대신에 여러 if 문을 분리해서 사용해야 한다. 여러 독립적인 조건을 검사해야 하는 경우가 그런 상황의 대표적인 예시이다. 즉, 각 조건이 다른 조건과 연관되지 않고, 각각의 조건에 대해 별도의 작업을 수행해야 할 때 이런 상황이 발생한다.
switch문
switch 문은 앞서 배운 if 문을 조금 더 편리하게 사용할 수 있는 기능이다. 참고로 if 문은 비교 연산자를 사용할 수 있지만, switch 문은 단순히 값이 같은지만 비교할 수 있다.
switch 문은 조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
- 조건식의 결과 값이 어떤 case 의 값과 일치하면 해당 case 의 코드를 실행한다.
- break 문은 현재 실행 중인 코드를 끝내고 switch 문을 빠져나가게 하는 역할을 한다.
- 만약 break 문이 없으면, 일치하는 case 이후의 모든 case 코드들이 순서대로 실행된다.
- default 는 조건식의 결과값이 모든 case 의 값과 일치하지 않을 때 실행된다. if 문의 else 와 같다. default 구문은 선택이다.
- if , else-if , else 구조와 동일하다.
- UI를 생성할 때 유용하다!
삼항 연산자
if 문을 사용할 때 다음과 같이 단순히 참과 거짓에 따라 특정 값을 구하는 경우가 있다.
이렇게 단순히 참과 거짓에 따라서 특정 값을 구하는 경우 삼항 연산자 또는 조건 연산자라고 불리는 ?: 연산자를 사용할 수 있다.
이 연산자를 사용하면 if 문과 비교해서 코드를 단순화 할 수 있다.
삼항 연산자 구문:
(조건) ? 참_표현식 : 거짓_표현식
- 삼항 연산자는 항이 3개라는 뜻이다. 조건 , 참_표현식 , 거짓_표현식 이렇게 항이 3개이다. 자바에서 유일하게 항이 3개인 연산자여서 삼항 연산자라 한다. 또는 특정 조건에 따라 결과가 나오기 때문에 조건 연산자라고도 한다.
- 조건에 만족하면 참_표현식 이 실행되고, 조건에 만족하지 않으면 거짓_표현식 이 실행된다. 앞의 if , else 문과 유사하다.
- if 문 처럼 코드 블럭을 넣을 수 있는 것이 아니라 단순한 표현식만 넣을 수 있다.
삼항 연산자 없이 if 문만 사용해도 된다. 하지만 단순히 참과 거짓에 따라서 특정 값을 구하는 삼항 연산자를 사용하면 if 문 보다 간결한 코드를 작성할 수 있다.
기초
반복문은 특정 코드를 여러 번 반복해서 실행해야 할 때 사용됩니다. 자바는 while, do-while, for 세 가지 종류의 반복문을 제공합니다.
- while문: 조건식이 참인 동안 코드 블록을 반복 실행합니다.
- do-while문: 코드 블록을 먼저 실행한 후 조건식을 검사하여 반복 여부를 결정합니다.
- for문: 초기식, 조건식, 증감식을 사용하여 정해진 횟수만큼 반복합니다.
반복문은 코드의 중복을 줄이고, 변경에 유연하게 대처할 수 있도록 도와줍니다.
while문 상세 분석
while문은 조건에 따라 코드를 반복 실행할 때 사용하며, 조건식을 먼저 확인하고 참인 경우에만 코드 블록을 실행합니다. 조건식이 거짓이 되면 while문을 벗어납니다.
while (조건식) { // 코드 }
while문은 특정 조건이 만족될 때까지 반복해야 하는 경우에 유용합니다. 예를 들어, 사용자의 입력이 특정 값을 만족할 때까지 반복하거나, 파일의 끝에 도달할 때까지 반복하는 경우 등에 사용할 수 있습니다.
do-while문의 특징
do-while문은 while문과 유사하지만, 조건에 상관없이 코드 블록을 최소 한 번은 실행한다는 특징이 있습니다.
do { // 코드 } while (조건식);
do-while문은 사용자에게 메뉴를 보여주고 선택을 받는 경우와 같이, 최소 한 번은 실행해야 하는 코드 블록이 있을 때 유용합니다.
break와 continue 활용
break와 continue는 반복문 내에서 흐름을 제어하는 데 사용되는 키워드입니다.
- break: 반복문을 즉시 종료하고 반복문 밖으로 나갑니다.
- continue: 반복문의 나머지 부분을 건너뛰고 다음 반복으로 진행합니다.
break는 특정 조건을 만족할 때 반복을 중단해야 하는 경우에, continue는 특정 조건을 만족할 때 반복문의 특정 부분을 건너뛰어야 하는 경우에 유용합니다.
for문의 구조와 활용
for문은 초기식, 조건식, 증감식을 사용하여 정해진 횟수만큼 반복하는 데 최적화된 반복문입니다. for문은 while문을 구조화한 형태로, 반복 횟수가 명확할 때 사용하면 코드를 간결하게 만들 수 있습니다.
for (초기식; 조건식; 증감식) { // 코드 }
for문은 배열이나 컬렉션을 순회하는 경우, 또는 특정 횟수만큼 코드를 반복해야 하는 경우에 유용합니다.
package loop.ex;
public class ForEx2 {
public static void main(String[] args) {
for (int num = 2, count = 1; count <= 10; num += 2, count++) {
System.out.println(num);
}
}
}
이와 같이 for문 안에 여러가지 조건을 넣을 수 있다.
중첩 반복문의 이해
반복문 내부에 또 다른 반복문을 포함시키는 것을 중첩 반복문이라고 합니다. 중첩 반복문은 2차원 배열의 모든 요소를 순회하거나, 구구단을 출력하는 것과 같이 복잡한 패턴을 생성하는 데 사용됩니다.
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j ++) {
System.out.println(i + "*" + j + "=" + i*j);
}
}
}
반복문 선택 가이드: for vs while
for문과 while문은 모두 반복 작업을 수행하지만, 각각의 장단점이 있습니다.
- for문: 초기화, 조건 검사, 반복 후 작업이 한 줄에 있어 편리하며, 정해진 횟수만큼 반복할 때 적합합니다.
- while문: 루프 조건이 내부에서 변경되는 경우 관리가 용이하며, 복잡한 조건에 적합합니다.
일반적으로 반복 횟수가 정해져 있으면 for문을, 그렇지 않으면 while문을 사용하는 것이 좋습니다. 하지만 이는 절대적인 기준은 아니며, 상황에 따라 더 적합한 반복문을 선택하는 것이 중요합니다.