5 분 소요

해당 게시글은 JAVA_입문_수업 을 공부하며 정리한 글입니다.


IF_조건문

자바의 경우 if와 아래의 닫힌중괄호’}’를 보고 한 블럭임을 파악해야한다.

들여쓰기로 블록을 구성하는 파이썬과 달리, 자바는 {} 중괄호를 사용한다. 그래서 한눈에 깔끔하게 구조를 파악하는데에 불리한 것 같다.

특히나, 파이썬의 경우 if ~ else ~ elif 구문처럼 중첩을 할 시에, 각 단어가 하나의 세로줄에 들여쓰기가 되어있어 조건문 구조 파악하기가 편함.



1. 기본 구조

  • Booealn(불린) : true, false

  • 조건문은 if절과 then절로 나뉜다.

    • if절이 true일 때, then절이 실행된다.

  • 구성

    • if : 기본적으로 사용되는 것. true이면 해당 then절을 실행(false이면 다음으로 넘어감)

    • else if : 앞의 if, else if절이 false일 때, 실행된다. 마찬가지로 true이면 해당 then절을 실행.

    • else : (Boolean)이 존재하지 않는다. 앞에서의 조건 절이 모두다 false이면 else의 then절을 무조건 실행시킨다.

      • if, else if, else 중 우선적인 Ture인 if절에 대해 하나만! 실행된다.
# 기본 형식
if(Boolean){
    명령문;
}
# if ~ else
if(Boolean){
    명령문1;
} else {
    명령문2;
}
# if ~ else if ~ else
if(Boolean){
    명령문1;
} else if(Boolean) {
    명령문2;
} else {
    명령문3;
}



2. 조건문의 응용 - 로그인

입력값(id,pw)을 받아 둘 다 맞으면 “right”출력, 틀리면 “wrong” 출력

package org.java.eclipse; # 패키지명

public class LoginDemo { # 클래스명 / 이는 파일(.java)명과 같아야함
    # 메인 메소드 생성(클래스 필수요소)
    public static void main(String[] args) { # args에 입력값 저장(공백으로 구분)
        String id = args[0]; # 입력값 저장1
        String password = args[1]; # 입력값 저장2
        
        if (id.equals("egoing")) { # 문자열 비교는 equals!
            if (password.equals("111111")) {
                System.out.println("right");
            } else {
                System.out.println("wrong");
            }
 
        } else {
            System.out.println("wrong");
        }
    }
}


1) 입력

  • 입력한 값이 args에 배열로 임시저장(공백으로 분리되어)

  • 이를 변수에 저장 : args[0], args[1], …

public static void main(String[] args)


2) 입력값이 필요한 파일 실행방법

    1. 터미널을 켠다
    1. 실행파일(.class)이 있는 bin으로 이동
    • (cd ~/Repository/JAVA_Web/JAVA_tutorials/bin)
    1. java ~/(directory of package) (클래스명) (입력값)
    • java org.java.eclipse.LoginDemo egoing 111111






switch문

if문과 switch문은 서로 대체 가능한 관계.

그렇기에 사용빈도는 적지만, 조건이 많다면 switch문이 로직을 보다 명료하게 보여줄 수 있음

1) 기본 구조

  • switch ~ case

switch(번호)의 번호에 따라 해당 case부터 break를 만날때까지 차례대로 명령어가 실행된다.

아래 코드이 경우 break가 없기 떄문에 2에서 시작했다면 2,3번까지 출력한다.

(case 문법을 보자면 :과 들여쓰기를 통해서 블록이 형성됨을 볼 수 있는데, 파이썬처럼 할 수 있으면서 왜 다른건 괄호쓰냔 말이다.)

switch(2){
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        case 3:
            System.out.println("three");
        }



2) default

switch에 매개변수로 숫자가 입력되었지만, 해당 숫자에 맞는 case가 없다면?

아무 실행 없이 종료할 수 있지만, default를 사용함으로서 최소 한 번 실행할 수 있다.

(if문의 else와 같은 존재!)

switch(3){
    case 1:
        System.out.println("one");
    case 2:
        System.out.println("two");
    default :
        System.out.println("default");
        break;    
}


3) switch 조건 주의점

switch의 조건에는 몇가지 제한된 데이터 타입만을 사용 가능

  • byte, short, char, int, enum, String, Character, Byte, Short, Integer






반복문

반복문에는 대표적으로 while과 for가 존재하며, if와 switch의 관계처럼 대체가능한 관계이다.

1. while

1) 기본구조

조건(true/false)에 따라 언제까지 진행되는지 정해진다.

  • 하지만 조건을 항상 만족하거나 break를 만나지 않으면 무한 반복을 발생시킨다.
while(조건){
    반복 실행 영역;
}

2) 예시

종료조건을 제대로 설정하지 않으면, 무한 반복이나 실행이 되지 않기 떄문에 제대로된 조건설정(시작, 과정, 종료)이 중요하다.

  • 시작 : 아래는 i가 0부터 시작하여

  • 과정 : 1씩 증가하고

  • 종료 : 10을 초과하면 중지를 하게된다.

    • 결과적으로 1부터 9까지 출력된다.(다만 종료시 i는 10임에 주의!)
