2020년 7월 21일 화요일

(Angular강의)ECMAScript Essence - Rest Parameter Rest Parameter

(Angular강의)ECMAScript Essence - Rest Parameter Rest Parameter
Rest Parameter
레스트(나머지) 파라미터 문법은 스프레드 연산자와 동일한 ... 연산자를 사용하다. 스프레드 연산자는 다수의 항목을 가진 객체를 낱개로 펼치는 역할을 수행하고 나머지 파라미터 연산자는 낱개로 펼쳐진 요소들을 하나의 배열로 모으는 역할을 수행한다. 실제 코드를 보면서 좀 더 구체적으로 차이점을 알아보자.
// 함수는 파라미터를 낱개로 받아서 처리하도록 설계되었다.
// 받은 파라미터 중에서 2개만 사용되고 있다.
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
/**
* 함수의 파라미터 자리에 사용되는 ... 기호는
* 스프레드 연산자란 용어 대신 나머지 파라미터라고 부른다.
*/
function calc(operator, ...args) {
// 낱개들을 하나의 배열로 모으므로 나머지 파라미터다.
// - 전달 받은 파라미터 중에서 첫 값을 operator 변수에 할당한다.
// - 나머지 파라미터들은 args 배열에 할당한다.
console.log(Array.isArray(args));
// args는 배열이다.
console.log(typeof arguments === 'object');
// arguments는 객체다.
switch (operator) {
case '+':
return add(...args);
// 배열을 낱개로 펼치므로 스프레드 연산자다.
case '-':
return subtract(...args);
// 배열을 낱개로 펼치므로 스프레드 연산자다.
default:
return [operator, ...args];
// 배열을 낱개로 펼치므로 스프레드 연산자다.
}
}
console.log(calc('+', 1, 2, 3));
// 3
console.log(calc('-', 1, 2, 3));
// -1
console.log(calc('*', 1, 2, 3));
// [ '*', 1, 2, 3 ]
사실 하나의 ... 연산자에 두 가지 호칭이 있다는 것이 잘 이해가 안 될 수도 있다. 하지만 다음 예제를 보면 왜 그런지 이해가 될 것이다.
const [first, ...arr] = [10, 20, 30, 40];
// 배열을 낱개로 펼치므로 스프레드 연산자이면서
// 낱개들을 하나의 배열로 모으므로 나머지 파라미터다.
console.log(first);
// 10
console.log(arr);
// [ 20, 30, 40 ]
여러개가 하나로 취급되는 상황에서 ... 연산자로 낱개로 쪼갤 수 있고 낱개로 각각 취급되는 상황에서는 ... 연산자를 사용하여 하나로 모을 수 있다고 생각하자.

2020년 7월 20일 월요일

ECMAScript Essence - Spread Operator

ECMAScript Essence - Spread Operator

http://ojc.asia

Spread Operator

스프레드 연산자 또는 펼침(전개) 연산자라고 부른다. 다수의 요소를 하나씩 나누어 처리할 수 있는 편리한 문법이다. 이터러블 객체(배열 같은 객체) 앞에 ... 연산자를 붙여서 설정한다.

// 함수 호출 시 낱개로 잘라서 파라미터로 전달한다.

myFunction(...iterableObj);

// 배열에 작성 시 낱개로 잘라서 새로운 배열의 요소로 추가한다.

[...iterableObj, 4, 5, 6]

// 함수는 파라미터를 낱개로 받아서 처리하도록 설계되었다.

function add(a, b) {

return a + b;

}

// 마침 갖고 있는 변수의 자료형이 배열이다.

let arr = [10, 20, 30];

// 따라서, 배열 요소를 직접 하나씩 꺼내서

// 파라미터로 전달해야 한다. 불편하다!

console.log(add(arr[0], arr[1]));

// 30

// Function.prototype.apply 함수는

// 배열을 받아서 낱개로 처리하는 로직을 제공한다.

// apply 함수의 두 번째 파라미터로 배열을 받는다.

