backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  • 제어문(Control Statement)
  • 제어문의 주요 개념
  • 제어문의 역할
  • 조건문
  • if 문
  • else 문
  • else if 문
  • 요약
  • Switch문
  • switch 문의 기본 구조
  • switch 문의 동작 방식
  • switch 문 예시
  • fall-through (연속 실행)
  • switch 문에서 허용되는 값 타입
  • switch 문과 if-else 문 비교
  • for문
  • 기본 구조
  • 동작 방식
  • 예시 1: 기본적인 for문
  • 예시 2: for문을 이용한 배열 순회
  • for-each 문 (향상된 for문)
  • 구조
  • 예시: for-each 문
  • 중첩된 for문 (Nested for Loop)
  • 예시: 중첩된 for문
  • break와 continue
  • 무한 루프
  • while
  • 기본 구조
  • 동작 방식
  • 예시 1: 기본적인 while문
  • 예시 2: 무한 루프 (Infinite Loop)
  • while문과 break
  • 예시: break를 이용한 반복 종료
  • while문과 continue
  • 예시: continue를 이용한 반복 건너뛰기
  • do-while 문과 비교
  • do-while 문 기본 구조
  • 예시: do-while 문
  • while문과 for문 비교
  1. 자바

04 제어문

제어문(Control Statement)

제어문(Control Statement)은 프로그램의 실행 흐름을 제어하는 구조입니다. 기본적으로 프로그램은 위에서 아래로 순차적으로 실행되지만, 제어문을 사용하면 조건에 따라 실행 흐름을 변경하거나 특정 코드를 반복 실행할 수 있습니다. 제어문은 프로그램의 논리를 결정하는 핵심 요소입니다.

제어문의 주요 개념

  1. 조건 제어(Conditional Control): 조건에 따라 실행 흐름을 결정.

    • 예: if-else, switch

  2. 반복 제어(Iterative Control): 특정 작업을 반복해서 수행.

    • 예: for, while, do-while

  3. 분기 제어(Jump Control): 프로그램의 실행 흐름을 조기에 종료하거나, 특정 지점으로 이동.

    • 예: break, continue, return

제어문의 역할

  • 유연성: 조건에 따라 프로그램의 흐름을 유동적으로 제어할 수 있습니다.

  • 재사용성: 반복문을 통해 같은 코드를 여러 번 실행하여 코드 중복을 줄이고 효율성을 높일 수 있습니다.

  • 복잡한 로직 처리: 여러 조건이나 상태에 따라 다르게 동작하는 복잡한 로직을 처리할 수 있습니다.

조건문

조건에 따라 코드를 실행할 수 있게 해주는 기본적인 제어문입니다. 이 제어문들은 프로그램의 흐름을 제어하는 데 매우 중요한 역할을 하며, 특정 조건이 참인지 여부에 따라 실행할 코드 블록을 결정합니다.

if 문

if 문은 조건이 참(true)일 때 특정 코드 블록을 실행합니다. 조건이 거짓(false)이면 해당 코드 블록을 건너뜁니다.

if (조건식) {
    // 조건식이 참일 때 실행될 코드
}

예를 들어:

int num = 10;
if (num > 5) {
    System.out.println("num은 5보다 큽니다.");
}

위 코드에서 num이 5보다 크므로 조건식이 참(true)이고, "num은 5보다 큽니다."가 출력됩니다.

else 문

if 문과 함께 else 문을 사용하면 조건이 거짓일 때 실행할 코드 블록을 정의할 수 있습니다. 즉, if 조건이 만족되지 않을 경우 else 블록이 실행됩니다.

if (조건식) {
    // 조건식이 참일 때 실행될 코드
} else {
    // 조건식이 거짓일 때 실행될 코드
}

예를 들어:

int num = 3;
if (num > 5) {
    System.out.println("num은 5보다 큽니다.");
} else {
    System.out.println("num은 5보다 작거나 같습니다.");
}

여기서는 num이 5보다 크지 않기 때문에 "num은 5보다 작거나 같습니다."가 출력됩니다.

