[Java] 자바의 정석 4장 회고 - 조건문

토닉·2021년 8월 23일
0

Java

목록 보기
4/13
post-thumbnail

조건문

프로그램의 흐름을 바꾸는 역할(제어문)

조건문

if

조건식이 true 일 때 {} 블럭안에 코드를 실행합니다.

python에서 사용했던 조건문과 사용법은 동일하지만 다른 점이 있다면 자바는 블럭이 있습니다.

b = True

if b:
    print("b는 true입니다.")
boolean b = true;

if (b){
    System.out.println("b는 true입니다.");
}

python에서는 조건식이 true일 때 실행할 코드를 indent로 구별하여 실행합니다.
java는 {}안의 코드를 실행하는 차이점이 있습니다.

java에서는 크게 3가지의 조건식의 표현법이 있습니다.

  1. 한 줄일 때
boolean b = true;

if(b) System.out.println("b는 true입니다.");
  1. 블럭의 시작과 끝을 찾기 쉽게 하고 싶을 때
boolean b = true;

if (b)
{
    System.out.println("b는 true입니다.");
}
  1. 라인의 수를 줄이고 싶을 때
boolean b = true;

if (b){
    System.out.println("b는 true입니다.");
}

개인적으로는 3번의 형식이 익숙해서 3번의 방법을 자주 사용할 것 같습니다 ㅎㅎ

블럭 {} , scope 란?
스코프란 단순히 얘기하자면 변수를 사용할 수 있는 범위입니다.
보통 {}안에 선언된 변수는 선언된 {} 안에서 사용할 수 있습니다.
어떤 스코프에 선언될 때마다 변수의 특성이 변하게 됩니다.
1. 전역 변수
클래스 영역에서 선언한 변수로 클래스안에 어디에서나 사용이 가능합니다.(메소드에서도!)
2. 지역 변수
메소드 영역에서 선언한 변수로 해당 메소드에서만 사용이 가능합니다.

단! 예외적으로 메인 메소드에서는 메인 메소드가 있는 변수에 바로 접근할 수 없습니다.
예시를 하나 들면

class Ex4_7 {
// 전역 변수
	String sClassVal = "Class Value";
	static String staticClassVal = "static class value";
	
	public void method1(){
		String sMethodVal = "Method Value";
		System.out.println("sMethodVal = " + sMethodVal);
	}
	
	public static void main(String args[]) {
		// System.out.println("sClassVal = " + sClassVal); 전역변수이지만 에러..
		System.out.println("staticClassVal = " + staticClassVal);
		Ex4_7 e = new Ex4_7(); // 객체화 후 호출 가능
		System.out.println("sClassVal = " + e.sClassVal);
	}
}

위 코드를 실행해보면 sClassVal이 호출이 되지 않습니다.
메인 메소드에서는 같은 클래스 범위에 선언된 전역변수라도 따로 클래스를 객체화한 후에 호출이 가능합니다.
또 다른 방법은 변수에 static을 붙여주면 사용가능합니다.

다시 조건문으로~

if문에는 항상 같이 오는 else 문과 else if 문이 있습니다. python에서는 elif로 사용되는 부분이 바로 else if문 입니다.
else와 else if문도 각각 scope가 있고 사용방법은 코드를 보시면 이해하기 편합니다.

class TestIf {
    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 {
        	System.out.println("C");
        }
    }
}

위 코드에서는 score가 85이므로 B 가 출력될 것입니다.
if문은 중첩으로도 사용이 가능합니다. 이 때 주의할 점은 java에서는 {}로 scope를 지정할 수 있지만 생략도 가능하기 때문에 왠만하면 {}를 잘 써주는게 좋습니다.

if (true)
    if (true)
        System.out.println("안쪽 if문 true");
else
    System.out.println("바깥쪽 if문의 else");

위 코드는 사실 아래처럼 실행됩니다.

if (true){
    if (true){
        System.out.println("안쪽 if문 true");
	} else{
    	System.out.println("바깥쪽 if문의 else");
    }
}

switch문

if 문은 true와 false로 가지고 있는 경우의 수가 2가지입니다. 경우의 수가 많아진다면 else if문을 계속 추가하고 조건식이 많아지기 때문에 복잡해지고 처리시간이 오래 걸릴 수 있습니다.
switch문은 이러한 if문과 달리 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 알아보기 쉽습니다. 단 switch 문에는 제약조건이 있습니다.

제약 조건
1. switch 문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case 문의 값은 정수, 문자열, 상수(정수,문자열)만 가능하고 중복되지 않는다.

if문과 달리 조건식에서 true,false가 아닌 정수 또는 문자열을 반환하고 이 값의 해당하는 case문들로 이루어져 있습니다.

public static void main(String[] args){
  int number = 0;

  switch(number){
      case 1:
          System.out.println("숫자는 1");
          break;
      case 2:
          System.out.println("숫자는 2");
          break;
      case 3:
          System.out.println("숫자는 3");
          break;

  }
}
profile
우아한테크코스 4기 교육생

0개의 댓글