관리 메뉴

gi_dor

pre-training JavaScript (9) λ³Έλ¬Έ

Language/JavaScript

pre-training JavaScript (9)

기돌 2023. 10. 20. 12:46
728x90

πŸ“š κ΅­λΉ„ 9 일차


πŸ“Œ JavaScript → 슀크립트 μ–Έμ–΄ : λ³„λ„μ˜ 컴파일 과정없이 μ†ŒμŠ€μ½”λ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‹€ν–‰ν•œλ‹€ ( μ†ŒμŠ€μ½”λ“œλ₯Ό λ°”λ‘œ μ‹€ν–‰ )
      Ex. ) JavaScript , python , swift

  • 동적 데이터 νƒ€μž…μ„ μ§€μ›ν•œλ‹€ → μ €μž₯λ˜λŠ” 데이터에 따라 λ³€μˆ˜μ˜ νƒ€μž…μ΄ 달라진닀.
// JavaScriptλŠ” 동적 데이터 νƒ€μž…μ„ μ§€μ›ν•œλ‹€.
// λ³€μˆ˜μ— μ €μž₯λ˜λŠ” 데이터에 따라 λ³€μˆ˜μ˜ νƒ€μž…μ΄ 달라진닀.

let a;
console.log("a의 λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = false ;
console.log("a의 λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = 100;
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = 3.14;
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = "μ•ˆλ…•ν•˜μ„Έμš”";
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = {name : "κΈ°μ„ " , kor : 100 , eng : 100 , math :100};
console.log("a의 데이터 νƒ€μž… : ",typeof(a));

a = function(){
    console.log("ν•¨μˆ˜ μž…λ‹ˆλ‹€.");
}
console.log("a의 데이터 νƒ€μž… : ",typeof(a));



// undefined -> boolean -> number -> String -> object -> function

 

πŸ“Œ Java → μ»΄νŒŒμΌμ–Έμ–΄ : μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰νŒŒμΌλ‘œ λ³€ν™˜ν•˜λŠ” 컴파일 과정이 ν•„μš”ν•˜λ‹€ ( μ†ŒμŠ€μ½”λ“œ → μ‹€ν–‰νŒŒμΌ )
      Ex. ) Java , c , c++ 

  • 데이터 νƒ€μž…μ΄ μ—„κ²©ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
  • JavaλŠ” κ°’ , λ°°μ—΄ , 객체λ₯Ό λ³€μˆ˜μ— μ €μž₯ν• μˆ˜ μžˆλ‹€.
  • λ§€κ°œλ³€μˆ˜μ˜ 인자둜 μ „λ‹¬ν• μˆ˜ μžˆλ‹€ , ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν• μˆ˜ μžˆλ‹€
  • JavaλŠ” 싀행이 μ„€μΉ˜λœ μ–΄λŠ ν”Œλž«νΌ ( 컴퓨터 ) μ—μ„œλ‚˜ μ‹€ν–‰λœλ‹€
  • backend μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— 주둜 μ‚¬μš©λœλ‹€
boolean a = true;
int b = 100;
long c = 1000000000;
double d = 3.14;
char c = 'A';
String f = "ABCDEFG";
int[] g = {10 , 20 , 30 };
String [] h = {"κΉ€μ‹œλ―Ό","곽재우","κΉ€μœ μ‹ "};
Score i = new Score("κΉ€μ‹œλ―Ό" , 100 , 29);

 

πŸ“š var 와 let

ꡬ뢄 var  let
ν˜Έμ΄μŠ€νŒ… ν˜Έμ΄μŠ€νŒ… λœλ‹€ ν˜Έμ΄μŠ€νŒ… λ˜μ§€ μ•ŠλŠ”λ‹€
λ²”μœ„ λ³€μˆ˜μ˜ λ²”μœ„κ°€ ν•¨μˆ˜λ‹€ λ³€μˆ˜μ˜ λ²”μœ„κ°€ λΈ”λŸ­μ΄λ‹€
μ€‘λ³΅μ •μ˜ κ°€λŠ₯ν•˜λ‹€ λΆˆκ°€λŠ₯ν•˜λ‹€

 

  • let μ€ λ³€μˆ˜κ°€ ν˜Έμ΄μŠ€νŒ… λ˜μ§€ μ•ŠλŠ”λ‹€
  • let은 λ³€μˆ˜μ˜ scopeκ°€ λΈ”λŸ­μ΄λ‹€
  • let은 λ™μΌν•œ μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό μ€‘볡 μ •μ˜ ν• μˆ˜ μ—†λ‹€.

 

πŸ“Œ ν˜Έμ΄μŠ€νŒ… Hoisting

JavaScriptμ—μ„œ λ³€μˆ˜ μ„ μ–Έ , ν•¨μˆ˜ 선언정보λ₯Ό λ©”λͺ¨λ¦¬μ— μ˜¬λ¦¬λŠ” λ™μž‘μ΄λΌκ³  ν•œλ‹€.
λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° 전에 μ°Έμ‘°ν•˜κ±°λ‚˜ ν˜ΈμΆœν• μˆ˜ μ—†λ‹€λŠ” μ˜λ―Έμ΄λ‹€.

console.log(foo); // undefined
var foo = "hello";
console.log(foo); // hello
  • 첫번째 λ³€μˆ˜ fooκ°€ 아직 μ •μ˜λ˜μ§€ μ•Šμ•„ undefinedλ₯Ό 좜λ ₯ν•œλ‹€

 

πŸ“Œ λ²”μœ„ Scope

var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” κ·Έ λ³€μˆ˜κ°€ μ„ μ–Έλœ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€
λ§Œμ•½ ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ var둜 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ κ·Έ λ³€μˆ˜λŠ” 'μ „μ—­λ³€μˆ˜'κ°€ λœλ‹€

function exF() {
    if (true) {
        var functionScope = 'I am function-scoped';
    }
    console.log(functionScope);  // 좜λ ₯: I am function-scoped
}

exF();

console.log(functionScope);  // ReferenceError: functionScoped is not defined

 

let 으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” κ°€μž₯ κ°€κΉŒμš΄ λ‘˜λŸ¬μ‚¬λŠ” λΈ”λŸ­ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€

if (true) {
    let blockScope = 'I am block-scoped';
    console.log(blockScope);  // 좜λ ₯: I am block-scoped
}

console.log(blockScope);  // ReferenceError: blockScope is not defined

βœ” var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œ 접근이 κ°€λŠ₯ν•˜λ‚˜, let으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•΄λ‹Ή 블둝 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.

let을 μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ λ™μž‘μ΄ 더 λͺ…ν™•ν•˜κ²Œ ν‘œν˜„λ  수 있으며, μ‹€μˆ˜λ‘œ μΈν•œ 버그 λ°œμƒ κ°€λŠ₯성도 쀄어든닀.


// JavaScriptλŠ” 동적 데이터 νƒ€μž…μ„ μ§€μ›ν•œλ‹€.
// λ³€μˆ˜μ— μ €μž₯λ˜λŠ” 데이터에 따라 λ³€μˆ˜μ˜ νƒ€μž…μ΄ 달라진닀.

let a;
console.log("a의 λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = false ;
console.log("a의 λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = 100;
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = 3.14;
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = "μ•ˆλ…•ν•˜μ„Έμš”";
console.log("a λ°μ΄ν„°μ˜ νƒ€μž… :",typeof(a));

a = {name : "κΈ°μ„ " , kor : 100 , eng : 100 , math :100};
console.log("a의 데이터 νƒ€μž… : ",typeof(a));

a = function(){
    console.log("ν•¨μˆ˜ μž…λ‹ˆλ‹€.");
}
console.log("a의 데이터 νƒ€μž… : ",typeof(a));

 


// 둜또 번호 좜λ ₯ν•˜κΈ°

/*
Math.random()  = 0 보닀 ν¬κ±°λ‚˜ κ°™κ³  1보닀 μž‘μ€ μž„μ˜μ˜ μ‹€μˆ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.
Math.trunc(μ‹€μˆ˜) = μ‹€μˆ˜μ˜ μ†Œμˆ˜μ  뢀뢄을 버렀 μ •μˆ˜λ‘œ λ°˜ν™˜ν•œλ‹€

let value = Math.trunc(Math.random() * N + 1);
value의 값은 1  ~ N λ²”μœ„μ˜ μ •μˆ˜κ°’μ΄λ‹€

*/

// 1 ~ 45 λ²”μœ„μ˜ μž„μ˜μ˜μ •μˆ˜ 6개λ₯Ό μ €μž₯ν•  배열객체닀.


function generateLotto(){
    
    let lotto = [];

    while(true){

        // μž„μ˜μ˜ μ •μˆ˜κ°‘ γ……μ–»κΈ°
        let number = Math.trunc(Math.random() * 45 + 1);
        
        // μ‘΄μž¬μ—¬λΆ€λ₯Ό μ²΄ν¬ν•΄μ„œ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ 배열에 μΆ”κ°€ν•œλ‹€.
        let result = exists(lotto,number);
        
        if(result == false){
        // 배열에 κ°’ μΆ”κ°€ν•˜κΈ°
            lotto.push(number);
        }

        if(lotto.length == 6){
            break;
        }
    }
    
    lotto.sort(function(num1,num2){
        return num1 - num2
    });
    console.log("둜또번호 : ", lotto);
}

function exists(arr,number){
    // 쑴재 μ—¬λΆ€λ₯Ό μ €μž₯ν•  λ³€μˆ˜ μ •μ˜
    let isExists = false;
    // λ°°μ—΄μ˜ 길이만큼 λ°˜λ³΅μž‘μ—…μ„ μˆ˜ν–‰
    for(let index = 0; index < arr.length; index++){
        // 인덱슀번째 λ°°μ—΄κ°’κ³Ό 전달받은 숫자λ₯Ό 비ꡐ
        // 값이 μΌμΉ˜ν•˜λ©΄ μ‘΄μž¬μ—¬λΆ€λ₯Ό true둜 μ„€μ • , λ°˜λ³΅λ¬Έμ„ νƒˆμΆœ
            if(arr[index] == number){
                isExists = true;
                break;
            }
        }
        // μ‘΄μž¬μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•œλ‹€.
        return isExists; 
    }


for(let i = 1; i<=5; i++){
   generateLotto();
}
// generateLotto();

 


GUI ( Graphics User Interface )  κ·Έλž˜ν”½ν™” λ˜μ–΄μžˆλŠ” 뢀뢄을 μ‚¬μš©μžκ°€ 클릭 ν˜Ήμ€ μž…λ ₯μ‹œ μž‘μš©ν•˜λŠ” 화면을 제곡

Component ( μ™„μ œν’ˆμ΄ μ•„λ‹Œ λ°˜μ œν’ˆ ) μ°½ , λ²„νŠΌ , μ²΄ν¬λ°•μŠ€ , μ½€λ³΄λ°•μŠ€ , μž…λ ₯ν•„λ“œ , 메뉴

Event Driven Development 이벀트 μ£Όλ„κ°œλ°œ

  • 이벀트 : μ»΄ν¬λ„ŒνŠΈμ™€ μƒν˜Έμž‘μš©μœΌλ‘œ λ°œμƒν•˜λŠ” 것 Ex. μ›Ήμ—μ„œ λ²„νŠΌ ν΄λ¦­μ‹œ button νƒœκ·Έ 이벀트 λ°œμƒ 
  • 이벀트 μ†ŒμŠ€ : μ΄λ²€νŠΈκ°€ λ°œμƒν•œ μ»΄ν¬λ„ŒνŠΈ  Ex. λ²„νŠΌν΄λ¦­μ‹œ button νƒœκ·Έκ°€ 이벀트 μ†ŒμŠ€
  • 이벀트 ν•Έλ“€λŸ¬ :  이벀트 μ†ŒμŠ€μ—μ„œ μ§€μ •ν•œ μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ μ‹€ν–‰ν•  ν•¨μˆ˜

 

1. μ»΄ν¬λ„ŒνŠΈλ₯Ό μ„ μ • → λ²„νŠΌ
2. 이벀트의 μ’…λ₯˜λ₯Ό μ„ μ • → onclick
3. 이벀트λ₯Ό μž‘μ„±ν•œλ‹€ →  ν•¨μˆ˜κ΅¬ν˜„ 
4. 이벀트 ν•Έλ“€λŸ¬μ™€ 이벀트λ₯Ό μ—°κ²°

<button onclick = "fn()1"> Btn </button>

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <h1>μƒ˜ν”Œ ν…ŒμŠ€νŠΈ νŽ˜μ΄μ§€</h1>

    <!-- button νƒœκ·Έ ν΄λ¦­μ‹œ fn1()ν•¨μˆ˜ μ‚¬μš© -->
    <button onclick="fn1()">λ²„νŠΌ1</button>
    <br><br>
    <button onmouseenter="fn1()">λ²„νŠΌ2</button>

    <br><br><br>
    
        ID  : <input type="text"><br><br>
        PW  : <input type="password" maxlength="30"><br>


<script>

    function fn1(){
        console.log("λ²„νŠΌμ΄ 클릭 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.")
    }   

</script>
</body>
</html>
728x90