else if 문

else if 문은 추가적인 조건을 검사할 때 사용됩니다. 즉, 여러 조건을 단계적으로 검사할 수 있습니다. if 문 다음에 원하는 만큼의 else if 문을 사용할 수 있으며, 해당 조건이 참일 경우 그에 맞는 코드 블록이 실행됩니다.

if (조건식1) {
    // 조건식1이 참일 때 실행될 코드
} else if (조건식2) {
    // 조건식2가 참일 때 실행될 코드
} else {
    // 위의 모든 조건이 거짓일 때 실행될 코드
}

예를 들어:

IfElseExample.java

public class IfElseExample {
    public static void main(String[] args) {
        int score = 85;
        if (score >= 90) {
            System.out.println("A 등급입니다.");
        } else if (score >= 80) {
            System.out.println("B 등급입니다.");
        } else if (score >= 70) {
            System.out.println("C 등급입니다.");
        } else {
            System.out.println("F 등급입니다.");
        }
    }
}

여기서 score가 85이므로 "B 등급입니다."가 출력됩니다.

요약

  • if: 조건이 참일 때만 해당 코드 블록을 실행.

  • else: if 조건이 거짓일 때 실행.

  • else if: 추가적인 조건을 검사하며, 원하는 만큼 여러 번 사용할 수 있음.

이러한 제어문을 통해 프로그램의 논리적 흐름을 제어할 수 있으며, 다양한 조건에 따라 다르게 동작하는 프로그램을 만들 수 있습니다.

Switch문

switch 문은 여러 개의 if-else if 문을 사용하는 것보다 가독성이 좋고, 관리가 용이할 때 많이 사용됩니다. 특히 값이 명확하게 나뉠 때 유용합니다.

switch 문의 기본 구조

switch (변수) {
    case 값1:
        // 값1일 때 실행할 코드
        break;
    case 값2:
        // 값2일 때 실행할 코드
        break;
    case 값3:
        // 값3일 때 실행할 코드
        break;
    default:
        // 그 외의 값일 때 실행할 코드
        break;
}
  • 변수: switch에서 비교할 값입니다. 이 값은 정수형, 문자형, 문자열 등의 타입을 가질 수 있습니다.

  • case 값: switch 문에서 비교할 값입니다. 각 case는 변수의 값과 일치할 경우 실행됩니다.

  • break: break 문은 해당 case 블록을 실행한 후 switch 문을 빠져나가도록 합니다. break를 사용하지 않으면 다음 case 블록도 연속으로 실행됩니다(이를 fall-through라고 합니다).

  • default: 어떤 case에도 해당되지 않는 경우 실행될 블록입니다. default는 선택 사항이며, 반드시 사용할 필요는 없습니다.

switch 문의 동작 방식

  1. switch에 주어진 변수의 값이 각 case의 값과 비교됩니다.

  2. 일치하는 case 블록이 있으면 그 블록의 코드가 실행됩니다.

  3. 각 case 블록이 끝날 때 break 문이 있으면, switch 블록을 빠져나갑니다.

  4. break가 없으면 다음 case 블록으로 넘어가고, 그 안의 코드도 실행됩니다.

  5. 일치하는 case가 없으면, default 블록이 실행됩니다.

switch 문 예시

SwitchExample.java

public class SwitchExample {
    public static void main(String[] args) {
        int day = 3;
        switch (day) {
            case 1:
                System.out.println("월요일");
                break;
            case 2:
                System.out.println("화요일");
                break;
            case 3:
                System.out.println("수요일");
                break;
            case 4:
                System.out.println("목요일");
                break;
            case 5:
                System.out.println("금요일");
                break;
            default:
                System.out.println("주말");
                break;
        }
    }
}
  • 위 코드에서 day가 3이므로 "수요일"이 출력되고, break 문에 의해 switch 블록을 빠져나갑니다.

fall-through (연속 실행)

FallThroughExample.java

