프론트엔드/Javascript

JS - 이클립스에 연결 / 조건문 / confirm 함수

두개의 문 2023. 7. 25. 12:47

▪︎ 이클립스에서 JavaScript 연결

 

  • templates폴더 

  • webapp/WEB-INF/view : 동적 자료들의 루트 경로 → JSP 파일 

  • webapp/WEB-INF/view/static : 정적 자료들의 루트 경로 

     webapp/WEB-INF/view/static/js 

     webapp/WEB-INF/view/static/css

     webapp/WEB-INF/view/static/images

 

전체적인 폴더 구조

 

 

 

▪︎ 이클립스의 경우, 전체적인 url주소가 아닌 경우 Ctrl 지원 안됨 → 수동으로 폴더 및 파일 생성해야 함 

  - static js폴더 생성 - new - javascript 파일 생성 

 

 

 

▪︎ Javascript 작업의 경우, VSC에서 해당 폴더 열어서 작업하기 

   VSC의 경우, JSTL 및 EL 구문 인식하지 못함 → JSP 작업은 이클립스에서 진행 

 

※ 일관성있게 HTML 태그 속성에서는 큰따옴표 / 자바스크립트 문자열에서는 작은따옴표 사용 권장 

 

 

 


▪︎ index.jsp에 CSS 및 JavaScript 연결 

   <title> 태그 아래에 작성 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="css/ch03.01.css" rel="stylesheet" >
<script src='js/ch03.01.js'></script>
</head>
<body>
<h1>안녕하세요</h1>
<div id="divImg1">
    <img src= "images/tulip.jpg" />
</div>
<div id="divImg2">
    <img src= "images/icecream.jpg" />
</div>
</body>
</html>

 

 

 

▪︎ 이클립스에서 HelloController 생성 

package org.choongang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

// view template : 서버 쪽에서 HTML 화면 코드를 만드는 것
// view template(view page) 생성 시, 사용하는 서버 쪽 라우터 매핑 어노테이션 
@Controller 
public class HelloController {
	// 매핑 메서드 
	// → 요청방식 + 요청주소 uri
	@GetMapping("/")
	public String home() {
		// 브라우저에서 '/' uri로 요청 시, 'index.jsp' 파일이 실행된 결과가 응답됨  
		return "index";
	}
}

 

 

 

▪︎ ch03.01.css 생성 

div{
    text-align: center;
    border: 1px solid #ccc;
}

 

 

 

▪︎ 브라우저에서 'localhost' 호출 시 

 

 


작업 화면만 보이도록 설정 - 2가지 방식 

  

  • 설정 방식  

     ❶ function ch0301(){ }

     ❷ let ch0301 = function(){ } : 익명함수를 로컬변수의 값으로 저장 

 

  • 호출 방식 

     ❶ 정식 함수일 경우 : 함수명(인수, ... ) 

     로컬 변수에 대입한 경우 : 로컬변수명(인수, ...)

 

 

 


자바스크립트의 에러 확인

 

  • 브라우저의 개발자도구에서 확인 가능 ( console 탭에서 확인 가능 )

 

 

 


조건문 

 

▪︎ ch0301()

function ch0301(){
// * ch03.01 *
// 사용자에게 점수를 입력받아 80점 이상인 경우 "합격"이라는 경고창 띄어주세요. 
// 1) 사용자에게 점수를 입력받는다 => prompt()로 구현 
// 2) 입력받은 점수를 score 변수에 저장 => const score = prompt('점수를 입력하세요', '정수로 입력')
// 3) 조건문 이용 => if (score >= 80){ alert('합격입니다!') }

    const score1 = prompt('점수를 입력하세요', '정수로 입력')
    // 점수 판정 
    if (score1 >= 80) {
        alert('합격입니다!')
    }
}

 

 

▪︎ ch0302()

