자바 if else - jaba if else

Dreaming Coder 2021. 11. 23. 22:26


지난 포스트에서 배운 if-else문을 이용한 문제 3가지를 풀어보겠습니다.

지난 포스트

자바, 조건문 if-else문

지난 글에 이어서 이번에도 조건문을 배워보겠습니다. 이번에 배울 내용은 if-else문입니다. 지난 포스트 자바, 조건문이란? (feat. 단순 if문) 조건문을 배우기 시작하면 지금까지 배웠던 것들에 비

gogogameboy.tistory.com

자바 if else - jaba if else

합격 or 불합격

int 타입의 변수 grade를 선언하고 키보드로 값을 입력받으세요.

만약 grade가 60점 이상이면 "합격입니다.", grade가 60점 미만이면 "불합격입니다."를 출력하는 프로그램을 작성해보세요.

위의 소스 코드는 PC에서 드래그 후,
ctrl+x로 잘라내서 다른 곳으로 붙여넣기가 가능합니다.
ctrl+c(복사)는 불가능합니다.

딱히 설명할 필요는 없는 것 같아서 넘어갑니다.

한 과목이라도 8점 미만인 경우 불합격

자바 if else - jaba if else

정보처리기사의 각 과목의 정답 개수를 int형 타입의 변수 5개를 선언하고 입력받으세요.

60점 이상 합격이지만, 한 과목이라도 8점 미만인 경우 불합격입니다.

위의 소스 코드는 PC에서 드래그 후,
ctrl+x로 잘라내서 다른 곳으로 붙여넣기가 가능합니다.
ctrl+c(복사)는 불가능합니다.

한 과목이라도 8점 미만이라면 불합격이니 각 과목의 점수를 다 알아야 합니다.

그래서 다섯 과목 모두 변수 선언을 해줬습니다.

if의 조건문 안에는 전에 배웠던 논리연산자가 사용되었습니다.

자바, 논리연산자

논리연산자에 대해서 알아봅시다. 개인적으로 논리연산자는 지난번에 공부했던 굉장히 쉬운 '증감연산자, 비교연산자' 보다는 조금 헷갈렸습니다. 지난 포스트 자바, 비교연산자 이번에는 비교

gogogameboy.tistory.com

자바 if else - jaba if else

논리연산자에 대해서는 위의 포스트에서 확인하실 수 있습니다.

마트 계산대 프로그램

자바 if else - jaba if else

마트 계산대 프로그램입니다.

10,000원짜리 추석선물세트를 구입했을 때 지불해야 하는 금액을 계산해보세요.

단, 11개 이상 구매 시에는 10% 할인이 됩니다.

위의 소스 코드는 PC에서 드래그 후,
ctrl+x로 잘라내서 다른 곳으로 붙여넣기가 가능합니다.
ctrl+c(복사)는 불가능합니다.

다음 포스트

자바, 조건문 다중 if-else문

조건문 중에서 세 번째로 배울 조건문은 다중 if-else문입니다. 지난 포스트 자바, 조건문 if-else문 실습 3가지 지난 포스트에서 배운 if-else문을 이용한 문제 3가지를 풀어보겠습니다. 지난 포스트

gogogameboy.tistory.com

자바 if else - jaba if else

이 글이 도움이 됐다면 하단의 공감 버튼을 꾹 눌러서
빨간 하트로 만들어주세요.
지인에게 보여주고 싶은 글이었다면
공감 버튼 옆을 클릭해서 SNS 공유해주세요.
댓글은 블로그 운영에 큰 힘이 됩니다.


조건에 따라 다른 행동을 취해야 할 때가 있습니다.

이럴 땐, if문과 ‘물음표’ 연산자라고도 불리는 조건부 연산자 ?를 사용하면 됩니다.

'if’문

if(...)문은 괄호 안에 들어가는 조건을 평가하는데, 그 결과가 true이면 코드 블록이 실행됩니다.

예시:

let year = prompt('ECMAScript-2015 명세는 몇 년도에 출판되었을까요?', '');

if (year == 2015) alert( '정답입니다!' );

위 예시에선 조건(year == 2015)이 간단한 경우만 다뤘는데, 조건문은 더 복잡할 수도 있습니다.

조건이 true일 때 복수의 문을 실행하고 싶다면 중괄호로 코드 블록을 감싸야 합니다.

if (year == 2015) {
  alert( "정답입니다!" );
  alert( "아주 똑똑하시네요!" );
}

if문을 쓸 때는 조건이 참일 경우 실행되는 구문이 단 한 줄이더라도 중괄호 {}를 사용해 코드를 블록으로 감싸는 것을 추천해 드립니다. 이렇게 하면 코드 가독성이 증가합니다.

불린형으로의 변환

if (…) 문은 괄호 안의 표현식을 평가하고 그 결과를 불린값으로 변환합니다.

형 변환 챕터에서 배운 형 변환 규칙을 잠시 상기해 봅시다.

  • 숫자 0, 빈 문자열"", null, undefined, NaN은 불린형으로 변환 시 모두 false가 됩니다. 이런 값들은 ‘falsy(거짓 같은)’ 값이라고 부릅니다.
  • 이 외의 값은 불린형으로 변환시 true가 되므로 ‘truthy(참 같은)’ 값이라고 부릅니다.