break 문을 사용하지 않으면 다음 case로 넘어가서 실행됩니다. 이를 fall-through라고 합니다. 예를 들어:

public class FallThroughExample {
    public static void main(String[] args) {
        int day = 2;
        switch (day) {
            case 1:
                System.out.println("월요일");
            case 2:
                System.out.println("화요일");
            case 3:
                System.out.println("수요일");
            default:
                System.out.println("주말");
        }
    }
}

위 코드에서 day가 2라면, "화요일", "수요일", "주말"이 모두 출력됩니다. 이는 case 2 블록 안에 break 문이 없어서 발생한 fall-through입니다. 일반적으로 의도된 경우가 아니라면 break 문을 꼭 사용하는 것이 좋습니다.

switch 문에서 허용되는 값 타입

Java의 switch 문에서는 다음과 같은 타입의 값을 사용할 수 있습니다:

  1. 정수형: byte, short, int, char

  2. 문자열: String (Java 7부터 지원)

  3. 열거형: enum

예를 들어, 문자열을 사용하는 switch 문:

StringSwitchExample.java

public class StringSwitchExample {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
            case "apple":
                System.out.println("사과입니다.");
                break;
            case "banana":
                System.out.println("바나나입니다.");
                break;
            default:
                System.out.println("과일이 아닙니다.");
                break;
        }
    }
}

위 예시에서는 fruit 변수가 "apple"이므로 "사과입니다."가 출력됩니다.

switch 문과 if-else 문 비교

비교 항목
switch 문
if-else 문

사용 상황

명확한 값 비교(정수, 문자, 문자열)

복잡한 조건 비교

가독성

여러 값에 대한 비교가 명확하고 간결함

다양한 조건을 처리 가능

성능

많은 경우에 비교 시 더 빠를 수 있음

단순하거나 복잡한 조건에 유리

유연성

범위 비교나 복합 조건 사용 불가

범위, 논리 조건 등을 사용 가능

for문

for문은 특정 코드를 반복 실행할 때 사용되는 제어문입니다. for문은 주로 반복 횟수가 명확할 때 사용되며, 반복 조건과 증감식을 간결하게 작성할 수 있다는 장점이 있습니다. for문을 사용하면 코드가 깔끔하고 읽기 쉬워지며, 반복 작업을 처리할 때 유용합니다.

기본 구조

for (초기화; 조건식; 증감식) {
    // 반복 실행될 코드
}
  • 초기화: 반복문이 시작되기 전에 한 번만 실행되는 구문입니다. 주로 반복 횟수를 제어하는 변수를 선언하고 초기화합니다.

  • 조건식: 반복문이 실행될 조건을 정의합니다. 이 조건이 true인 동안 for문의 코드 블록이 실행되며, 조건이 false가 되면 반복문이 종료됩니다.

  • 증감식: 매 반복이 끝날 때마다 실행되는 구문으로, 보통 반복 제어 변수를 증가하거나 감소시키는 역할을 합니다.

동작 방식

  1. 초기화 구문이 먼저 실행됩니다. (반복 제어 변수가 설정됨)

  2. 조건식이 평가되어 true인 경우 반복문을 실행합니다. 조건식이 false이면 반복문을 종료합니다.

  3. 반복문 블록이 실행된 후 증감식이 실행됩니다.

  4. 다시 조건식이 평가되고, true이면 다시 반복됩니다. false이면 반복이 종료됩니다.

예시 1: 기본적인 for문

ForExample.java

for (int i = 0; i < 5; i++) {
    System.out.println("i의 값: " + i);
}
  • 초기화: int i = 0 (반복 변수를 i로 선언하고 0으로 초기화)

  • 조건식: i < 5 (i가 5보다 작을 때만 반복)

  • 증감식: i++ (반복이 끝날 때마다 i를 1씩 증가)

위 코드는 i의 값이 0부터 4까지 출력되며, 총 5번 반복됩니다.

i의 값: 0
i의 값: 1
i의 값: 2
i의 값: 3
i의 값: 4

