카테고리 없음

[멋쟁이사자처럼] 주말 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 으로 만들어라