이 규칙에 따르면 아래 예시의 코드 블록은 절대 실행되지 않습니다.

if (0) { // 0은 falsy입니다.
  ...
}

아래 예시의 코드 블록은 항상 실행됩니다.

if (1) { // 1은 truthy입니다.
  ...
}

아래와 같이 평가를 통해 확정된 불린값을 if문에 전달할 수도 있습니다.

let cond = (year == 2015); // 동등 비교를 통해 true/false 여부를 결정합니다.

if (cond) {
  ...
}

'else’절

if문엔 else 절을 붙일 수 있습니다. else 뒤에 이어지는 코드 블록은 조건이 거짓일 때 실행됩니다.

예시:

let year = prompt('ECMAScript-2015 명세는 몇 년도에 출판되었을까요?', '');

if (year == 2015) {
  alert( '정답입니다!' );
} else {
  alert( '오답입니다!' ); // 2015 이외의 값을 입력한 경우
}

'else if’로 복수 조건 처리하기

유사하지만 약간씩 차이가 있는 조건 여러 개를 처리해야 할 때가 있습니다. 이때 else if를 사용할 수 있습니다.

예시:

let year = prompt('ECMAScript-2015 명세는 몇 년도에 출판되었을까요?', '');

if (year < 2015) {
  alert( '숫자를 좀 더 올려보세요.' );
} else if (year > 2015) {
  alert( '숫자를 좀 더 내려보세요.' );
} else {
  alert( '정답입니다!' );
}

위 예시에서, 자바스크립트는 조건 year < 2015를 먼저 확인합니다. 이 조건이 거짓이라면 다음 조건 year > 2015를 확인합니다. 이 조건 또한 거짓이라면 else 절 내의 alert를 실행합니다.

else if 블록을 더 많이 붙이는 것도 가능합니다. 마지막에 붙는 else는 필수가 아닌 선택 사항입니다.

조건부 연산자 ‘?’

조건에 따라 다른 값을 변수에 할당해줘야 할 때가 있습니다.

예시:

let accessAllowed;
let age = prompt('나이를 입력해 주세요.', '');

if (age > 18) {
  accessAllowed = true;
} else {
  accessAllowed = false;
}

alert(accessAllowed);

'물음표(question mark) 연산자’라고도 불리는 '조건부(conditional) 연산자’를 사용하면 위 예시를 더 짧고 간결하게 변형할 수 있습니다.

조건부 연산자는 물음표?로 표시합니다. 피연산자가 세 개이기 때문에 조건부 연산자를 '삼항(ternary) 연산자’라고 부르는 사람도 있습니다. 참고로, 자바스크립트에서 피연산자를 3개나 받는 연산자는 조건부 연산자가 유일합니다.

문법:

let result = condition ? value1 : value2;

평가 대상인 condition이 truthy라면 value1이, 그렇지 않으면 value2가 반환됩니다.

예시:

let accessAllowed = (age > 18) ? true : false;

age > 18 주위의 괄호는 생략 가능합니다. 물음표 연산자는 우선순위가 낮으므로 비교 연산자 >가 실행되고 난 뒤에 실행됩니다.

아래 예시는 위 예시와 동일하게 동작합니다.

// 연산자 우선순위 규칙에 따라, 비교 연산 'age > 18'이 먼저 실행됩니다.
// (조건문을 괄호로 감쌀 필요가 없습니다.)
let accessAllowed = age > 18 ? true : false;

괄호가 있으나 없으나 차이는 없지만, 코드의 가독성 향상을 위해 괄호를 사용할 것을 권유합니다.

주의:

비교 연산자 자체가 truefalse를 반환하기 때문에 위 예시에서 물음표 연산자를 사용하지 않아도 됩니다.

// 동일하게 동작함
let accessAllowed = age > 18;

다중 ‘?’

물음표 연산자?를 여러 개 연결하면 복수의 조건을 처리할 수 있습니다.

예시:

let age = prompt('나이를 입력해주세요.', 18);

let message = (age < 3) ? '아기야 안녕?' :
  (age < 18) ? '안녕!' :
  (age < 100) ? '환영합니다!' :
  '나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!';

alert( message );

물음표 연산자를 이런 방식으로 쓰는 걸 처음 본 분이라면 이 코드가 어떻게 동작하는지 파악하기 힘들 수 있습니다. 그러나 주의를 집중하고 보면, 단순히 여러 조건을 나열한 코드임에 불과하다는 것을 알 수 있습니다.

  1. 첫 번째 물음표에선 조건문 age < 3을 검사합니다.
  2. 그 결과가 참이면 '아기야 안녕?'를 반환합니다. 그렇지 않다면 첫 번째 콜론 ":"에 이어지는 조건문 age < 18을 검사합니다.
  3. 그 결과가 참이면 '안녕!'를 반환합니다. 그렇지 않다면 다음 콜론 ":"에 이어지는 조건문 age < 100을 검사합니다.
  4. 그 결과가 참이면 '환영합니다!'를 반환합니다. 그렇지 않다면 마지막 콜론 ":" 이후의 표현식인 '나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!'를 반환합니다.