// 배열의 길이가 클수록 이전 방법 보다는 편리하다.

console.log(add.apply(null, arr));

// 30

/**

* 스프레드 연산자 ...를 사용하면

* 배열의 아이템들을 낱개로 펼친 다음

* 함수에게 파라미터로 전달한다.

*/

console.log(add(...arr));

// 30

let arr1 = [2, 3, 4];

// arr1 배열을 낱개로 펼친 다음 새 배열에 넣는다.

let arr2 = [1, ...arr1, 5];

console.log(arr2);

// [ 1, 2, 3, 4, 5 ]

arr1 = [10, 20, 30];

arr2 = [40, 50];

/**

* Function.prototype.concat :

* 두 배열을 붙여서 새 배열을 만든다.

*/

let arr3 = arr1.concat(arr2);

console.log(arr3);

// [ 10, 20, 30, 40, 50 ]

/**

* Function.prototype.push :

* 배열의 끝에 요소를 추가한다.

*/

let index = arr1.push(arr2);

console.log(index);

// 4

console.log(arr1);

// [ 10, 20, 30, [ 40, 50 ] ]

// arr2가 가리키는 배열이 통째로 들어간다.

arr1 = [10, 20, 30];

arr2 = [40, 50];

arr1.push(...arr2);

console.log(arr1);

// [ 10, 20, 30, 40, 50 ]

// arr2 배열의 아이템들을 낱개로 펼친 다음

// arr1 배열에 추가한다.

ECMAScript Essence - Default Parameters

ECMAScript Essence - Default Parameters ​ http://ojc.asia/bbs/board.php?bo_table=LecAngular&wr_id=5 ECMAScript Essence - Default Parameters ECMAScript Essence - Default Parameters Default Parameters 자바스크립트에서는 함수 호출은 함수명만으로 연동된다. 함수가 받는 파라미터는 옵션으로써 명시해도 되고 선언하지 않아도 된다. 이에 따라 많은 개발자들이 파라미터를 생략하곤 했었다. 심지어 라이브러리 개발자들도 여기에 포함된다. 문제는 라이브러리 함수를 … ojc.asia ​ Default Parameters 자바스크립트에서는 함수 호출은 함수명만으로 연동된다. 함수가 받는 파라미터는 옵션으로써 명시해도 되고 선언하지 않아도 된다. 이에 따라 많은 개발자들이 파라미터를 생략하곤 했었다. 심지어 라이브러리 개발자들도 여기에 포함된다. ​ 문제는 라이브러리 함수를 이용하는 컨슈머 개발자들의 입장에서는 파라미터의 생략이 불편함을 초래한다는 점이다. 대부분의 개발자들이 IDE 툴을 사용하여 개발을 한다. 그런데 그 동안 IDE 툴들이 자동완성 기능을 제공하지 못했었다. 함수 선언 시 파라미터가 선언되어 있지 않으면 아무리 좋은 IDE 툴이라 하더라도 도움말 및 자동완성 기능을 제공할 수가 없기 때문이다. ​ 따라서 다른 개발자들이 이용하는 라이브러리 함수를 만드는 개발자는 파라미터를 명시하는 것이 좋다라는 결론에 다다르게 된다. 이에 따라서 파라미터를 명시하는 기술인 타입스크립트가 등장하게 되었다. ​ 다음 예제에서 파라미터를 주지 않고 함수를 호출하는 경우 초기값을 설정해서 사용할 수 있는 새로운 문법을 살펴본다. ​ /** * 함수가 파라미터를 못 받는 경우, * 함수가 제대로 동작하기 위해서 * 기본값을 설정할 필요가 있다. */ ​ function add(x, y) { return x + y; } ​ console.log(add()); // NaN : Not a Number ​ /** * || 연산자를 사용하여 받는 파라미터가 없는 경우, * 대신 기본값을 할당하는 방법이다. */ ​ function add2(x, y) { x = x || 0; y = y || 0; return x + y; } ​ console.log(add2()); // 0 ​ /** * 새로 도입된 문법을 사용하면 * 좀 더 깔끔하게 코드를 작성할 수 있다. * 파라미터 자리에 할당 연산자는 * 받는 파라미터가 없는 경우에만 작동한다. */ ​ function add3(x = 0, y = 0) { return x + y; } ​ console.log(add3(10)); // 10 ​ /** * 파라미터 자리에서 간단한 연산처리도 할 수 있다. */ ​ function add4(x = 0, y = 0, z = x + y) { console.log('z =', z); } ​ add4(); // z = 0 add4(1, 2); // z = 3 add4(1, 2, 999); // z = 999

