문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
wiki:miscellaneous:pwa [2021/03/26 17:52] emblim98 |
wiki:miscellaneous:pwa [2023/01/13 18:44] (현재) |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== | + | ====== |
<WRAP left notice 80%> | <WRAP left notice 80%> | ||
- | * description : 어트리뷰트와 프라퍼티 (attribute and property)의 차이 | + | * description : PWA |
* author | * author | ||
* email : shlim@repia.com | * email : shlim@repia.com | ||
- | * lastupdate | + | * lastupdate |
</ | </ | ||
<WRAP clear></ | <WRAP clear></ | ||
+ | |||
+ | ====== Ref ====== | ||
+ | * 출처 : "Do it! 프로그레시브 웹앱 만들기", | ||
\\ | \\ | ||
- | ====Source of the article==== | + | ===== Promise [프로미스] ===== |
- | * [[http://jquery-howto.blogspot.com/2011/06/html-difference-between-attribute-and.html|HTML: The difference between attribute and property]] | + | |
- | * [[https://medium.com/hexlant/attribute-%EC%99%80-property-%EC%9D%98-%EC%B0%A8%EC%9D%B4-c6f1c91ba91|attribute | + | * 정해진 장시간 동안 기능을 수행하고 나서 정상적으로 기능이 수행이 되었다면 성공의 메시지와 함께 처리된 결과값을 전달해준다. |
+ | * 기능 수행 시 예상치 못한 문제가 발생하면 에러를 전달해준다. | ||
+ | \\ | ||
+ | ===== var 변수 선언 ===== | ||
+ | * 함수 스코프(function scope)만 지원한다 --> var 변수는 함수 내부에서만 유효하다. | ||
+ | * 블록 스코프(block scope)는 지원하지 않는다 --> 블록 내부에서 var키워드로 변수를 선언해도 블록 외부에서 사용할 수 있다. | ||
+ | * 블록 스코프를 지원하지 않는다는 의미는 함수 외부에서 선언한 변수는 모두 전역 변수처럼 사용된다는 뜻이다. | ||
+ | * var변수는 **중복으로 선언할 수 있다**는 의미는 기존 선언된 변수를 덮어 쓴다는 의미이다 | ||
+ | * 스코프(scope) : 변수의 유효 범위 | ||
+ | * 변수의 유효 범위 : 변수를 사용할 수 있는 범위 | ||
+ | \\ | ||
+ | ===== mutable[뮤터블, 가변의] vs immutable[이뮤터블, | ||
+ | * mutable | ||
+ | * immutable : 프로그래밍에서 값을 변경할 수 없는 것을 의미 | ||
+ | \\ | ||
+ | ===== let 사용법 ===== | ||
+ | <code javascript> | ||
+ | { | ||
+ | let 변수명; | ||
+ | let 변수명 = 값; // 변수 선언과 동시에 값 할당 | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | ===== const 사용법 ===== | ||
+ | <code javascript> | ||
+ | { | ||
+ | const 변수명 = 값; // 변수 선언과 동시에 반드시 값을 할당해야 함 | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | ===== 블록 스코프(block scope) 예시 | ||
+ | <code javascript> | ||
+ | { | ||
+ | let apple = 3; | ||
+ | | ||
+ | apple = 5; // let 선언 변수는 재할당 허용 | ||
+ | | ||
+ | let apple = 7; | ||
+ | |||
+ | const car; // 선언과 동시에 값을 할당하지 않으므로 오류! | ||
+ | const carname = " | ||
+ | | ||
+ | | ||
+ | } | ||
+ | console.log(apple); | ||
+ | console.log(carname); | ||
+ | </ | ||
+ | \\ | ||
+ | ===== 모던 자바스크립트에서 변수 사용 3원칙 ===== | ||
+ | * let과 const 키워드로 선언한 변수는 유효 범위가 블록 스코프로 제한된다 | ||
+ | - const를 가장 먼저 사용한다. 특히 변숫값을 변경할 필요가 없을 경우 사용한다 | ||
+ | - 만약 중간에 변숫값을 변경해야 한다면 const 대신에 let을 사용한다. | ||
+ | - var는 ES6+에서는 사용하지 않는다. 다만 전역 변수가 꼭 필요할 때 최상위 수준에서만 예외로 사용한다. | ||
+ | \\ | ||
+ | ===== 템플릿 리터럴 [Template Literal] ===== | ||
+ | | ||
+ | * 템플릿 리터럴을 사용하면 문자열 안에 달러 기호($)와 중괄호( { } )를 사용해서 표현식을 넣을 수 있으며 여러 줄로 만들어 사용하기 편리하다. | ||
+ | * 이전처럼 문자열을 + 연산자로 연결하지 않아도 표현식을 문자열과 함께 조합해서 사용할 수 있다. | ||
+ | * 템플릿 리터럴 예시 | ||
+ | <code javascript> | ||
+ | console.log(' | ||
+ | console.log(`사과: | ||
+ | </ | ||
+ | \\ | ||
+ | ===== 화살표 함수 ===== | ||
+ | * 화살표 함수(arrow function)는 ES6 문법에서 함수를 표현하는 새로운 방식이며 가장 효과적으로 변경된 문법이며, | ||
+ | * **=>** 는 두꺼운 화살이라는 의미로 '팻 애로우(fat arrow)' | ||
+ | \\ | ||
+ | ==== 전통적인 함수 선언 방식 ==== | ||
+ | <code javascript> | ||
+ | const fnPlusNumbers = function (pNum1, pNum2) { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | ==== 화살표 함수로 구현 ==== | ||
+ | <code javascript> | ||
+ | const fnPlusNumbers = (pNum1, pNum2) => { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | ==== return 키워드를 생략한 화살표 함수 ==== | ||
+ | <code javascript> | ||
+ | const fnPlusNumbers = (num1, num2) => num1 + num2; | ||
+ | </ | ||
+ | * 함수가 실행되는 문장(statement)가 단 한 줄이므로 블록을 나타내는 중괄호도 생략할 수 있다. | ||
+ | * 화살표 함수는 return키워드를 생략해도 자동으로 값을 반환한다. 이것을 ' | ||
+ | * 매개변수가 1개일 때 소괄호 ()를 생략할 수 있고, 매개변수가 없을 때는 반드시 소괄호를 사용해야 한다. | ||
+ | \\ | ||
+ | * 매개변수가 1개일 때 소괄호 생략 가능 | ||
+ | <code javascript> | ||
+ | const fnPlusNumbers4 = pNum => pNum + 1; | ||
+ | </ | ||
+ | * 매개변수가 없을 때는 반드시 소괄호 사용 | ||
+ | <code javascript> | ||
+ | const fnSayHello = () => ' | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | ==== 동기 처리 방식과 비동기 처리 방식 비교 ==== | ||
+ | ^ 구분 | ||
+ | | 실행 순서 | ||
+ | | 실행 대기 | ||
+ | | ::: | 반환 결과를 계속 기다리므로 시간 지연이 큼 | 결과가 완료되면 다시 돌아와 필요한 것을 마무리하는 방식 | ||
+ | \\ | ||
+ | ==== 콜백 함수 ==== | ||
+ | * 자바스크립트는 비동기 처리 방식을 구현하기 위해 콜백 함수(callback function)를 사용한다. | ||
+ | * 함수는 보통 매개변수로 값을 전달받는데 자바스크립트에서 함수는 객체(Object)로 취급하므로 함수의 매개변수로 **함수**를 전달받을 수 있다. | ||
+ | * 어떤 함수의 매개변수로 전달된 함수를 콜백 함수(callback function)라고 부른다. | ||
+ | * 콜백 함수는 다른 함수와 상관없이 독립적으로 실행되므로 비동기 처리를 구현할 때 사용한다. | ||
+ | * 매개변수로 전달받은 함수를 콜백 함수로 이용할 때는 관용적으로 매개변수 이름에 ' | ||
+ | \\ | ||
+ | * 콜백 함수를 이용한 비동기 처리 | ||
+ | <code javascript> | ||
+ | function fnFunctionA(pNumA) { | ||
+ | | ||
+ | } | ||
+ | function fnFunctionB(pNumB, | ||
+ | | ||
+ | } | ||
- | =====어트리뷰트와 프라퍼티 | + | fnFunctionB(" |
+ | </ | ||
\\ | \\ | ||
- | ====어트리뷰트 (Attribute) ==== | + | * 콜백 함수 구조를 단순화한 예 |
- | * HTML 요소에 대한 추가정보를 가지고 있으며, '' | + | |
- | | + | < |
- | * div -> tag이며 element(요소) | + | function fnFunctionB(pNumB, fnCallback) { |
- | * class -> attribute | + | |
- | * my-class -> class attribute의 값 | + | } |
+ | |||
+ | // 매개변수 전달 시 함수 선언과 정의를 함께 작성함: 비동기 처리의 완료 담당 | ||
+ | fnFunctionB(" | ||
+ | console.log(pNumA); | ||
+ | }); | ||
+ | </code> | ||
\\ | \\ | ||
- | ====프라퍼티 | + | ==== 프로퍼티 |
- | * 프라퍼티 (Property)는 HTML DOM tree에 있는 | + | |
- | | + | * 마침표 프로터피 접근 연산자(**.**)를 사용하는 **마침표 표기법< |
- | * < | + | * 대괄호 프로퍼티 접근 연산자(**[...]**)를 사용하는 **대괄호 표기법< |
- | Our DIV node | + | * 프로퍼티 키가 식별자 네이밍 규칙을 준수하는 이름, 즉 자바스크립트에서 사용 가능한 유효한 이름이면 마침표 표기법과 대괄호 표기법을 모두 사용할 수 있다. |
- | |- nodeName | + | * 마침표 프로퍼티 접근 연산자 또는 대괄호 프로퍼티 접근 연산자의 좌측에는 객체로 평가되는 표현식을 기술한다. 마침표 프로퍼티 접근 연산자의 우측 또는 대괄호 프로퍼티 연산자의 내부에는 프로퍼티 키를 지정한다. |
- | |- className = " | + | <code javascript> |
- | |- style | + | var person = { |
- | |- ... | + | name: ' |
- | |- ... | + | }; |
- | </code> | + | |
- | * html 문서에서는 class가 attribute를 의미한다. | + | // 마침표 표기법에 의한 프로퍼티 접근 |
- | * html DOM에서 class는 property를 의미한다. | + | console.log(person.name); // Lee |
+ | |||
+ | // 대괄호 표기법에 의한 프로퍼티 접근 | ||
+ | console.log(person[' | ||
+ | </ | ||
+ | \\ | ||
+ | | ||
+ | < | ||
+ | var person | ||
+ | | ||
+ | }; | ||
+ | |||
+ | console.log(person[name]); | ||
+ | </code> | ||
+ | * 위 예제에서 ReferenceError가 발생한 이유는 대괄호 연산자 내의 따옴표로 감싸지 않은 이름, 즉 식별자 name을 평가하기 위해 선언된 name을 찾았지만 찾지 못했기 때문이다. | ||
+ | * **객체애 존재하지 않는 프로퍼티에 접근하면 | ||
+ | < | ||
+ | var person = { | ||
+ | name: ' | ||
+ | }; | ||
+ | |||
+ | console.log(person.age); | ||
+ | * 프로퍼티 키가 식별자 네이밍 규칙을 준수하지 않는 이름, 즉 자바스크립트에서 사용 가능한 유효한 이름이 아니면 반드시 대괄호 표기법을 사용해야 한다. 단, 프로퍼티 키가 숫자로 이뤄진 문자열인 경우 따옴표를 생략할 수 있다. 그 외의 경우 대괄호 내에 들어가는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다는 점을 잊지 말자. | ||
+ | |||
+ | </code> | ||
+ | \\ | ||
+ | ===== ES11, ES6 Syntax Summery ===== | ||
+ | * 출처 : 드림코딩 by 엘리, 자바스크립트 최신 문법 (ES6, ES11) | 모르면 후회하는 최신 문법과 사용법 정리 | ||
+ | \\ | ||
+ | * Optional Chaining (ES11) | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Nullish Coalescing Operator (ES11) | ||
+ | * [[https://developer.mozilla.org/ | ||
+ | \\ | ||
+ | * Shorthand | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Destructuring Assignment (ES6) | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Spread Syntax (ES6) | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Default parameter (Es6) | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Ternary Operator (ES6) | ||
+ | * [[https:// | ||
+ | \\ | ||
+ | * Template Literals (ES6) | ||
+ | * [[https:// | ||
- | 계속 작성해야 한다. | ||
- | {{tag> | + | {{tag> |