if..else를 사용하면 위 예시를 아래와 같이 변형할 수 있습니다.

if (age < 3) {
  message = '아기야 안녕?';
} else if (age < 18) {
  message = '안녕!';
} else if (age < 100) {
  message = '환영합니다!';
} else {
  message = '나이가 아주 많으시거나, 나이가 아닌 값을 입력 하셨군요!';
}

부적절한 ‘?’

물음표?if 대용으로 쓰는 경우가 종종 있습니다.

let company = prompt('자바스크립트는 어떤 회사가 만들었을까요?', '');

(company == 'Netscape') ?
   alert('정답입니다!') : alert('오답입니다!');

조건 company == 'Netscape'의 검사 결과에 따라 ? 뒤에 이어지는 첫 번째 혹은 두 번째 표현식이 실행되어 얼럿 창이 뜹니다.

위 예시에선 평가 결과를 변수에 할당하지 않고, 결과에 따라 실행되는 표현식이 달라지도록 하였습니다.

그런데 이런 식으로 물음표 연산자를 사용하는 것은 좋지 않습니다.

개발자 입장에선 if문을 사용할 때 보다 코드 길이가 짧아진다는 점 때문에 물음표?if 대용으로 쓰는 게 매력적일 순 있습니다. 하지만 이렇게 코드를 작성하면 가독성이 떨어집니다.

아래는 if를 사용해 변형한 코드입니다. 어느 코드가 더 읽기 쉬운지 직접 비교해 보시기 바랍니다.

let company = prompt('자바스크립트는 어떤 회사가 만들었을까요?', '');

if (company == 'Netscape') {
  alert('정답입니다!');
} else {
  alert('오답입니다!');
}

코드를 읽을 때 우리의 눈은 수직으로 움직입니다. 수평으로 길게 늘어진 코드보단 여러 줄로 나뉘어 작성된 코드 블록이 더 읽기 쉽죠.

물음표 연산자?는 조건에 따라 반환 값을 달리하려는 목적으로 만들어졌습니다. 이런 목적에 부합하는 곳에 물음표를 사용하시길 바랍니다. 여러 분기를 만들어 처리할 때는 if를 사용하세요.

과제

중요도: 5

아래 코드에서 alert는 실행될까요?

if ("0") {
  alert( 'Hello' );
}

네, 실행됩니다.

비어있는 문자열을 제외한 모든 문자열은 논리 평가 시 true를 반환합니다. 문자 "0"은 비어있지 않은 문자열입니다.

직접 실행해서 그 결과를 확인해 보시기 바랍니다.

if ("0") {
  alert( 'Hello' );
}

중요도: 2

if..else 구조를 이용해 "자바스크립트의 ‘공식’ 이름은 무엇일까요?"라는 질문을 하는 코드를 작성해 보세요.

사용자가 'ECMAScript’를 입력했다면 ‘정답입니다!’, 아니라면 '모르셨나요? 정답은 ECMAScript입니다!'라는 메시지를 보여주세요.

새 창에서 데모 보기

<!DOCTYPE html>
<html>

<body>
  <script>
    'use strict';

    let value = prompt("자바스크립트의 '공식' 이름은 무엇일까요?", '');

    if (value == 'ECMAScript') {
      alert('정답입니다!');
    } else {
      alert("모르셨나요? 정답은 ECMAScript입니다!");
    }
  </script>


</body>

</html>

중요도: 2

if..else프롬프트 대화상자를 사용해 사용자로부터 숫자 하나를 입력받고, 아래 조건에 따라 그 결과를 alert 창에 출력해 보세요.

  • 입력받은 숫자가 0보다 큰 경우 1을 출력
  • 입력받은 숫자가 0보다 작은 경우 -1을 출력
  • 입력받은 숫자가 0인 경우 0을 출력

(사용자는 항상 숫자를 입력한다고 가정)

새 창에서 데모 보기

let value = prompt('숫자를 입력하세요.', 0);

if (value > 0) {
  alert( 1 );
} else if (value < 0) {
  alert( -1 );
} else {
  alert( 0 );
}

중요도: 5

조건부 연산자 '?'를 이용해 if문이 사용된 아래 코드를 변형해보세요. 동작 결과는 동일해야 합니다.

let result;

if (a + b < 4) {
  result = '미만';
} else {
  result = '이상';
}

let result = (a + b < 4) ? '미만' : '이상';

중요도: 5

조건부 연산자 '?'를 사용해 if..else문이 사용된 아래 코드를 변형해보세요. 동작 결과는 동일해야 합니다.

가독성을 위해 표현식을 여러 줄로 분할해 작성해 보시길 바랍니다.

let message;

if (login == '직원') {
  message = '안녕하세요.';
} else if (login == '임원') {
  message = '환영합니다.';
} else if (login == '') {
  message = '로그인이 필요합니다.';
} else {
  message = '';
}

let message = (login == '직원') ? '안녕하세요.' :
  (login == '임원') ? '환영합니다.' :
  (login == '') ? '로그인이 필요합니다.' :
  '';