ECMAScript Essence - let

ECMAScript Essence - let http://ojc.asia/bbs/board.php?bo_table=LecAngular&wr_id=4 ECMAScript Essence - let let let 연산자는 스코프(접근이 가능한 유효 범위)를 갖는 지역 변수를 선언합니다. let x = 1; if (x === 1) { let x = 2; console.log(x); // expected output: 2 } console.log(x); // expected output: 1 이미 var 연산자가 있었는데 왜 let 이라는 연산자를 새로 … ojc.asia let 연산자는 스코프(접근이 가능한 유효 범위)를 갖는 지역 변수를 선언합니다. ​ let x = 1; ​ if (x === 1) { let x = 2; ​ console.log(x); // expected output: 2 } ​ console.log(x); // expected output: 1 이미 var 연산자가 있었는데 왜 let 이라는 연산자를 새로 도입했을까요? ​ var 연산자의 문제점 let 연산자를 제대로 이해하기 위해서 기존에 사용하던 var 연산자의 문제점을 살펴보는 것이 좋겠습니다. let 연산자가 도입되기 전까지는 언제나 스코프를 갖는 변수를 선언할 수 없었습니다. ​ 코드 블록 연산자는 코드를 중괄호로 감싸서 처리대상 코드를 그룹핑하기만 할 뿐, 그 안에 존재하는 자원의 접근여부에는 관여하지 않습니다. 접근여부를 결정하는 스코프로는 다음 2가지가 있습니다. ​ 글로벌 스코프 글로벌 스코프로 선언한 자원은 파일의 처음부터 끝까지 어느 위치에서든 해당 자원에 접근하여 사용할 수 있습니다. var 연산자로 변수를 선언하면 글로벌 스코프를 갖는 자원이 됩니다. ​ 함수 스코프 함수 안에서 정의한 자원은 함수 외부에서 접근할 수 없습니다. 함수 내부에서만 처음부터 끝까지 해당 자원에 접근하여 사용할 수 있습니다. ​ 일부 전문가들은 클로저 스코프를 추가하여 3가지가 있다고 얘기하기도 합니다. ​ var global_scope_var = 10; ​ (function() { console.log('global_scope_var = ' + global_scope_var); // 함수 안쪽에서 외부에 존재하는 // 글로벌 스코프 자원은 접근이 가능하다. ​ var function_scope_var = 20; ​ if (true) { console.log('function_scope_var = ' + function_scope_var); // 안쪽에서 외부에 존재하는 // 함수 스코프 자원은 접근이 가능하다. ​ var var_in_block = 30; // 조건문의 중괄호는 코드 블록 연산자이다. // 그러나, 조건문의 중괄호는 스코프 연산자가 아니다. } ​ console.log('var_in_block = ' + var_in_block); // 조건문의 중괄호는 스코프 연산자가 아니기 때문에 // 조건문 안에서 선언한 자원은 블록 연산자 외부에서 접근이 가능하다. // 대부분의 다른 언어들은 이것을 허용하지 않는다. console.log('function_scope_var = ' + function_scope_var); // 함수 스코프 자원은 함수안에서 전역적으로 접근이 가능하다. })(); ​ console.log('global_scope_var = ' + global_scope_var); // 글로벌 스코프 자원은 전역적으로 접근이 가능하다. ​ // console.log('function_scope_var = ' + function_scope_var); // ReferenceError : 함수 스코프 자원은 함수밖에서 접근이 불가능하다. 스코프 해결사 let var 연산자로 선언한 자원의 접근 가능여부는 헷갈리기 쉽다. 대신 let 연산자를 사용하면 간단히 정리된다. 평소 알던 다른 언어에서 제공하는 스코프 개념과 같아지기 때문이다. ​ // 조건문의 블록 연산자는 var 연산자로 선언한 변수의 스코프를 제한하지 않는다. ​ for (var i = 1; i <= 3; i++) { console.log('in block : i = ' + i); } ​ console.log('out block : i = ' + i); // 접근이 가능하다! ​ // 함수에서 사용하는 중괄호는 블록 연산자이자 스코프 연산자이므로 // 변수의 접근을 제한하려면 함수안에서 선언해야 한다. ​ for (let j = 1; j <= 3; j++) { console.log('in block : j = ' + j); } ​ // console.log('out block : j = ' + j); // ReferenceError: j is not defined // 조건문안에서 let 연산자로 선언한 변수는 조건문 밖에서 접근할 수 없다. // let 연산자로 선언한 변수에 한해서 조건문의 중괄호는 // 범위 연산자이자 스코프 연산자로 작동한다. var 연산자는 심지어 재 선언도 허용하므로 협업 시 버그를 양산하는 주범이었다. ​ var multi_declare = 10; ​ var multi_declare = 20; // 재 선언이 가능하다! ​ let single_declare = 10; ​ // let single_declare = 20; // SyntaxError: Identifier 'single_declare' has already been declared // 재 선언이 불가능하다. ​ if (true) { var multi_declare = 30; // 이미 존재하는 변수를 재선언! ​ let single_declare = 30; // 다른 변수를 선언 ​ console.log('multi_declare = ' + multi_declare); // 30 console.log('single_declare = ' + single_declare); // 30 } ​ console.log('multi_declare = ' + multi_declare); // 30 console.log('single_declare = ' + single_declare); // 10 변수 선언 시, let 연산자를 사용하면 다른 언어들과 마찬가지로 언제나 중괄호에 따라 변수의 스코프가 결정된다. 따라서, var 연산자 대신 let 연산자의 사용을 권장한다. ​ /** * 과제 : 출력 결과를 예상하고 왜 그런지 설명해 보자. * 기술면접에서 많이 물어보는 질문이다. */ ​ for (var i = 1; i <= 3; i++) { console.log('i =', i); } ​ for (var j = 1; j <= 3; j++) { setTimeout(function () { console.log('j =', j); }, 2000); } ​ for (var k = 1; k <= 3; k++) { (function() { var count = k; setTimeout(function () { console.log('count =', count); }, 3000); }()); } ​ for (let m = 1; m <= 3; m++) { setTimeout(function () { console.log('m =', m); }, 4000); } ​ console.log('Done'); ​ var oldTime = Date.now(); ​ while (Date.now() < oldTime + 1000) {} ​ console.log('End of Code');