function ch0302(){
// * ch03.02 *
// 사용자에게 점수를 입력받아 80점 이상인 경우 "합격", 이하면 "다음 기회에" 라는 경고창 띄어주세요. 
// 1) 사용자에게 점수를 입력받는다 => prompt()로 구현 
// 2) 입력받은 점수를 score 변수에 저장 => const score = prompt('점수를 입력하세요', '정수로 입력')
// 3) 조건문 이용 => 80점 이상인 경우, if (score >= 80){ alert('합격입니다!') }
// 4) 		  80점 이하인 경우, else { alert('다음 기회에') }

    // 주의 ) 로컬 변수의 경우, 같은 페이지에 동일한 이름으로 선언 불가능 
    const score2 = prompt('점수를 입력하세요', '정수로 입력')
    // 점수 판정 
    if( score2 >= 80 ){
        alert('합격입니다!')
    } else {
        alert('다음 기회에')
    }
}

 

 

▪︎ ch0303()

function ch0303(){
// * ch03.03 *
// 신입사원의 입사점수가 90점 이상이면 기획팀, 80점 이상이면 총무팀, 나머지는 영업팀을 경고창으로 출력 
// 1) 인사담당자가 입사점수를 입력받는다 => prompt()로 구현
// 2) 입사점수별 조건문 이용     

// 주의 ) prompt() 메서드 : 입력한 문자열을 리턴해줌 즉, 실제로 숫자를 입력해도 문자열로 인식됨 
//       반드시 Number(파라미터) 메서드 : 입력된 파라미터를 가능한 숫자로 변환
//       Number('100') => 숫자 100를 리턴  

    const score3 = Number(prompt('입사 점수를 입력하세요', '정수로 입력'))

    // 점수 판정 
    if ( score3 >= 90 ) {
        alert('기획팀입니다')
    } else if ( score3 >= 80 ) {
        alert('총무팀입니다')
    } else {
        alert('영업팀입니다')
    }
}

 

 

▪︎ ch0304()

function ch0304(){
// * ch03.04 * 
// 엑셀 점수가 70점 이상, 액세스 점수가 80점 이상일 경우 합격, 그렇지 않을 경우 불합격 처리 
// 주의 ) 조건은 반드시 괄호 안에 입력 

// const excelScore = Number(prompt('엑셀 점수 입력하세요', '0 ~ 100 사이 정수로 입력'))
// const accessScore = Number(prompt('액세스 점수 입력하세요', '0 ~ 100 사이 정수로 입력'))

// 합격 판정 
    if (( excelScore >= 70 ) && ( accessScore >= 80 )) {
        alert('합격입니다.')
    } else {
        alert('불합격입니다.')
    }
}

 

 

▪︎ ch0305()

let ch0305 = function(){
// * ch03.05 * 
// 주민등록번호 뒷번호 7자리 중에 첫번째 번호를 입력받아 성별 판정
// 판정기준 : 1 또는 3인 경우, 남성 
//          2 또는 4인 경우, 여자

    const firstNumber = prompt('주민등록번호의 뒷자리 중 첫 숫자를 입력하세요', '1자리만 입력')

    if ( (firstNumber == 1) || (firstNumber == 3) ){
        alert('남성입니다.')
    } else if ( (firstNumber == 2) || (firstNumber == 4) ){
        alert('여성입니다.')
    } else {
        alert('다시 입력해주세요')
    }
}

 

 

▪︎ ch0306()

let ch0306 = function(){
// * ch03.06 *  
// confirm 함수를 사용한 실행여부 선택 기능   
// confirm( 'prompt 설명글' ) : 확인 버튼 클릭 시, true 리턴 / 취소 버튼 클릭 시, false 리턴 
// → 반환값이 boolean 타입이므로, 조건문의 조건식에 바로 사용 가능 
// '결제하시겠습니까?'라는 확인창이 뜰 때, 
// 확인 버튼을 누르면 명령이 없고(아직 개발중인 상태), 
// 취소버튼을 누르면 '취소되었습니다'라는 메시지 출력 

    let choice = confirm('결제를 하시겠습니까?')
    
    if( choice ) {          // 확인 버튼을 누른 경우
        // 결제 진행 코드를 만드는 중 
    } else {
        alert('결제가 취소되었습니다.')
    }

}

 

 

▪︎ ch030601()

