목차
1. Chapter 1 - 7 : 조건문
수업 목표
● 조건문(if, if-else, else-if)이 무엇인지 학습합니다.
● Switch 문이 무엇인지 학습합니다.
조건문
- 컴퓨터가 마주할 조건들을 미리 정의해 놓는다면 프로그램을 조건에 맞게 동작시킬 수 있음.
조건문 구조
- 조건 수식 부분이 참 또는 거짓에 따라 명령문이 실행될 지 결정됨.
1. if문
1. 조건이 참일 때만 실행됨.
- 조건이 참일 때 실행 순서
(1) 조건 확인 (2) true면 실행 (3) 다음 코드 진행 |
💡if문 구조
if (조건수식) {
명령문; // 실행할까? 말까 ?
}
💡참일 경우 명령문 실행
if (1 < 2) { // true
명령문; // ✅
}
💡거짓일 경우 명령문 실행 ❌
if (2 < 1) { // false
명령문; // ❌
}
2. if ~ else 문
- 조건이 거짓일 때 처리.
1. 조건이 참일 때 실행 순서
(1) 조건 확인 (2) true면 실행 (3) 다음 코드 진행 |
2. 조건이 거짓일 때 실행 순서
(1) 조건 확인 (2) false면 진행 (3) 다음 코드 진행 |
3. else ~ if 문
- 여러 개의 조건을 처리해야할 때 사용.
[예시]
public class Main {
public static void main(String[] args) {
String light = "초록불"; // (1)
if (light.equals("초록불")) { // (2)
System.out.println("건너세요!"); // (3)
} else if (light.equals("노란불")) { // (4)
System.out.println("주의하세요!"); // (5)
} else {
System.out.println("멈추세요!"); // (6)
}
// (7) 다음코드 진행
}
}
🟢 light 가 “초록불” 일 때 실행 흐름
(1) light 변수 저장 (2) 조건 확인 (3) "건너세요!" 출력 (7) 다음코드 진행 |
🟡 light 가 “노란불” 일때 실행 흐름
(1) light 변수 저장 (2) 조건 확인 (4) 조건 확인 (5) "주의하세요!" 출력 (7) 다음 코드 진행 |
🔴 light 가 “빨간불” 일때 실행 흐름
(1) light 변수 저장 (2) 조건 확인 (4) 조건 확인 (6) "멈추세요!" 출력 (7) 다음 코드 진행 |
조건에 없는 불이 변수에 담길 경우 → else문으로 진행됨.
4. Switch 문
- 값에 따라 여러 동작을 실행.
- 괄호 안에 단일값만 들어감.
- 조건식 사용 불가.
switch (단일값) {
case 값1:
// 값1일 때 실행할 코드
break;
case 값2:
// 값2일 때 실행할 코드
break;
default:
// 위의 값들과 일치하지 않을 때 실행할 코드
}
break; 는 탈출 버튼이라고 생각하면 됨.
→ break; 를 만나는 순간 switch문을 벗어나게 됨.
⚠️fall-through 현상 주의
- break문을 스위치에서 사용하지 않으면 다음 case가 실행됨.
[실습 과제]
Q1. 신호등 색상을 입력하면 프로그램이 올바른 안내 메시지를 출력하도록 만드세요!
if문
public class TrafficLight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
String light = scanner.nextLine();
// if문
if(light.equals("초록불")){
System.out.println("건너세요!");
}else if(light.equals("노란불")){
System.out.println("주의하세요!");
}else if(light.equals("빨간불")){
System.out.println("멈추세요!");
}else{
System.out.println("잘못된 입력입니다.");
}
}
}
switch문
public class TrafficLight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
String light = scanner.nextLine();
// switch문
switch (light){
case "초록불":
System.out.println("건너세요!");
break;
case "노란불":
System.out.println("주의하세요!");
break;
case "빨간불":
System.out.println("멈추세요!");
break;
default:
System.out.println("잘못된 입력입니다.");
}
}
}
정답)
import java.util.Scanner;
public class TrafficLight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("신호등 색상을 입력하세요 (초록불, 노란불, 빨간불): ");
String light = scanner.nextLine(); // 사용자의 입력을 받음
// TODO: if-else if-else 문을 사용하여 신호등 로직을 구현하세요.
if (light.equals("초록불")) {
System.out.println("건너세요!");
} else if (light.equals("노란불")) {
System.out.println("주의하세요!");
} else if (light.equals("빨간불")) {
System.out.println("멈추세요!");
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
2. Chapter 1 - 8: 반목문 - 자동화의 첫걸음
반복문
- 일정한 형태의 작업을 반복적으로 수행해야할 때 사용.
- 단 한 줄로 해결 가능함 😎
1. for문
- 반복 작업을 시작하기 전에 종결 조건을 확인함.
- 종결 조건이 참(true)일 경우 반복을 수행하고 거짓(false)이면 반복을 끝냄.
for (시작조건; 종결조건; 조건변화수식) {
...
}
💡break문(탈출 버튼)과 함께 사용
● for문 활용 + break
- break문 = 탈출 버튼.
- 반복을 벗어나야할 때 사용.
예시)
public class Robot {
public static void main(String[] args) {
int customers = 5;
for (int i = 1; i <= customers; i++) {
if (i == 4) {
break; // (1) 반복을 벗어납니다.
}
System.out.println(i + "번째 손님, 안녕하세요!");
}
System.out.println("반복문이 종료되었습니다.");
}
}
💡continue문(건너뛰기 skip 버튼)
● for문 활용 + continue
- continue 문은 건너뛰기(스킵)버튼.
- 특정 회차의 반복을 건너뛸 때 사용.
예시)
public class Robot {
public static void main(String[] args) {
int customers = 5;
for (int i = 1; i <= customers; i++) {
if (i == 2) {
continue; // (1) 반복을 건너 뜁니다.
}
System.out.println(i + "번째 손님, 안녕하세요!");
}
System.out.println("반복문이 종료되었습니다.");
}
}
2. while문
- 종결 조건만 가지고 있음.
- 종결 조건식이 true일 때 반복함.
- 즉, 종결 조건이 거짓(false)이 될 때까지 명령문 반복 → 무한루프를 조심해야함.
while (종결조건) {
반복할 명령문;
}
예시)
int i = 1;
while (i <= 10) { // 1은 10보다 작음으로 반복!
System.out.println("i 가 10 보다 작습니다.");
i++; // ✅ 없을 경우 무한루프 발생
}
3. do ~ while문
- while문과 비슷하나, 종결조건을 반복 전이 아니라 반복 후에 체크함.
do {
반복할 명령문..
} while (종결 조건)
예시)
int i = 1;
do {
System.out.println("안녕하세요.");
i++;
} while (i <= 10);
[실습 과제]
Q1. 입력한 숫자의 구구단 출력하기
import java.util.Scanner;
public class Gugudan {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("출력할 구구단 단수를 입력하세요 (2~9): ");
int num = scan.nextInt();
if(num < 2 || num > 9){
System.out.println("2 ~ 9 사이의 숫자를 입력하세요!");
}else{
System.out.println("==== " + num +"단" + " ====");
for(int i = 1; i<=9; i++){
System.out.println(num + " X " + i + " = " + (num*i));
}
}
}
}
정답)
import java.util.Scanner;
public class Gugudan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("출력할 구구단 단수를 입력하세요 (2~9): ");
int dan = scanner.nextInt();
// 2~9 사이의 숫자인지 확인
if (dan < 2 || dan > 9) {
System.out.println("2에서 9 사이의 숫자를 입력하세요!");
} else {
System.out.println("==== " + dan + "단 ====");
for (int i = 1; i <= 9; i++) {
System.out.println(dan + " x " + i + " = " + (dan * i));
}
}
}
}
Q2. 2단부터 9단까지 구구단을 출력하는 프로그램(중첩 for 문 활용)
public class GugudanAll {
public static void main(String[] args) {
for(int i = 2; i<=9; i++){
System.out.println("==== " + i + "단" + " ====");
for(int j = 1; j<=9; j++){
System.out.println(i + " X " + j + " = " + (i*j));
}
System.out.println();
}
}
}
정답)
public class GugudanAll {
public static void main(String[] args) {
for (int dan = 2; dan <= 9; dan++) { // 2단부터 9단까지 반복
System.out.println("==== " + dan + "단 ====");
for (int i = 1; i <= 9; i++) { // 1~9까지 곱하기
System.out.println(dan + " x " + i + " = " + (dan * i));
}
System.out.println(); // 단 간격을 띄우기
}
}
}
3. Chapter 1 - 9 : 배열 - 데이터 관리의 시작
1. 배열
- 비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현하는 방버.
- 관련된 데이터를 편리하게 관리하기 위해 사용됨.
- 모든 자료형의 종류로 배열을 만들 수 있음.
예시)
String[] adventurerList = {"gygim", "Steve", "Grace", ...};
배열의 길이(Array Length)
- 배열에 들어갈 수 있는 데이터의 개수 의미.
- 한 번 크기를 정하면 변경할 수 없음(정적배열).
🤓배열의 길이 구하는 법
배열이름.length
예시)
int arrLength = adventurerList.length;
배열 선언(Array Declaration)
- new 키워드를 사용해 배열을 선언할 수 있음.
자료형[] 변수이름 = new 자료형[배열의길이]; // 배열선언
1. 배열 선언의 첫번째 방법
● (1) 배열의 이름 과 (2) 길이 설정 을 각각 다른 줄에서 할 수 있음.
1) 배열 선언
// 정수형 배열 arr 선언
int[] arr; // ✅ (1) 배열을 선언합니다.
2) 배열 길이 설정
arr = new int[5]; // ✅ (2) 배열의 길이를 5로 설정합니다.
3) 배열 길이 구하기
// 배열 길이 구하기
int arrLength = arr.length;
System.out.println("arrLength = " + arrLength); // arrLength = 5
2. 배열 선언 및 길이 설정
● 배열 선언과 배열 길이 설정은 같은 줄에서도 가능.
int[] arr = new int[5]; //// ✅ 선언과 동시에 길이를 설정합니다.
int arrLength = arr.length;
System.out.println("arrLength = " + arrLength); // arrLength = 5
배열 살펴보기
- int 자료형은 "4바이트" 크기의 자료형.
- 길이가 5인 int형 배열은 메모리에서 "20바이트" 크기를 갖게 됨.
(4바이트 * 5 = 20바이트)
int[] arr = new int[5];
문자열 배열 선언
// 길이가 5인 문자열 배열 arrA 를 선언
String[] arrA = new String[5];
논리형 배열 선언
// 길이가 3인 논리형 배열 arrB 를 선언
boolean[] arrB = new boolean[3];
배열의 요소
- 배열 안에 들어있는 각각의 값을 "배열의 요소" 라고 함.
- 배열 선언과 동시에 배열의 요소 설정 가능.
int[] arr = {10, 20, 30, 40, 50};
2. 인덱스(index)
- index의 시작은 0.
- 인덱스를 통해 원하는 배열의 요소에 빠르게 접근 가능.
int[] arr = {10, 20, 30, 40, 50};
System.out.println("배열의 1번째 요소 = " + arr[0]);
System.out.println("배열의 2번째 요소 = " + arr[1]);
System.out.println("배열의 3번째 요소 = " + arr[2]);
System.out.println("배열의 4번째 요소 = " + arr[3]);
System.out.println("배열의 5번째 요소 = " + arr[4]);
⚠️인덱스 사용 시 주의사항
● 배열의 범위에 벗어난 요소에 접근하는 경우
■ ArrayIndexOutOfBoundsException 에러 발생.
■ 인덱스 활용 시 배열의 범위를 벗어나지 않도록 조심할 것!!
int[] arr = {10, 20, 30, 40, 50}; // 5개의 길이를 가진 배열
System.out.println("배열의 6번째 요소 = " + arr[5]); // ❌ 에러 발생
배열에 정보 삽입 수정
- index를 활용해 각 요소의 값을 삽입/ 수정 가능.
int[] arr = new int[5];
arr[0] = 100; // ✅ 1번째 요소를 100로 설정
arr[1] = 200; // ✅ 2번째 요소를 200로 설정
arr[2] = 300; // ✅ 3번째 요소를 300로 설정
arr[3] = 400; // ✅ 4번째 요소를 400로 설정
arr[4] = 500; // ✅ 5번째 요소를 500로 설정
arr[5] = 600; // ❌ 접근 불가
배열 탐색
- index를 활용해 배열 탐색 가능.
- 변수에 length를 사용하여 인덱스로 활용하면 반복문을 통해 쉽게 배열 탐색 가능.
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
// ✅ 숫자대신 변수i 를 인덱스 활용
System.out.println("numbers[" + i + "] = " + arr[i]);
}
3. 향상된 for문
- 배열의 모든 요소를 하나씩 꺼내서 활용할 때 편리한 반복문.
- index를 직접 활용하지 않음.
- for(int a : arr) → 배열 arr에서 하나씩 꺼내서 a에 저장.
- IndexOutOfBoundsException 에러가 발생하지 않음 → index를 직접 다루지 않기 때문에 에러가 발생하지 않음.
for(배열의요소 : 배열) {
명령문;
}
예시)
int[] arr = {100, 200, 300, 400, 500};
for (int a : arr) {
System.out.println("배열의 각 요소 = " + a);
}
4. 2차원 배열(Two-Dimensional Array)
- 2차원적인 정보를 표현할 때 적합.
- 첫번째 인덱스는 행 = 가로 방향.
- 두번재 인덱스는 열 = 세로 방향.
- 좌표, 위치 정보(x, y) 등
예시)
boolean[][] board = new boolean[2][2]; // ✅ 2 x 2 2차원 배열 선언
boolean[][] board = {
{true, false}, // 0행의 0열, 0행의 1열,
{false, true} // 1행의 0열, 1행의 1열
};
2차원 배열 직접 탐색
- 1차원 배열 탐색처럼 인덱스를 활용해 탐색.
System.out.println(board[0][0]); // true 까만돌
System.out.println(board[0][1]); // false 흰돌
System.out.println(board[1][0]); // true 까만돌
System.out.println(board[1][1]); // false 흰돌
[실습 과제]
💬 Q1. 1차원 배열에서 짝수만 출력하기
아래의 정수 배열이 주어졌을 때 짝수만 출력하세요.
배열 예시: {3, 4, 7, 10, 15, 20}
public class EvenNumberFinder {
public static void main(String[] args) {
int[] arr = {3, 4, 7, 10, 15, 20};
System.out.print("짝수: ");
for (int i = 0; i < arr.length; i++) {
if(arr[i] % 2 == 0) {
System.out.print(arr[i] + " ");
}
}
}
}
정답)
public class EvenNumberFinder {
public static void main(String[] args) {
int[] numbers = {3, 4, 7, 10, 15, 20};
System.out.print("짝수: ");
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 == 0) {
System.out.print(numbers[i] + " ");
}
}
}
}
💬 Q2. 1차원 배열의 누적합 구하기
아래의 정수 배열의 누적합을 구하세요.
배열 예시: {2, 5, 8}
public class PrefixSum {
public static void main(String[] args) {
int[] arr = {2, 5, 8};
int sum = 0;
for(int i = 0; i < arr.length; i++){
sum += arr[i];
}
System.out.println("누적합: " + sum);
}
}
정답)
public class PrefixSum {
public static void main(String[] args) {
int[] numbers = {2, 5, 8};
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
System.out.println("누적합: " + sum);
}
}
Q3. 2차원 배열에서 검은돌(true)의 좌표(x, y) 찾기
배열 예시
boolean[][] board = { {true, false}, {false, true} }; |

