오늘은 Java의 제어문을 학습했다.
제어문은 프로그램의 실행 흐름을 바꾸는 문장으로, 크게 조건문, 반복문, 분기문으로 나뉜다.
조건문은 조건에 따라 서로 다른 문장을 실행할 때 사용한다. 대표적으로 if문과 switch문이 있다.
if문은 if, else if, else를 사용해 조건을 위에서부터 순서대로 검사하는 방식이다. 조건이 참이면 해당 블록을 실행하고, 거짓이면 다음 조건으로 넘어간다.
switch문은 하나의 값에 따라 여러 경우를 나누어 처리할 때 사용한다. case와 default를 이용해 값에 맞는 실행문을 수행한다.
반복문은 특정 문장을 여러 번 실행할 때 사용한다. 오늘 배운 반복문은 for, while, do-while이다.
for문은 초기식, 조건식, 증감식을 한 줄에 함께 작성하기 때문에 반복 횟수가 정해져 있을 때 자주 사용한다.
while문은 조건식이 참인 동안 계속 반복하는 구조이고, 반복 횟수가 정해지지 않았을 때 자주 사용한다.
do-while문은 먼저 한 번 실행한 뒤 조건을 검사하기 때문에, 조건과 상관없이 최소 한 번은 실행된다는 특징이 있다.
분기문은 반복문이나 조건문의 흐름을 중간에 바꿀 때 사용하며, 오늘은 break까지 학습했다. break는 현재 실행 중인 가장 가까운 switch문이나 반복문을 종료시키는 역할을 한다.
기본적인 조건문과 반복문 개념은 JavaScript에서도 비슷하게 다뤄봤기 때문에, 오늘은 전체 구조를 가볍게 정리하고 Java에서 새롭게 인상 깊었던 부분을 중심으로 남기려고 한다.
1. printf
| System.out.printf("당신의 점수는 %d이고, 등급은 %c입니다.", score, grade); |
처음에는 println처럼 그냥 출력하는 메소드라고 생각했는데, printf는 형식에 맞춰 출력하는 메소드라는 점이 흥미로웠다.
기본 형태는 printf("형식", 값들); 이고, 문자열 안에 %d, %f, %c, %s, %b 같은 형식 지정자를 넣어서 변수 값을 원하는 모양으로 출력할 수 있다. 특히 %5d, %-5d처럼 자리 수와 정렬까지 조절할 수 있다는 점이 신기했다. 단순히 출력만 하는 것이 아니라, 보기 좋게 맞춰서 보여줄 수 있다는 점에서 활용도가 높아 보였다.
2. switch문
| switch (ch) { case 'A' -> System.out.println("A입니다."); case 'B' -> System.out.println("B입니다."); case 'C' -> System.out.println("C입니다."); default -> System.out.println("다른 문자입니다."); } |
기존에는 case마다 break;를 써야 한다고만 알고 있었는데, Java에서는 -> 화살표 문법으로 더 간단하게 작성할 수 있다는 점을 처음 알았다. 이 방식은 코드가 훨씬 깔끔하고, break를 실수로 빼먹어서 다음 case까지 실행되는 문제도 줄일 수 있어 보였다.
3. String 메소드
| public String testSwitch03() { int no = 2; switch (no) { case 1 -> { return "1입니다."; } case 2 -> { return "2입니다."; } case 3 -> { return "3입니다."; } default -> { return "다른 숫자입니다."; } } } |
처음에는 왜 return을 쓰는지 궁금했다. 생각해보니 이 메소드는 void가 아니라 String을 반환하는 메소드이기 때문에, 실행 결과를 문자열로 돌려줘야 한다. 그래서 switch문 안에서 조건에 맞는 문자열을 바로 return하고 있는 것이다.
또한 return을 만나면 메소드 자체가 바로 종료되기 때문에, break; 없이도 자연스럽게 switch문이 끝난다. 즉, 여기서는 단순히 switch문만 끝내는 것이 아니라 메소드 전체를 끝내면서 값을 반환하는 역할을 한다는 점이 이해되었다.
4. Static 메소드와 non-Static 메소드
static 메소드는 객체를 만들지 않고 바로 실행하는 메소드이다.
| // static 메소드 실행 // 클래스명.메소드명(); public static void 메소드명() {} |
반면 non-static 메소드는 객체를 먼저 생성한 뒤 실행하는 메소드이다.
| // non-static 메소드 실행 // 객체 생성 후, 객체명.메소드명(); public void 메소드명() {} |
즉, static이 붙어 있으면 클래스명.메소드명();으로 바로 실행할 수 있고, static이 없으면 객체를 만든 뒤 객체명.메소드명(); 형태로 실행해야 한다.
'멀티캠퍼스' 카테고리의 다른 글
| [2026.04.21] TIL - 17일차 Java (배열 복사, 2차원 배열, 객체) (0) | 2026.04.22 |
|---|---|
| [2026.04.20] TIL - 16일차 반복문 활용과 배열 (1) | 2026.04.21 |
| [2026.04.16]TIL - 14일차 source tree와 github (0) | 2026.04.20 |
| [2026.04.15]TIL - 13일차 Git (2) | 2026.04.19 |
| [2026.04.14]TIL - 12일차 Java 변수와 메모리 구조, 메소드, 연산자 정리 (0) | 2026.04.14 |