1. 조건문
- 조건문(conditional statements) : 조건에 따라 다음 문장 선택적 실행
- 주어진 조건에 따라 참과 거짓으로 구분. true일 때 실행.
- if문, if~else문, 다중 if~else문, switch~case문
1 - 1. if문
- 조건식이 참(true)이면 블록 내의 문장을 처리, 거짓(false)이면 블록을 빠져 나감
- 참 : 1, true
- 거짓 : 0, null, “”, undefined
- if 조건문은 조건의 값이 참인 경우 실행되기 때문에 거짓(0, null, “”, undefined== false)의 조건에서는 실행되지 않음
//실행되지 않는 false의 값을 조건으로 가진 조건문 let num1 = 0; if(num1) {//0 == false alert(num1); } let num2 = null; if(num2) {//null == false alert(num2); } let num3 = ""; if(num3) {//"" == false alert(num3); } let num4 =undefined; if(num4) {//undefined == false alert(num4); } //거짓(0, null, "", undefined== false)의 조건에서는 실행되지 않는다.
- 조건식에 true 값을 직접 대입하면 무조건 처리하도록 제어 가능
-
if문 안에 다른 if문 포함 가능
if(조건식) { 조건이 참인 경우 실행문 } //if문 중복 사용 가능 if(조건식A) { 실행문; if(조건식B) { 실행문; } }
-
간단한 예시
if(111<100) {alert('참입니다.')}; //조건이 거짓임으로 실행X if(0) {alert('참입니다')}; // 0 ==false, 실행x if(1) {alert('참입니다')}; // 1 == true, '참입니다.'알림 실행 const num = 100; if(num>99) {alert(num+'은 99보다 큽니다.')}; //참이므로 실행 if(num!=99) {alert(num+'와 99는 같지 않습니다.')}; //참이므로 실행
-
입력창(prompt)에 하루 걸음 수를 입력 받아 6000보 이상인 경우 ‘좋은 습관을 가지고 있습니다.’ 출력하기
const walk = prompt('하루에 걷는 걸음 수를 입력하시오.'); if(walk>=6000){ //참이면 alert('좋은 습관을 가지고 있습니다.');//출력 } if(walk<6000) { alert('운동이 필요합니다.') };
1 - 2. if~else문
- 조건식이 참(true)인 경우와 거짓(false)인 경우 처리할 문장이 각각 따로 있을 때 사용
- 조건식이 2가지 결과값을 명확히 제어하고자 할 때 사용
-
if~else문 역시 다른 if~else문을 포함하여 작성 가능
if(조건식) {//조건이 참인 경우 실행문;//실행 } else {//위의 조건이 거짓인 경우 실행문;//실행 }
- 간단한 예시
- 숫자를 받아 짝수인지 홀수인지 출력
const num = prompt('숫자를 입력하시오.'); if(num % 2 == 0){ alert('짝수입니다.');} else { alert('홀수입니다.');}
- 예/아니오 버튼 클릭 결과값에 따른 조건문
let member = confirm('회원 탈퇴를 하시겠습니까?'); if(member) {//확인 버튼 클릭시 == true alert('탈퇴 처리가 되었습니다.'); } else {//취소 버튼 클릭시 == false alert('탈퇴 취소 되었습니다.'); }
1 ) 나이가 19세 이상이면 성인, 미만이면 미성년자로 구분하는 프로그램
let age = prompt('당신의 나이를 입력해 주세요'); if(age>=19) {// result="성인입니다."; } else { result="미성년자입니다."; }
2 ) 주어진 변숫값을 판별하여 남자인지 여자인지, 성인인지 미성년자인지 구분하는 프로그램
var gender = "M"; //남자(M), 여자(F) var age = 21; if(gender == "M") { if(age>=19) { result="남자 성인입니다."; } else { result="남자 미성년자입니다."; } } else { if(age>=19) { result="여자 성인입니다."; } else { result="여자 미성년자입니다."; } } document.write("당신은 "+result);
3 ) 로그인 프로그램 (ID=admin, PW=123456)
- HTML 문서
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> </head> <body> <p>아이디, 비밀번호 입력</p> <script src="스크립트 경로 혹은 주소"></script> </body> </html>
- ID, PW 입력 자바스크립트
const id = "web", pw = "123456"; //id: "web" //pw: "123456" const user_id = prompt('아이디를 입력하세요.'); if (user_id == id) { const user_pw = prompt('비밀번를호 입력하세요.'); if(user_pw === pw) { location.href="login_page.html" //로그인 성공시 페이지 html 만들어서 연결 } else { location.href="login_fail_page.html"//로그인 실패시 페이지 만들어서 연결 } else { location.href="login_fail_page.html"; }
4 ) 입력한 걸음 수가 6000 이상이면 ‘좋은 습관을 가지고 있습니다.’ 출력 / 입력한 값이 6000미만이면 ‘운동이 필요합니다.’ 출력
const walk = prompt('하루에 걷는 걸음은 몇 보 입니까?'); if (walk >= 6000) { alert('좋은 습관을 가지고 있습니다.'); } else { alert('운동이 필요합니다.'); }
1 - 3. 다중 if~else문 (else if)
- 여러 조건을 체크해야 할 때 사용
-
다중 if~else 문은 최악의 경우 마지막 else문에 도달할 때 까지 모든 조건식을 체크, 다중 선택이 많아지면 프로그램이 길어져 전체적인 흐름 파악 어려움 ⇒ switch ~ case 문은 이를 보완하는 다중 선택문
if(조건식a) { 조건식a의 결과가 참일 때, 실행 문장; } else if(조건식b) { 조건식b의 결과가 참일 때, 실행 문장; } else { 위의 모든 조건을 만족시키지 못한 경우 실행 조건식a, 조건식b 모두 거짓일 때, 실행 문장; }
-
0~100점 중 어떤 점수대에 포함되는지에 따라 학점을 A~F 5단계로 나누어 부여하는 학점 환산 프로그램
//90점 이상 A, 80점 이상 B, 70점 이상 C, 60점 이상 D, 그 이하는 F //입력한 점수와 함께 등급 출력 let score = prompt('점수를 입력해 주세요.'); score = Number(score); let grade; //등급 선언. 대입x if(score>=90 && score<=100) { grade = "A"; } else if(score>=80 && score<=89) { grade = "B"; } else if(score>=70 && score<=79) { grade = "C"; } else if(score>=60 && score<=69) { grade = "D"; } else { grade = "F"; } document.body.innerHTML = '<h1>'+score+'점은 '+grade+'입니다.'+'</h1>';
1 - 4. switch ~ case 문
- 다중 if~else 문은 최악의 경우 마지막 else문에 도달할 때 까지 모든 조건식을 체크, 다중 선택이 많아지면 프로그램이 길어져 전체적인 흐름 파악 어려움 ⇒ switch ~ case문은 이를 보완하기 위해 사용하는 다중 선택문.
- 조건문을 체크하여 다음에 처리할 문장의 위치 파악 후 바로 해당 문장 처리
- 전체 조건식 체크할 필요가 없어 실행 속도가 다중 if~else문 보다 빠르다.
- switch(상수값) : 상수값으로 수치 또는 문자를 사용, 다음에 처리할 문장이 몇번째 case문에 해당하는지 표시
- case n ~ default: case 다음에는 수치나 문자, 그 다음에는 꼭 클론(;)
case에 해당하는 경우가 없으면 마지막 default문 수행
default 문에는 어떤 case문에도 해당하지 않는 경우에 처리할 문장 작성
default문을 작성할 필요가 없다면 사용하지 않아도 됨 -
switch ~ case문 기본 형식
//switch 선택문 : 특정 값과 비교하여 참인 경우 실행 switch(비교값) { case 비교할 값1: 실행문; break;//비교값이 참인 경우 다음으로 넘어가지 않고 구문을 벗어남 case 비교할 값2: 실행문; break; default://위의 비교값과 일치하는 값이 없는 경우 실행. else와 같은 역할, 생략 가능 }
-
간단한 예시
let num = prompt('1~4까지의 숫자 중 하나만 작성하세요.'); num = Number(num); switch(num) {//비교 값에는 숫자, 문자열, 변수명 등등이 들어감 case 1: alert('숫자 1입니다.'); break; case 2: alert('숫자 2입니다.'); break; case 3: alert('숫자 3입니다.'); break; case 4: alert('숫자 4입니다.'); break; default: alert('1~4 사이의 숫자만 입력해 주세요.'); break; }
예시
1) 원하는 사이트 입력시 해당 사이트로 이동
//window.location.href = ""; 사이트 이동 //새창으로 띄울 땐 window.open('about:blank').location.href="주소"; 팝업창으로 띄우기 let site=prompt("네이버, 구글, 다음 중 원하는 사이트를 입력하세요."); let url; switch (site) { case "네이버": //window.open('about:blank').location.href="https://www.naver.com"; url = "naver.com"; break; case "구글": //window.location.href="https://www.google.com"; url = "google.com" break; case "다음": //window.location.href="https://www.daum.net"; url = "daum.net" break; default: alert("제시된 사이트만 입력해 주세요.") } console.log(url); if(url) {//url 데이터가 있는 경우만 실행 window.oepn("about:blank").location.href = "https://www." + url; }
2) 1~4번 사이의 번호 입력시, 해당 번호의 이미지 출력 / 다른 번호 선택시, “1~4번 사이의 번호만 입력해주세요.” 출력
const num =prompt("1~4번 사이의 번호를 입력해주세요."); switch (num) { case "1": document.body.innerHTML= "<img src='images/01.jpg' alt='dog'>"; break; case "2": document.body.innerHTML= "<img src='images/02.jpg' alt='cat'>"; break; case "3": document.body.innerHTML= "<img src='images/03.jpg' alt='whitedog'>"; break; case "4": document.body.innerHTML= "<img src='images/04.jpg' alt='jjang9'>"; break; default : alert("1~4번 사이의 숫자만 선택해 주세요."); window.location.reload();//새로고침 }
3) 입력받은 숫자가 짝수인지 홀수인지 알림
let num = prompt("숫자를 입력해 주세요."); //입력 받은 값이 홀수인 경우 "입력한 값 ..은/는 홀수 입니다." 출력 //입력 받은 값이 짝수인 경우 "입력한 값 ..은/는 짝수 입니다." 출력 //숫자 외의 값 입력시 "숫자만 입력해 주세요" 출력 switch(num % 2) {//문자열이지만 식을 통해 자동으로 숫자로 변환되어 연산 -> 숫자형 데이터 case 0://입력 받은 값이 짝수인 경우 alert("입력한 값 "+num+"은/는 짝수입니다."); break; case 1://입력 받은 값이 홀수인 경우 alert("입력한 값 "+num+"은/는 홀수입니다."); break; default: alert("숫자만 입력해 주세요."); }
4) 4가지 음료 중 입력받은 음료의 가격 출력
//아메리카노:10000, 카페라떼:16000, 카페모카:17000, 바닐라라떼:20000 //입력 받은 커피명을 통해 가격을 출력 //"주문한 ..은/는 ..원입니다." 출력 let coffee = prompt("아메리카노, 카페라떼, 카페모카, 바닐라라떼 중 선택해 주세요."); let price = ""; /* 변수 초기화 1. 숫자 변수 초기화 let num = 0; 2. 문자열 변수 초기화 let txt = ""; 3. 논리 변수 초기화 let bool = false; 4. 객체 변수 초기화 let obj = null; */ switch (coffee) { case "아메리카노": // alert("주문한 "+coffee+"는 10,000원입니다."); // document.write("주문한 아메리카노는 10,000원입니다."); price = "10,000"; break; case "카페라떼": // alert("주문한 "+coffee+"는 16,000원입니다."); price = "16,000"; break; case "카페모카": // alert("주문한 "+coffee+"는 17,000원입니다."); price = "17,000"; break; case "바닐라라떼": // alert("주문한 "+coffee+"는 20,000원입니다."); price = "20,000"; break; default: alert("제시된 커피명만 입력해주세요."); } if(price) { document.body.innerHTML = "<h1>주문한 " + coffee + "는" + price+"원입니다.</h1>"; }
5) 중첩 switch~case문 사용하여, 아이디를 입력 받아 참인 경우 비밀번호를 입력받고 비밀번호도 참인 경우 ‘로그인되었습니다.’ 출력
let id = 'jw'; let pw = 1234; let user_id = prompt('아이디를 입력해주세요.'); switch(user_id == id) {//true case true: alert('아이디가 일치합니다.'); let user_pw = prompt('비밀번호를 입력해주세요.'); //입력받은 문자열 user_pw = Number(user_pw);//숫자형의 문자를 숫자로 변환 switch(user_pw) { case 1234://케이스 값은 숫자 alert('로그인되었습니다.'); break; default: alert('비밀번호가 틀렸습니다.'); } break;//비교값이 실행되면 다음을 읽지 않고 구문을 빠져 나옴 default: alert('아이디가 불일치합니다.'); }