예시 2: for문을 이용한 배열 순회

ForExample.java

int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
    System.out.println("numbers[" + i + "] = " + numbers[i]);
}
  • 초기화: i = 0 (배열의 첫 번째 요소부터 시작)

  • 조건식: i < numbers.length (배열의 길이보다 작을 때만 반복)

  • 증감식: i++ (다음 인덱스로 이동)

위 코드는 배열 numbers의 각 요소를 출력합니다.

numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5

for-each 문 (향상된 for문)

Java에서는 배열이나 컬렉션을 순회할 때 더 간결한 방식으로 사용할 수 있는 향상된 for문이 있습니다. 이를 for-each 문이라고 부르며, 요소를 하나씩 자동으로 가져와서 반복하는 방식입니다.

구조

for (타입 변수명 : 배열 또는 컬렉션) {
    // 반복될 코드
}

예시: for-each 문

ForExample.java

int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
    System.out.println("num = " + num);
}

위 코드는 배열 numbers의 각 요소를 순서대로 가져와 출력합니다. 결과는 위의 일반 for문과 동일합니다.

num = 1
num = 2
num = 3
num = 4
num = 5

for-each 문은 배열이나 컬렉션의 모든 요소를 순회할 때 특히 유용하며, 코드가 더 간결해집니다. 그러나 인덱스에 접근해야 하거나 반복 제어가 필요한 경우에는 일반 for문을 사용하는 것이 더 적합합니다.

중첩된 for문 (Nested for Loop)

for문은 중첩하여 사용할 수 있습니다. 이 경우, 외부 반복문이 한 번 실행될 때마다 내부 반복문은 전체를 반복합니다.

예시: 중첩된 for문

ForExample.java

for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 2; j++) {
        System.out.println("i = " + i + ", j = " + j);
    }
}

위 코드에서는 i가 1일 때 j는 1부터 2까지 반복되고, i가 2일 때도 마찬가지로 j는 1부터 2까지 반복됩니다. 결과는 다음과 같습니다.

i = 1, j = 1
i = 1, j = 2
i = 2, j = 1
i = 2, j = 2
i = 3, j = 1
i = 3, j = 2

break와 continue

for문에서 반복을 제어하기 위해 break와 continue 같은 분기문을 사용할 수 있습니다.

ForExample.java

  1. break: for문을 즉시 종료하고 빠져나옵니다.

    for (int i = 0; i < 10; i++) {
        if (i == 5) {
            break; // i가 5일 때 반복문을 종료
        }
        System.out.println(i);
    }
  2. continue: 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.

    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            continue; // 짝수일 때는 다음 반복으로 넘어감
        }
        System.out.println(i);
    }

무한 루프

for문에서 종료 조건을 설정하지 않으면 무한히 반복될 수 있습니다. 이는 주로 조건이 잘못 설정되었거나, 명시적으로 무한 루프가 필요할 때 발생합니다.

for (;;) {
    // 무한 반복
}

위 예시는 종료 조건이 없으므로 무한 루프가 됩니다.

while

while문은 주어진 조건이 참(true)인 동안 계속해서 코드를 반복 실행하는 제어문입니다. while문은 반복 횟수가 명확하지 않거나, 조건이 동적으로 변할 때 주로 사용됩니다.

기본 구조

while (조건식) {
    // 조건식이 참일 동안 실행될 코드
}
  • 조건식: 반복이 계속될 조건을 정의합니다. 조건식이 true이면 반복문 내부의 코드가 실행되고, false이면 반복문이 종료됩니다.

  • 조건식은 반복할 때마다 평가되며, 조건이 만족되는 동안 반복이 계속됩니다.

동작 방식

  1. 먼저 조건식이 평가됩니다.

  2. 조건식이 참(true)이면 코드 블록을 실행합니다.

  3. 코드 블록을 실행한 후 다시 조건식이 평가됩니다.

  4. 조건이 거짓(false)이면 반복문을 종료하고 다음 코드로 넘어갑니다.

