조건문 - if, switch

양성빈·2022년 6월 6일
post-thumbnail

참고
자바의 정석

우리는 이제까지 코드의 흐름을 맨 위에서 아래로만 순차적으로 진행을 해왔다. 하지만 때때로 특정조건일때만 실행시켜야하는 것도 있을 것이도 특정조건이 될때까지 반복을 시켜주는 문장도 있어야 할 것이다. 이처럼 프로그램의 흐름을 바꾸는 역할을 하는 문장들을 제어문이라고 하며 제어문에는 조건문과 반복문이 존재한다.

조건문 - if, switch

조건문에는 if문과 switch문이 존재하고 주로 if문을 많이 사용한다. 처리할 경우의 수가 많을 때는 if문보다 switch문이 효율적이지만, switch문은 if문보다 제약이 많다.

if문

  • if문은 가장 기본적인 조건문이며 조건식과 괄호로 이루어진다.
  • 만일 조건식이 참이라면 괄호안에 있는 코드를 실행시켜주는 역할을 한다.
if (조건문) {
	// 조건식이 참일 때 수행될 문장들을 적는다.
}

조건식

  • if문에 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성된다.

블록 {}

  • 괄호 {}를 이용해서 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 블럭이라고 한다.
  • 블럭 뒤에 ';'을 작성하지 않는다.
  • 블럭 안에는 보통 여러 문장을 넣지만 한 문장만 넣거나 아무런 문장도 넣지 않을 수 있다. 이 때는 괄호를 생략이 가능하다.
  • 하지만 필자 생각은 괄호를 무조건 적어주는 것이 좋은 습관이라고 생각을 한다. 나중에 추가적으로 블록 안에 작성해야할 코드들이 생길수 있기 때문이다.

if-else문

  • if-else 구조는 기존의 if구조에 else문이 추가된 것이다.
  • else는 조건식의 결과가 참이 아닐 때 else 블럭의 코드들을 수행한다.
if (조건식) {
	// 조건식이 참일 때 수행될 코드들을 작성한다.
} else {
	// 조건식이 거짓일 때 수행 될 문장들을 작성한다.
}
  • 서로 상반된 코드를 가진 if문 2개를 if-else로 바꿀수 있다. 하지만 항상 if문 2개를 if-else 2개로 바꿀 수 있는것은 아니다.

if-else if문

  • if-else문은 2가지 경우 중 1개가 수행된는 구종인데, 처리해야할 경우의 수가 3가지 이상이라면 if-else if문을 사용하면 된다.
if (조건식) {
	// 조건식이 참일 때 수행될 코드들을 작성한다.
} else if (조건식2) {
	// 조건식2가 참일 때 수행 될 문장들을 작성한다.
} else if (조건식3) {
	// 조건식3이 참일 때 수행 될 문장들을 작성한다.
} else {
	// 어느 조건도 해당되지 않을때 수행
}

중첩 if문

  • if문 블럭내에 또 다른 if문을 포함시키는 것이 가능하며, 중첩 횟수는 제한이 없다.
if (조건식) {
	// 조건식이 참일 때 수행될 코드들을 작성한다.
    if (조건식2) {
	// 조건식2이 참일 때 수행 될 문장들을 작성한다.
    } else {
        // 어느 조건도 해당되지 않을때 수행
    }
} else {
	// 조건식이 거짓일 때 수행 될 문장들을 작성한다.
}

switch문

  • 여러가지 조건식이 있는 경우 if-else if문으로 처리를 하다보면 너무 코드의 길이가 증가한다. 또한 가독성도 좋지를 못해서 보기도 힘들며 처리시간도 많이 걸린다.
  • 이러한 if문과 달리 swich문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽다.
  • 처리할 경우의 수가 많은 경우는 if문보다 switch문을 작성하는 것이 좋다. 하지만, switch문은 제약조건이 있기 때문에 어쩔수 없이 if문으로 처리해야할 경우가 생긴다.

switch문 처리순서
1. 조건식을 계산한다.
2. 조건식의 결과와 일치하는 case문으로 이동한다.
3. 이후의 문장들을 수행한다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

  • 만일 조건식의 결과와 일치하는 case문이 없으면 default문으로 이동한다. default문이나 case문 마지막에는 break 키워드를 작성하지 않아도 된다.
  • 단, 다른 곳에는 case문 안에 break문을 작성해줘야 한다. 그렇지 않으면 예상하지 못한 결과를 얻게 될것이다.

switch문 제약 조건

  • switch문 조건식은 결과 값이 반드시 정수여야한다.
  • 또한 case문 값도 정수여야 한다. 그리고 중복되지 않아야 한다.
  • 게다가 case문 값은 반드시 상수여야 하며, 변수나 실수, 문자열로는 case문 값으로 사용할 수 없다.
  • JDK1.7이후부터는 case문이나 조건식 결과 값이 문자열도 가능해졌다.

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

switch문 주의 사항

  • 속도를 반드시 향상시켜야한다고 하면 가독성을 무시하고 switch문을 사용하는것이 맞지만, 왠만하면 if문을 사용하여 하는 경우가 더 올바른 선택이라고 필자는 생각한다.

switch문의 중첩

  • if문처럼 switch문 중첩도 가능하다. 하지만, 1가지 주의할 점은 break문을 빼먹기 쉬우므로 필자는 중첩 switch문은 지양을 하는것을 권한다.
profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글