int i = 0;
// i의 값이 10보다 작다면 true, 크다면 false가 된다. 현재 i의 값은 0이기 때문에  반복문은 실행된다. 
while(i<10){         
    System.out.println(i);
    // i의 값에 1 더한다. 반복문의 중괄호의 마지막 라인에 도달하면 반복문은 반복문을 재호출한다. 이때 i<10 값을 검사하게 된다.
    i++;
}






for문(중요)

while문을 보면 반복의 횟수를 지정하기 위해서 while문 외부에 변수 i의 값을 초기화하고, while문 안에서 i의 값을 증가시키고 있다.

반복문에서 자주 사용하는 이러한 패턴을 문법적인 형태로 만든 것이 for문이다.

1) 기본구조

  • ;(세미콜론)은 2개 사용된다. 쉼표가 아닌 세미콜론임에 주의!

  • 초기화 부분에서 변수(i,j,k,..) 선언과 동시에 초기화해주어도 된다.(파이썬처럼 자료형 빼먹지 마라!)

for(초기화; 종료조건; 반복실행){
    반복적으로 실행될 구문;
}

2) 예시

위 while문에서의 예시와 동일한 결과가 나온다.

0에서 시작해, 1개씩 증가(i++)하며, 10을 초과할 때 종료한다.

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

3) break

반복문을 종료하기 위해 종료조건을 만족시키는 방법도 있지만, break를 통해 for문을 종료할 수도 있다.

이는 switch, while에서도 사용가능하다.

실제 사용 시 break 딱 하나만 사용하기보다, 특정 조건을 만족할 때 사용하기 때문에 보통 if~break로 사용한다.

아래 예시의 경우 0부터 4까지 출력한다.

  • 0부터 시작

  • 1씩 증가하다가

  • 5일 때 종료.(5출력 x)

for (int i = 0; i < 10; i++) {
    if (i == 5)
        break;
    System.out.println(i);
}


4) continue

break는 반복문 자체를 종료시킨다. 그러나 i가 증가 또는 감소하다가 특정 반복에서만 실행되지 않고, 그 이후는 다시 실행되게 하려면?

continue를 사용하면 된다.

아래의 경우에는 5를 제외한 0에서 9까지 출력된다.

  • 0에서 시작

  • 1씩 증가

  • i가 5일 때 continue가 실행되며 그 아래의 명령문은 생략되고, 다음 반복으로 넘어가 i는 6이된다.

    • 만약 if~continue 전에 명령문이 있다면 그 명령문은 실행된다.
  • 6부터 다시 1씩 증가하며 10이 되었을떄 stop!

for (int i = 0; i < 10; i++) {
    if (i == 5)
        continue;
    System.out.println(i);
}

5) for응용1(중첩)

for를 2번 사용하여 00부터 99까지 출력해보자.

for (int i = 0; i <= 9; i++) {
    for (int j = 0; j <=9; j++) {
        System.out.printf("%d%d\n",i,j); # printf 사용방법
        
        System.out.println(i + '' + j); # printf 사용방법
    }
}

6) for응용2(배열)

반복문과 배열을 아주 밀접한 관계를 가지고 있다. 다음 두가지 방법을 통해 알아보자.

한 반의 학생들을 대상으로 상담을 진행할 때 다음과 같이 진행된다.

  • 1반 학생들을 번호순으로 정렬해서 줄을 세운다.

  • 상담받은 학생의 숫자를 기록한다.

  • 대기중인 학생과 상담을 한다.

  • 상담받은 학생의 수를 1 증가시킨다.

  • 총원보다 상담받은 학생의 수가 작다면 3번 절차로 돌아간다.

  • 총원과 상담받은 학생의 수가 같다면 상담을 종료하고 업무를 계속한다.

a. index 활용

String[] members = { "최진혁", "최유빈", "한이람" };
for (int i = 0; i < members.length; i++) {
    String member = members[i];
    System.out.println(member + "이 상담을 받았습니다")
}

b. for-each 활용

for문에서 배열 탐색을 위해 만들어진 문법이다. 이를 통해 더욱 간결하게 코드를 작성할 수 있다.

  • for (String e : members)

  • member배열 안의 값을 문자열 e에 담아서 각 반복마다 사용할 수 있다.

  • 장점 : 배열의 모든 값을 다 탐색할 수 있다.

  • 단점 : 특정 값을 pass하기 어렵다.(index로 하면 특정 예외 조건 처리가 편함)

    public static void main(String[] args) {
        String[] members = { "최진혁", "최유빈", "한이람" };
        for (String e : members) {
            System.out.println(e + "이 상담을 받았습니다");

c. 참고(파이썬)

파이썬의 경우는 for문을 어떻게 활용할까?

나의 경우에는 3가지 방법으로 분류한다.

1,2번은 위의 방법과 같은 개념이다.

3번 방법의 경우는 range를 사용해 그 크기 만큼 0에서부터 만들어주는건데, 자바에서도 이런 문법이 있지 않을까?

    1. for(i=1, 10, 1)
    1. for i in (배열)
    1. for i in range(10)

댓글남기기