let ch030601 = function(){
    // * ch03.06.01 *  
    // confirm 함수 대신 논리 부정(!) 연산자를 사용한 선택 기능 만들기    
    // → 목적 : 부정내용일 때만 if문에서 처리 / 긍정내용일 경우에는 if문 밖 아래에서 처리 (가독성 및 코드의 질 향상)

    // choice의 반환값이 true일 경우, !choice = !true = false 
    // 변수가 오른쪽에 있는 경우, 무조건 변수의 값으로 해석 
    // → choice만 쓰면 변수 안의 값으로 해석

    // '결제하시겠습니까?'라는 확인창이 뜰 때, 
    // 확인 버튼을 누르면 명령이 없고(아직 개발중인 상태), 
    // 취소버튼을 누르면 '취소되었습니다'라는 메시지 출력 
    
        let choice = confirm('결제를 하시겠습니까?')
        
        // 부정 내용만 if문에서 처리 
        if( !choice ) {   
            // 취소 버튼 클릭 시, false 리턴        
            // 논리부정 연산자로 인해 if문의 조건식을 true로 만들어 if문에서 취소 처리를 진행 
            // 확인 버튼 클릭 시, 논리부정 연산자로 인해 false가 리턴되어 if문 빠져나옴 
        }   
        // 긍정일 경우, 항상 밑에서 처리 
    }

 

 

▪︎ ch0307()

let ch0307 = function(){
    // * ch03.07 *
    // * 중첩 if문 사용 
    // 사용자에게 점수를 입력받아 80점 이상일 경우 '합격', 아닌 경우 '불합격'이라는 알림창을 출력
    // 단, 점수는 정수로 입력 
    // 잘못 입력 시, '0 ~ 100 사이의 정수로 입력해주세요.'라는 알림창 출력

    /*
        Number(파라미터) : 숫자로 변환해줌
        isNaN( value ) : 매개변수가 숫자인지 검사하는 함수 ( NaN : Not A Number )
            value : 검사할 값을 입력
            매개변수가 숫자가 아니면 true, 숫자이면 falus 반환 
            예) isNaN('123') : false 반환 ( ∵ 작은따옴표로 감쌌지만, 숫자로 취급 )
                isNaN( .1 ) : false 반환 ( 0이 빠진 소수 )
                isNaN( 'AbC' ) : true ( ∵ 문자열 )
                isNaN( '123 * 10' ) : true ( ∵ 숫자 표현식이나 전체식을 문자열로 취급 )
                isNaN( '' ) : false ( ∵ 문자열의 0에 해당하는 값''은 0으로 생각 )

                * 모든 기본 자료형의 0에 해당하는 값은 0으로 생각 
                  '', null, false(컴퓨터 내부에서 0), [] 비어있는 배열 

                * 날짜 형식은 숫자로 취급 : false
                단, 날짜형식의 문자열형( new Date().toString() : 문자열 ) : true  

                * 참조자료형( 객체, undefined ) : false 

    */


    // * psedo-code : 의사코드 
    // 1) 사용자에게 입력창을 띄어 점수를 입력받아 변수 score4에 저장
    // 2) 저장한 score4의 값이 정수인지 확인 
    // 3) 입력된 정수가 0에서 100 사이의 범위에 해당되는지 검사 
    // 4) 맞다면, 점수 판정 → 합격 및 불합격 판정 
    //    아니라면, '0 ~ 100 사이의 정수로 입력해주세요.' 라는 알림창 출력

    const score4 = prompt('점수를 입력하세요', '0~100 사이 정수로 입력')

    // score4가 숫자인지 체크 
    if (isNaN( score4 )){
        alert('0 ~ 100 사이의 정수를 입력하세요.')
    } else {  
        // 숫자인 경우, 
        // 입력한 값이 정상적인 숫자 표현식이 아닐 수도 있으므로 
        // Number() 메서드로 숫자로 변환 
        intScore = Number( score4 )
        if ( (intScore >=0) && (intScore <= 100) ){
            if( intScore >= 80 ){
                alert('합격입니다.')
             } else {
                 alert('불합격입니다.')
             }
         } else {
            alert('0 ~ 100 사이의 정수를 입력하세요.')
        }
    }    
}

 

 

 • 의사 코드 ( Pseudo-code )

   - 프로그래밍 언어를 코드로 작성하기 전에, 무엇을 어떻게 동작하도록 작성할 지에 대하여 사람이 이해할 수 있는 언어로 작성하는 것 

   - 의사 코드를 작성하기 전에 문제를 이해하고 논리적으로 해석할 알아야