ECMAScript Essence, const

http://ojc.asia/bbs/board.php?bo_table=LecAngular&wr_id=3 ECMAScript Essence, const ES6는 ECMAScript 6의 줄임말이다. ECMAScript 2015라고도 부른다. 따라서, ES7은 ECMAScript 2016이 된다. ECMA는 European Computer Manufacturers Association의 약자이다. ECMA인터내셔널은 정보와 통신 시스템을 위한 국제적인 회원국 기반의 비영리 표준화 기구이다. 아직까지 대부분의… ojc.asia ​ES6는 ECMAScript 6의 줄임말이다. ECMAScript 2015라고도 부른다. 따라서, ES7은 ECMAScript 2016이 된다. ECMA는 European Computer Manufacturers Association의 약자이다. ECMA인터내셔널은 정보와 통신 시스템을 위한 국제적인 회원국 기반의 비영리 표준화 기구이다. ​ 아직까지 대부분의 브라우저는 최신 문법을 지원하지 않는다. 그럼에도 불구하고 많은 개발자들이 ES6, 7의 문법을 사용하여 개발할 수 있는 이유는 트랜스파일링 도구 덕분이다. 새 문법으로 작성된 코드를 트랜스파일링 작업을 통해 현 브라우저가 지원하는 ES5 문법으로 변경하여 배포한다. 인기있는 트랜스파일링 도구인 바벨(구 6to5)은 ES6 문법을 ES5 호환 JS 파일로 변환해 주는 대표적인 기술이다. 따라서, 최근에 인기있는 리액트, 앵귤러 등과 같은 프레임워크에서 ES6 문법을 사용하여 개발할 수 있다. ​ ​ ES6 브라우저 지원현황 https://kangax.github.io/compat-table/es6/ ​ ​ const 드디어 자바스크립트에서도 상수를 사용할 수 있게 되었다. 최초 할당 이후에는 값의 변경이 허용되지 않는다. ​ var CONSTABLE_PI = 3.141592; // 대문자로 변수명을 지어서 상수처럼 사용함을 알린다. ​ CONSTABLE_PI = 3.14; // 하지만, 값의 변경을 원천적으로 막을 수 없었다. ​ const CONSTANT_PI = 3.141592; // 상수를 선언한다. ​ // CONSTANT_PI = 3.14; // TypeError: Assignment to constant variable. // const 연산자로 선언한 상수에 값을 재 할당할 수 없다. ​ /** * 상수가 객체의 참조 값을 갖고 있는 경우 */ ​ const USER = { name: 'Chris' }; ​ USER.name = 'Aaron'; // USER가 가리키는 참조 값을 변경할 수는 없지만 // 객체의 프로퍼티는 상수가 아니므로 변경할 수 있다.