public class BlackStoneFinder {
public static void main(String[] args) {
boolean[][] board = {
{true, false},
{false, true}
};
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board.length; j++) {
if(board[i][j] == true) {
System.out.println("검은돌(●) 위치: " + "(" + i + "," + j + ")");
}
}
}
}
}
정답)
public class BlackStoneFinder {
public static void main(String[] args) {
boolean[][] board = {
{true, false},
{false, true}
};
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j]) {
System.out.println("검은돌(●) 위치: (" + i + "," + j + ")");
}
}
}
}
}
4. Chapter 1 - 10 : 메서드 - 모듈화의 시작
1. 메서드
- 작업을 표현하는 방법.
- 함수, 기능이라고도 함.
- 여러 개의 작은 명령문을 한 곳에 모아 사용하는 단위.
1. 메서드가 필요한 이유
🤔 메서드가 없다면?
- 모든 일련의 작업들을 한 줄 한 줄 표현해야함.
- 수정해야 할 기능의 코드를 일일이 찾아서 수정해줘야 함.
🤓메서드가 있다면?
- 코드가 명확해짐.
- 유지보수가 쉬워짐.
2. 메서드 살펴보기
📖 메서드 구조
- 메서드는 항상 클래스 내부에 존재.
public class 클래스이름 {
[반환자료형][메서드이름](매개변수..) {
작업 명령문들...
}
}
📖 메서드의 흐름
- 메서드(함수, 기능)는 호출부, 선언부로 나누어짐.
- 호출부 – 메서드를 사용하는 곳.
- 선언부 – 메서드가 정의되어 있는 곳.
- 매개변수를 활용해 메서드 연산에 필요한 데이터 전달 가능.
※ 지역변수
- 각 메서드는 자신 만의 영역을 가지고 있음.
- 영억은 중괄호로 표현함.
- 중괄호 안에 선언된 변수는 중괄호 안에서만 생존.
선언부(메서드가 정의되어 있는 곳) - Calculator.java
public class Calculator {
int sum(int value1, value2) { // ✅ 메서드 선언된 곳
int result = value1 + value2;
return result;
}
}
1) 메서드 이름
- 기능의 역할을 쉽게 짐작할 수 있는 이름 사용.
- 카멜케이스(camelCase)를 사용하여 작성하며 주로 동사로 시작하는 것이 좋음.
Ex) sum(), printMessage(), findUserById()
2) 매개변수
- 작업을 수행할 때 필요한 데이터를 전달받는 공간(변수)
- 매개변수 여러 개 사용 가능, 쉼표( , ) 로 구분함.
3) 작업 내용
- 메서드가 실행할 명령문을 { } 중괄호 안에 작성.
- 메서드가 호출되면 작성된 코드가 첫번째 줄부터 실행됨.
- 중괄호가 끝나면 함수 종료.
4) 반환값/ 반환자료형 설명
● 반환값
■ 작업한 결과를 반환해야할 경우 return 키워드 사용.
■ 반환값은 함수가 호출된 곳으로 전달됨.
● 반환 자료형
■ 반환되는 데이터의 자료형을 메서드 선언부에서 명시해야함.
■ 반환값이 있는 경우 → 반환되는 데이터의 자료형(int, String, double 등)을 작성.
■ 반환값이 없는 경우 → void를 작성.
호출부(메서드를 호출하는 쪽) - Main.java
- 메서드를 활용하고 있는 곳.
public class Main {
public static void main(String[] args {
Calculator calculator = new Calculator(); // ✅ Calculator 객체 소환
int result = calculator.sum(1, 2); // ✅ 호출부
System.out.println("결과: " + result);
}
}
반환값이 없을 때 - void
❗반환 데이터가 없는 메서드
- 메서드가 데이터를 꼭 반환해야하는 것은 아님.
- 반환 데이터가 없을 때에는 반환자료형 위치에 void 선언.
- void는 "비어있다" 의 의미.
예시)
public class Calculator {
// ✅ void 로 반환 데이터가 없다는 것을 표시
void sum(int value1, value2) {
int result = value1 + value2;
System.out.println("계산결과는 " + result + "입니다.");
}
}
반환값이 있을 때 – return
❗반환 값이 있는 메서드
- return 키워드를 활용해 반환되는 데이터 표현.
- 반환된 데이터는 호출부에서 받아서 활용 가능.
예시)
public class Calculator {
int sum(int value1, value2) {
int result = value1 + value2;
return result; // ✅ result 가 반환됩니다.
}
}
[실습 : 메서드 활용]
1. 클래스(파일) 만들기
public class Calculator {
}
2. 더하기 메서드 작성하기
public class Calculator {
// 기능1: 더하기 메서드(기능)
int sum(int value1, int value2) {
int result = value1 + value2;
System.out.println("더하기 결과: " + result);
return result;
}
}
3. 프로그램 시작 지점에서 Calculator.java 클래스를 객체화 시켜주기.
public class Main() {
public static void main(String[] args) {
// ✅ calculator 객체화
Calculator calculator = new Calculator();
}
}
- Calculator 클래스에 정의된 메서드를 사용하려면 객체화 필요.
4. Calculator 객체의 sum 메서드 활용하기.
public class Main() {
public static void main(String[] args) {
Calculator calculator = new Calculator();
// ✅ 메서드 호출하기
calculator.sum(1, 2);
}
}
- Calculator 클래스에 작성된 sum() 메서드 호출.
- 함수를 실행시키는 것을 호출(call)이라고 함.
'스파르타 내일배움캠프 > TIL(Today I learned)' 카테고리의 다른 글
25.02.28 TIL - Wrapper Class, static, final, Interface (2) | 2025.02.28 |
---|---|
25.02.27 TIL - 클래스, JVM 메모리, 계산기 과제 (2) | 2025.02.27 |
25.02.25 TIL - Java 변수, 입출력, 연산자 (4) | 2025.02.25 |
25.02.24 TIL - Open JDK, intelliJ 설치, Java 기초 (0) | 2025.02.24 |
25.02.21 TIL - 웹 개발 미니 프로젝트 회고, TIL 강의 (1) | 2025.02.21 |