ABOUT ME

세상 흥미로운 존재에 대한 기록

Today
Yesterday
Total
  • [멋쟁이사자처럼] 주말 JS 기초 특강 코드 모음 - 230820
    카테고리 없음 2023. 8. 20. 11:18

    목차

    1. 윈도우 꿀팁

    2. Switch 문

    3. 삼항연산자

    4. 리턴값

    5. 디스트럭쳐링 (구조분해할당)

    6. 논리곱 논리합

    7. 클로저

    8. 화살표함수

    9. 멘토를 이용하는 팁


    1. 윈도우 꿀팁


    - 초코렛티

    - 윈도우(Windows)에서 필요한 패키지를 설치하고 관하는 도구로, 커맨드 라인(CLI)에서 프로그램을 설치
      하기 위한 소프트웨어

    https://chocolatey.org/

     

    Chocolatey - The package manager for Windows

    Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software deployments.

    chocolatey.org

    - 설치하는 것을 추천함 (Windows Power Shell에 설치)

    - 설치 후 choco 입력으로 확인

    - Power Shell 을 관리자로 실행하여 설치

    $ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

    - choco 명령어로 CLI 환경에서 설치할 수 있는 apt-get 같은 명령어?

    $ choco install node.js
    $ choco install vscode

    - 오늘의 수업에 사용할 모던 자바스크립트 사이트 (switch 이후로는 MDN)

    - 실습 코드의 즉시 실행도 할 수 있음

    https://ko.javascript.info/switch

     

    switch문

     

    ko.javascript.info

    - VIM editor 연습용 게임

    https://vim-adventures.com/

     

    Learn VIM while playing a game - VIM Adventures

    VIM Adventures is an online game based on VIM's keyboard shortcuts. It's the "Zelda meets text editing" game. So come have some fun and learn some VIM!

    vim-adventures.com

    2. Switch 문


    - switch 문을 if 문으로 고치기

    let a = 2 + 2;
    
    switch (a) {
      case 3:
        alert( '비교하려는 값보다 작습니다.' );
        break;
      case 4:
        alert( '비교하려는 값과 일치합니다.' );
        break;
      case 5:
        alert( '비교하려는 값보다 큽니다.' );
        break;
      default:
        alert( "어떤 값인지 파악이 되지 않습니다." );
    }
    let a = 2 + 2;
    
    if (a === 3) {
    	alert( '비교하려는 값보다 작습니다.' );
    } else if ( a === 4) {
    	alert( '비교하려는 값과 일치합니다.' );
    } else if ( a === 5) {
    	alert( '비교하려는 값보다 큽니다.' );
    } else {
    	alert( '어떤 값인지 파악이 되지 않습니다.' );
    }

    - case 구분 묶기 (switch 문은 break 가 없으면 break 를 만날 때까지 실행됨)

    let a = 3;
    
    switch (a) {
      case 4:
        alert('계산이 맞습니다!');
        break;
    
      case 3: // (*) 두 case문을 묶음
      case 5:
        alert('계산이 틀립니다!');
        alert("수학 수업을 다시 들어보는걸 권유 드립니다.");
        break;
    
      default:
        alert('계산 결과가 이상하네요.');
    }

     

    3. 삼항 연산자


    - 아보카도 코드 바꾸기

    - 파선아실 (파라미터는 선언할 때, 아규먼트는 실제 사용할 때)

    let 아보카도 = true;
    
    if (아보카도) {
    	console.log("아보카도 있었어(우유6개사옴)")
    } else {
    	console.log("아보카도 없었어(우유1개사옴)")
    } // 아보카도 있었어 (우유 6개 사옴)
    
    
    // 삼항 연산자로 바꾸기
    function 아보카도사와(파라미터) {
    	return 파라미터 ? "아보카도 있었어(우유6개사옴)" : "아보카도 없었어(우유1개사옴)"
    }
    console.log( 아보카도사와(아보카도) ); // 아보카도 있었어(우유6개사옴)

    - 삼항 연산자를 if 문으로 만들기

    function getFee(파라미터) {
        return 파라미터 ? '$2.00':'$10.00';
    }
    
    getFee(true) // '$2.00'
    
    
    // if문으로 바꾸기
    function getFee(파라미터) {
        if (true) { return '$2.00'; }
        else { return '$10.00'; }
    }
    
    getFee(true) // '$2.00'

    4. 리턴값


    - console.log("???"); 의 반환값(return)은 undefined 이다.

    - console.log에 반환값이 필요할까? 필요없다. console.log()는 콘솔창에 표시하고 리턴값이 없다.

    - 함수의 실행 결과값이 undefined 이란 의미다. (return undefined 가 생략되어 있다.)

    function test(p) {
         return p+2
    }
    
    test(10); // 12

    - 고급 스킬 (return 활용법) : return 은 값을 돌려주기도 하지만 return 을 만나면 함수가 종료된다.

    // index 0 ~ 99 까지 실행
    function checkNum(파라미터) {
        for (let index = 0; index < 100; index++) {
        	console.log(index);
            if(파라미터==index) {
                console.log("범위안에 값이 있습니다.");
            }
        }
        return "아 끝났다"
    }
    
    console.log(checkNum(30)); // 30 이후에도 99까지 인덱스를 출력한다.
    // index 0 ~ 30 까지 실행
    function checkNum(파라미터) {
        for (let index = 0; index < 100; index++) {
        	console.log(index);
            if(파라미터==index) {
                console.log("범위안에 값이 있습니다.");
                return "빨리 끝났다";
            }
        }
        return "아 끝났다"
    }
    
    console.log(checkNum(30));

    5. 디스트럭쳐링 (구조분해할당)


    - 배열의 구조분해할당

    - 순서에 영향을 받는다.

    const arr = [1,2,3];
    console.log(arr); // [1,2,3]
    
    const [a,b,c] = arr; // 구조분해할당
    console.log(a,b,c, "구조분해할당한것"); // 변수명에 관계없이 순서대로 들어감

    - 객체의 구조분해할당

    객체의 구조분해할당(디스트럭쳐링)

    - 주의할 점은 key 가 같아야 한다. 배열과 달리 순서의 영향을 받지 않는다. (key 로 찾기 때문)

    // var o = { p: 42, q: "hello"}
    var o = { age: 42, speak: "hello"}
    
    // key 가 불일치하면 할당되지 않는다.
    var { p, q } = o;
    console.log(p); // undefined
    console.log(q); // undefined
    
    // 구조분해할당 (디스트럭쳐링)
    var { age, speak, up } = o;
    console.log(age); // 42
    console.log(speak); // hello
    console.log(up); // undefined

    - 변수 기본값 설정 (key 에 매칭된 value 가 undefined 일 경우 기본값이 적용됨)

    var o = { age: 42, speak: "hello"}
    
    // key의 value가 undefined 경우에 대해 기본값 할당
    var { age=30, speak="hi", man="철수" } = o;
    
    console.log(man); // 철수 : 변수 o에 없는 undefined 로 기본값 적용됨
    console.log(age); // 42 : 변수 o에 값이 있어 기본값 30이 적용안됨
    console.log(speak); // hello : 변수 o에 값이 있어 기본값 hi가 적용안됨

    - 새로운 변수 이름으로 선언하기

    - name 은 기본적으로 window.name 이라는 기본 속성이 있어서 console.log 의 결과가 나온다.

    - 다른 변수명으로 하면 age 와 같이 참조 오류(Uncaught ReferenceError)가 나온다.

    - 전역에서는 name 이라는 변수명을 쓰지 말자

    var o = { age: 42, name: "hello" };
    // 구조분해할당할때 {원래키값:내가쓸변수명,원래키값:내가쓸변수명}
    var { name:이름, age:나이 } = o;
    
    console.log(나이); // 42
    console.log(이름); // true
    console.log(name); // hello
    console.log(age); // Uncaught ReferenceError: age is not defined

    - 실무에서 사용하는 것 (복잡한 구조를 함수를 통해 구조분해할당하여 파악 또는 활용함)

    var o = { age: 42, name: "hello" };
    var {name,age} = o;
    
    function name(o) {
        // o = { age: 42, name: "hello" };
        const {name,age} = o;
        console.log(name,"이름"); // hello
        console.log(age,"나이"); // 42
    }
    
    name(o);

    6. 논리곱 논리합


    6-1. && (and/논리곱)

    - 모든 조건이 참(true) 이어야 논리연산의 결과가 참이다.

    - true && true 의 결과는 true (1x1=1)

    - true && false 의 결과는 false (1x0=0)

    - false && false 의 결과는 false (1x1=1)

    const a=3;
    
    console.log("a가 2보다 큽니까? 그리고 a가 5보다 작습니까?");
    
    if (a>2 && a<5) { // true && true 모두가 참이어야 한다.
        console.log("네 맞습니다.");
    }

    6-2. || (or/논리합)

    - 하나의 조건이 참(true) 라면 논리연산의 결과는 참이다.

    - true || true 의 결과는 true (1+1=2)

    - true || false 의 결과는 true  (1+0=1)

    - false || false 의 결과는 false   (0+0=0)

    const a=3;
    
    if (a>2 || a<5) { // 둘 중 하나만 true 이면 된다.
    	console.log("a가 2보다 크거나 a가 5보다 크면 통과합니다.");
    }

    7. 클로저


    - a 가 함수() 실행전에 선언되지 않거나 없어지면 오류가 발생한다.

    - 전역이 아닌 함수만이 변수를 기억하게 하는 방법이 필요하다.

    const a=1;
    
    function 함수() {
        console.log(a); // 1
    }
    
    함수();

    - 함수를 만드는 함수() 내부에 있는 함수() 가 클로저

    - 함수가 실행되고 종료되면 함수를만드는함수() 가 날란다.

    - 그걸 지켜주기 위해 클로저를 쓴다.

    // 클로저 -> 격리된 환경
    
    function 함수를만드는함수(x) {
        const a=1;
        function 함수() {
    		console.log(x);
        }
        return 함수;
    }
    const 함수를만드는함수를통해만든함수 = 함수를만드는함수(3); // 함수()가 리턴되어 들어감
    함수를만드는함수를통해만든함수();

    - 함수가 실행되나면 날아간다는 것은 함수 종료 후 코드블럭의 변수와 내부의 함수가 메모리에서 사라짐

    - 가비지 컬렉터가 메모리를 회수한다.

    - 코드 블럭의 내부는 '함수를만드는함수를통해만든함수' (새로운 변수)에 들어가게 된다.

    - 새로운 변수는 코드 블럭을 가두고 혼자 쓰기 위해 가져간다.

    - 클로저는 격리된 환경 (닫힌것)

    - 함수를만드는함수()는 종료 후 내부함수와 변수값은 메모리에서 지워진다. 하지만 새로운 변수가 return으로
      반환되는 내부함수 클로저를 참조하고, 클로저가 변수값을 참조하면서 연결된 것들은 메모리에서 지워지지
      않도록 붙잡는다.

    - 다시말해, 클로저는 새로 할당된 변수에서 참조하고 있어서 사라지지 않고 x까지 붙들고 있다. (클로저 형성)

    - 다른 변수에 넣어 사용하면 클로저는 계속 생성된다.

    // 클로저 -> 격리된 환경
    
    function 함수를만드는함수(x) {
    
    	function 함수() {
    		console.log(x);
        }
        return 함수;
    }
    const 함수를만드는함수를통해만든함수 = 함수를만드는함수(3); // 함수()가 리턴되어 들어감
    함수를만드는함수를통해만든함수(); // 함수가 사라져도 값 3을 가져올 수 있다.
    
    const 함수를만드는함수를통해만든함수2 = 함수를만드는함수(2); // 함수()가 리턴되어 들어감
    함수를만드는함수를통해만든함수2(); // 함수가 사라져도 값 2을 가져올 수 있다.

    8. 화살표 함수

    - 화살표 함수는 쉽다.

    const 함수명 = (파라미터) => {
    	return 파라미터*2;
    }
    
    const 함수명2 = (파라미터) => 파라미터*2 // (특수한 문법) 바로 리턴이 된다.
    
    console.log([1,2,3,4,5].map(파라미터)=>파라미터*2);

    9. 멘토를 이용하는 팁


    - 질문을 잘 모르겠다면, 수업시간에 필기한 내용을 그대로 들고 와서 다시 알려달라고 한다.

    - 멘토링 할 때 하는 것

    - known, unknown

    자신이 모르는 것을 아는 것이 중요하다.

    - 공부를 할 때는 known to unknowns 을 해라. 알고 있는 것에서 모르는 것을 찾는 것

    - 공부 순서 Unknown Unknowns =>  kown unkowns 를 쌓아두고 => known knowns 으로 만들어라

Designed by Tistory.