Part Ⅰ. JavaScript's New Wave, Development Enviroment Settings

Part Ⅰ. JavaScript's New Wave, Development Enviroment Settings http://ojc.asia/bbs/board.php?bo_table=LecAngular&wr_id=2 Part Ⅰ. JavaScript's New Wave, Development Enviroment Settings Part Ⅰ. JavaScript's New Wave 앵귤러는 러닝커브가 높은 기술이다. 자바스크립트의 기초가 없는 상태에서 앵귤러를 학습하는 것은 비효율적이다. 학습자가 어려움에 처하지 않고 부드럽게 앵귤러 프레임워크의 문으로 들어갈 수 있도록 자바스크립트의 기초를 점검한다. 새로 도입된 문법을 익히면서 진행하면 효과가 배가될 것이다. 추가로, 앵귤러가 … ojc.asia 앵귤러는 러닝커브가 높은 기술이다. 자바스크립트의 기초가 없는 상태에서 앵귤러를 학습하는 것은 비효율적이다. 학습자가 어려움에 처하지 않고 부드럽게 앵귤러 프레임워크의 문으로 들어갈 수 있도록 자바스크립트의 기초를 점검한다. 새로 도입된 문법을 익히면서 진행하면 효과가 배가될 것이다. 추가로, 앵귤러가 채택한 타입스크립트에 대해서 학습한다. ​ Node 설치 Node는 Chrome의 V8 자바 스크립트 엔진에 기반한 자바 스크립트 런타임입니다. 노드는 자바스크립트의 단독 실행환경을 제공합니다. 필수적인 라이브러리(fs, http 모듈 등)를 제공하며 NPM 도구가 같이 설치됩니다. NPM 도구로 추가적으로 필요한 써드파티 라이브러리를 쉽게 설치할 수 있습니다. ​ 브라우저에서 node download 키워드로 검색합니다. 사이트에서 OS에 맞는 노드를 다운받고 설치합니다. 콘솔에서 다음 명령으로 정상 설치여부를 확인합니다. $ node -v v10.14.1 IDE Tool 설치 IDE 도구로써 Atom 에디터를 사용합니다. Atom은 현대적이고 사용자 친화적이며 개발대상에 맞추어 사용할 수있는 텍스트 편집기입니다. 커스터마이징을 통해 생산적으로 사용할 수 있습니다. Atom은 HTML, JavaScript, CSS 및 Node.js 통합으로 구축 된 데스크탑 응용 프로그램입니다. ​ 브라우저에서 atom download 키워드로 검색합니다. 사이트에서 OS에 맞게 제안합니다. 다운받고 설치합니다. 설치는 자동으로 이루어지고 설치가 완료되면 아톰 에디터가 기동합니다. 노드를 인식시키기 위해서 아톰 에디터의 재 시작이 필요합니다. 다음 사이트에서 기본적인 사용법을 확인하세요. https://flight-manual.atom.io/getting-started/sections/atom-basics/ ​ 패키지 설치 패키지 설치를 위해서 아톰에서 File > Settings > Install 순으로 접근합니다. 검색박스에 패키지명의 전체 이름 또는 일부 이름을 넣고 Packages 버튼을 클릭합니다. 원하는 패키지 리스트에서 Install 버튼을 클릭하면 다운로드 및 설치가 진행됩니다. ​ 테마를 검색하고자 할 때는 Packages 버튼 대신 Themes 버튼을 클릭하세요. https://atom.io/themes 사이트를 참고해서 마음에 드는 테마를 추가하세요. ​ 패키지 소개정보를 살펴보시고 쓸만한 패키지들을 설치하세요. https://atom.io/packages ​ 필수 패키지 atom-runner Runs scripts inside of Atom. ​ file-icons Assign file extension icons and colours for improved visual grepping. ​ highlight-selected Highlights the current word selected when double clicking. ​ atom-beautify Beautify HTML, CSS, JavaScript, PHP, Python, Ruby, Java, C, C++, C#, Objective-C, CoffeeScript, TypeScript, Coldfusion, SQL, and more in Atom. ​ autoclose-html Automates closing of HTML Tags. ​ open-in-browsers Open in IE/Chrome/Firefox/Opera. ​ docblockr A helper package for writing documentation. ​ emmet It provides abbreviations for HTML auto-completion and intellisense inspired in CSS selectors, which makes the coding of HTML code much faster and comfortable. ​ atom-typescript The only TypeScript plugin you will ever need. ​ linter You can visualize errors and other types of messages with ease. ​ linter-eslint Lint JavaScript on the fly, using ESLint. ​ autocomplete-modules Autocomplete for require/import statements. ​ autocomplete-paths Adds path autocompletion to autocomplete+. ​ 추천 패키지 pigments A package to display colors in project and files. ​ editorconfig Helps developers maintain consistent coding styles between different editors. ​ minimap A preview of the full source code. ​ git-plus Do git things without the terminal. ​ hyperclick Pluggable text-clicking UI for Atom. ​ js-hyperclick A hyperclick provider that lets you jump to where variables are defined. ​ markdown-pdf Convert markdown to pdf, png or jpeg on the fly. ​ markdown-preview-enhanced One of the 'BEST' markdown preview extensions for Atom editor! ​ markdown-table-editor Markdown table editor/formatter. ​ pdf-view Atom PDF viewer based on PDF.js. ​ todo-show Finds all the TODOs, FIXMEs, CHANGEDs, etc. in your project. ​ javascript-snippets JavaScript & NodeJS Snippets for Atom ​ full-path-in-title-bar Show full filepath in Atom title bar. ​ lorem Simple lorem ipsum text generator with added functionality ​ 기본 패키지 설정 변경 아톰 에디터가 버전업을 함에 따라서 인기 있는 패키지들이 아톰 설치 시 같이 설치되는 기본 패키지가 되었습니다. 이 중에서 쓸만한 옵션들을 소개하고자 합니다. ​ File > Settings > Packages > Core Packages ​ autosave Autosaves editor when they lose focus, are destroyed, or when the window is closed. ​ Settings > Enabled ​ spell-check Highlights misspelled words and shows possible corrections. ​ Disable ​ whitespace Strips trailing whitespace and adds a trailing newline when an editor is saved. ​ Settings > Remove Trailing Whitespace > Uncheck ​ tabs Display a selectable tab for each editor open. ​ Add New Tabs At End > Check Enable VCS Coloring > Check