예시 1: 기본적인 while문

WhileExample.java

int i = 0;
while (i < 5) {
    System.out.println("i의 값: " + i);
    i++;
}

이 코드는 i가 5보다 작을 동안 반복됩니다. i는 각 반복에서 1씩 증가하므로 0부터 4까지 출력됩니다.

i의 값: 0
i의 값: 1
i의 값: 2
i의 값: 3
i의 값: 4
  • 초기화: i가 0으로 시작합니다.

  • 조건식: i < 5 (i가 5보다 작을 때만 반복)

  • 증감식: i++ (i를 1씩 증가)

예시 2: 무한 루프 (Infinite Loop)

WhileExample.java

while문의 조건식이 항상 참(true)일 경우 반복문은 무한히 실행됩니다. 이는 의도적으로 사용될 수 있으나, 보통은 종료 조건을 잘못 설정할 때 발생할 수 있습니다.

WhileExample.java

while (true) {
    System.out.println("무한 루프");
}

위 코드는 true 조건 때문에 무한히 반복되므로, 강제 종료되지 않는 한 프로그램은 계속해서 "무한 루프"를 출력합니다. 실제로 무한 루프를 사용할 때는 break 문과 같은 제어문을 통해 적절한 시점에 반복문을 종료해야 합니다.

while문과 break

break 문을 사용하면 조건이 만족되지 않더라도 반복문을 즉시 종료할 수 있습니다.

예시: break를 이용한 반복 종료

WhileExample.java

int i = 0;
while (i < 10) {
    System.out.println(i);
    if (i == 5) {
        break; // i가 5가 되면 반복 종료
    }
    i++;
}

이 코드는 i가 5일 때 반복문을 종료합니다. 따라서 0부터 5까지만 출력됩니다.

0
1
2
3
4
5

while문과 continue

continue 문을 사용하면 현재 반복을 건너뛰고, 다음 반복을 진행할 수 있습니다.

예시: continue를 이용한 반복 건너뛰기

WhileExample.java

int i = 0;
while (i < 10) {
    i++;
    if (i % 2 == 0) {
        continue; // 짝수는 출력하지 않음
    }
    System.out.println(i);
}

이 코드는 i가 짝수일 때 출력하지 않고, 홀수일 때만 출력합니다.

1
3
5
7
9

do-while 문과 비교

while문과 비슷한 구조를 가진 반복문 중 하나가 do-while 문입니다. 두 반복문의 차이는 조건식 평가 시점입니다.

  • while 문: 조건식을 먼저 평가한 후, 참일 때만 코드를 실행합니다. 따라서 조건이 거짓이면 반복문이 한 번도 실행되지 않을 수 있습니다.

  • do-while 문: 먼저 코드를 실행한 후 조건식을 평가합니다. 따라서 조건이 거짓이더라도 한 번은 반드시 실행됩니다.

do-while 문 기본 구조

do {
    // 실행될 코드
} while (조건식);

예시: do-while 문

WhileExample.java

int i = 0;
do {
    System.out.println("i의 값: " + i);
    i++;
} while (i < 5);

위 코드는 i가 5보다 작을 때까지 실행됩니다. do-while 문에서는 코드가 먼저 실행되기 때문에, while문과는 달리 조건이 거짓이어도 한 번은 실행됩니다.

i의 값: 0
i의 값: 1
i의 값: 2
i의 값: 3
i의 값: 4

while문과 for문 비교

항목
while 문
for 문

주요 용도

반복 횟수가 명확하지 않을 때 사용

반복 횟수가 명확할 때 사용

조건식 위치

반복문이 시작되기 전에 조건을 평가

초기화, 조건식, 증감식을 한 줄로 작성

구조

조건식만으로 반복 제어

초기화, 조건, 증감식을 포함한 명시적 구조

가독성

조건만 평가하면 되기 때문에 간결할 수 있음

여러 요소를 한 줄로 표현해 명확하고 간결

Previous03 자료형과 연산자Next05 메소드

Last updated 6 months ago