앵귤러(Angular) 강좌(1)_강좌목표_By 송석원

앵귤러(Angular) 강좌(1)_강좌목표_By 송석원 http://ojc.asia/bbs/board.php?bo_table=LecAngular&wr_id=1 ​ ECMAScript ⇒ TypeScript ⇒ Angular 순서로 학습합니다. 기초를 탄탄하게 구축합니다. 기초없는 건물은 사상누각일 뿐 입니다. 앵귤러라는 건물을 탄탄한 기초위에 세우신다면 자바스크립트 개발자로서 전반적인 실력이 동반상승합니다. 우리에게 정말 필요한 것은 툴 사용법이 아닙니다. 무엇이든 할 수 있다는 자심감과 하고 싶다는 호기심 그리고 빠르게 적응할 수 있는 내공이 필요합니다. 암기는 지양하고 흐름을 지향합니다. 문법을 외우지 마세요. 문법의 탄생배경을 이해하려고 노력하세요. 개념은 되도록 간단하게 정리하고 코드를 통해서 원리를 이해합니다. 코드를 다이어그램으로 다이어그램을 코드로 바꿔가면서 학습하세요. 앵귤러를 사랑하게 되고 다른 개발자들에게 추천하는 행동을 보이는 자신을 발견하게 됩니다. 좋아하게 되면 발전하는 것은 알아서 됩니다. 최대한 개념은 간단하게 정리합니다. 설명이 길수록 삼천포를 빠질 확률이 높아집니다. 실습위주로 학습합니다. 개념부분을 제외하고는 대부분의 설명은 마치 프로젝트를 수행하는 듯하게 코드를 작성하면서 진행합니다. 학습을 마치면 바로 시작할 수 있다는 자신감을 덤으로 얻게 됩니다. 실무에 적용할 수 있는 코드를 통해서 배우고 익혀 프로젝트에 바로 적용할 수 있는 결과물을 이용할 수 있습니다. 실습은 선 작업 후 설명 방식으로 진행됩니다. 학습의 목적은 코드를 읽을 수 있는 능력을 얻는 것이어야 합니다. 먼저 작업을 하면서 무엇을 위한 코드인지 생각합니다. 설명을 먼저 보지 마세요. 호기심은 곧 집중력으로 이어집니다. 이러한 호기심을 가지고 설명을 확인합니다. 이렇게 진행하면 같은 시간에 2배의 학습효과를 기대할 수 있습니다. 반복은 선택이 아닌 필수입니다. 도공이 같은 자기를 몇 번이나 만들어 봤을까요? 서예가는 같은 글자를 몇 번이나 써봤을까요? 피아니스트는 같은 곡을 몇 번이나 쳐봤을까요? 달인이 되기 위해서는 반복적인 훈련을 필수로 수행하셔야 합니다. 재미있게 반복할 수 있는 팁을 드립니다. 경쟁기술인 Vue.js, React 등으로 작성된 코드를 Angular로 바꿔보세요. 그리고 그 반대도 수행해 보세요. 기술의 차이를 정리하세요. 그러면 여러분은 달인이 된 자신을 발견하실 겁니다. 그리고 자신의 코드를 공개하세요. 공개된 소스를 통해서 배웠으니 자신의 소스도 공개하여 받은 사랑을 나눠주세요. ​ ** Version OS: win32 x64 Node: 10.14.1 Angular CLI: 7.1.1 Angular: ~7.1.0 typescript: 3.1.6 IDE: Atom

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...