일단 VScode에서 사용할 폴더(디렉터리)를 하나 만들고 폴더 이름은 start_react로 지었습니다.

그다음 보기(V)를 클릭해서 터미널을 열거나 Ctrl+`(백틱)를 눌러 터미널을 열어줍니다.

이 터미널은 window에서 명령프롬프트를 열어서 사용하는 것과 같다.

위와 같이 npm init react-app .(dot) 을 입력하면 폴더 내에서 리엑트 앱이 설치됩니다. 여기서.(dot)은 파일 경로를 뜻하는데 현재 폴더에서 프로젝트를 만들겠다는 의미입니다.

다운로드가 완료되면 위와 같이 여러 파일들이 생성된 것을 보실 수 있습니다. 이제 프로젝트를 실행해 보겠습니다. 간단합니다. 터미널에서 npm run start를 입력하고 엔터를 눌러주면

위와 같이 브라우저가 자동으로 열리고 실행되는 것을 보실 수 있습니다. 주소는 대부분 http://localhost:3000/로 보이고 만약 브라우저 창을 닫으면 이 주소를 입력해 들어가면 됩니다. 자 이제 다시 종료를 해볼 껀대요. 종료 커맨드는 다음과 같습니다. 터미널에 들어가서 Ctrl + c를 입력해 주고 Y를 입력해 주면 앱이 종료되고 브라우저를 새로고침 하면 페이지가 동작하지 않는 것을 확인할 수 있습니다.

 

개발이 완료되면 인터넷에 배포를 해야하는대요. 그런데 이런 코드들은 한번 가공을 해야합니다. 이 과정을 프론트 엔드에서는 빌드라고 합니다. 개발된 프로젝트를 빌드하려면 커맨드 창을 열고 "npm run build"를 입력합니다.

그럼 자동으로 알아서 웹에서 사용이 가능하도록 변환해 줍니다. 이 후 잘 빌드 되었나 확인하기 위해 "npx serve build"를 입력하면 로컬 환경에서 실행할 수 있도록 주소값을 줍니다.

요약

  • 터미널 커맨드는 Ctrl + ` (백틱)
  • 리액트 프로젝트 만들기 npm init react-app 파일경로 ex) npm init react-app .
  • 리엑트 프로젝트 실행하기 npm run start (개발 모드 실행)
  • 개발 모드 종료 Ctrl + C
  • 개발된 프로젝트 빌드하기 npm run build
  • 빌드한 것 로컬에서 실행하기 npx serve build

'React' 카테고리의 다른 글

[React] Props 정리  (0) 2023.04.17
[React] CSS 사용하기  (0) 2023.04.12
[React] JSX 문법  (0) 2023.04.08
[React] 개발자 도구 설치  (0) 2023.04.08
[React] 개발 환경 구축하기  (0) 2023.04.08

리엑트를 시작하기에 앞서 개발 환경부터 구축 하고자 한다.

 

먼저 아래에 보이는 링크를 통해 Node.js를 설치해준다.

Node.js 웹사이트

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

왼쪽에 있는 것으로 설치를 진행하고

모두 Next를 클릭해 설치한다. 설치가 잘 되었는지 확인해 보기 위해 명령 프롬포트를 열어준다.

위와 같이 node -v 커맨드와 npm-v 커맨드를 입력해서 설치한 버전이 나오면 정상적으로 설치가 완료된 것이다.

코드에디터는 VScode를 사용했고 주요 브라우저는 Chrome 이다.

'React' 카테고리의 다른 글

[React] Props 정리  (0) 2023.04.17
[React] CSS 사용하기  (0) 2023.04.12
[React] JSX 문법  (0) 2023.04.08
[React] 개발자 도구 설치  (0) 2023.04.08
[React]React 프로젝트 만들고 실행/종료/빌 해보기  (0) 2023.04.08

ES2015에 등장

모듈: 기능단위로 나눠진 독립적이고 재사용가능한 소프트웨어 덩어리/ 모듈은 단지 파일 하나의 파일에 불과합니다. 즉 스크립트 하나가 모듈 하나입니다.

모듈화: 공통된 기능이나 특별한 목적에 따라 각각의 파일 별로 분리시키는 과정

 

모듈이 필요한 이유

한 개발자가 1만 줄 이상의 코드를 작성했다고 가정해 보자.

이걸 하나의 파일에서 관리하고 협업에서 사용해야 한다면 벌써부터 아찔해진다.

이 개발자를 제외한 다른 개발자들은 1만 줄의 코드를 해석하느라 시간을 낭비하게 된다.

또한 파일 하나로 모든 기능을 관리하기 때문에 부분적인 기능을 재사용하기에는 거의 불가능에 가깝다.

이런 문제점을 해결하는 데 필요한 것이 바로 모듈화다.

 

모듈 파일의 조건

모듈 파일의 독립적인 스코프(모듈 스코프)를 가져야 합니다.

이게 무슨 소리냐면 모듈 내에 존재하는 변수나 함수는 모듈 스코프 내에서만 활용이 가능해야 한다는 말이다.

main.js

const num = 123; // main.js 파일에 변수 선언

other.js

console.log(num) // 123 같은 폴더 내의 other.js 파일에서 실행해도 정상적으로 실행됨

이걸 방지하려면 HTML에서 자바 스크립트를 불러올 때 type 속성에 module 값을 추가하면 됩니다.

<script type="module" src="main.js"></script>
<script type="module" src="other.js"></script>

 

자바 스크립트에서는 import와 export를 사용해서 다른 모듈을 불러와 불러온 모듈에 있는 함수를 호출하는 것과 같은 기능 공유가 가능합니다.

export

Named exports

Named exports는 여러 값을 내보내는데 유용합니다.

export 된 이름을 사용해 import 합니다.

const num = 12345;
export const arr = [1, 2, 3, 4, 5]; // 개별로 export

function print(value) {
    console.log(value)
}

export {num, print}; // 묶어서 export

 

Default Exports

모듈 당 한 개만 선언할 수 있습니다.

딴 변수 함수 통틀어 하나만 default export 할 수 있기 때문에 기능의 "메인"을 내보내는 것이 좋습니다.

function sum(a,b) {
    return a + b
}

export default sum;

 

import

모듈 전체 가져오기

import * as members from './other.js'; // *를 와일드 카드 문자라고함

 

하나 이상의 멤버 가져오기

import {num, print, arr} from './other.js';

 

다른 이름으로 멤버 가져오기

import {num as numbers, print, arr} from './other.js';

 

default export 값 가져오기

import sum from './other.js'; // {}중괄호는 쓰지않는다

다른 값과 같이 가져올 때, default export 값을 다른 값보다 먼저 써줘야 합니다.

import sum, {num as numbers, print, arr} from './other.js';
import sum, * as members from './other.js';

 

'JS' 카테고리의 다른 글

[JS] 요소 다루기 정리  (0) 2023.04.21
[JS] 자바스크립트 태그 선택하기  (0) 2023.04.20
[JS] 다양한 배열 메소드  (0) 2023.04.06
[JS] 에러 객체와 try catch문  (0) 2023.04.05
[JS] 구조 분해(Destructuring)  (0) 2023.04.05

pop

배열의 마지막 요소를 제거한다. 제거된 요소는 변수로 저장할 수 있다.

let myArray = [1, 2, 3, 4, 5];

const popped = myArray.pop();

console.log(popped); // 5
console.log(myArray); // [1, 2, 3, 4]

 

push

배열의 마지막에 n개의 요소를 추가한다.

let myArray = [1, 2, 3, 4, 5];

myArray.push(6,7,8);

console.log(myArray); // [1, 2, 3, 4, 5, 6, 7, 8]

 

concat

두 개 이상의 배열을 합치고 복사한다.

let myArray = [1, 2, 3, 4, 5];
let otherArr = [6, 7, 8]

const newArr = myArray.concat(otherArr);

console.log(newArr); // [1, 2, 3, 4, 5, 6, 7, 8]
console.log(myArray); // [1, 2, 3, 4, 5]

 

join

배열을 문자열로 반환한다.

아규먼트로 구분자(separator)를 넣는다.

let myArray = ['apple', 'banana', 'orange', 'grape'];

let newStr = myArray.join(' '); // 공백추가

console.log(myArray.join()); // apple,banana,orange,grape
console.log(newStr); // apple banana orange grape

 

split

문자열을 배열로 변환한다. 두번째 아규먼트로는 몇 개를 자를 것인지 정한다.

let str = '1, 2, 3, 4, 5';

const newArr = str.split(); // 구분자를 넣지 않으면 문자열 한덩어리를 배열의 아이템 1개로 들어간다.

console.log(newArr); // ['1, 2, 3, 4, 5']
let str = '1, 2, 3, 4, 5';

const newArr = str.split(','); // 구분자 기준으로 쪼개짐

console.log(newArr); // ['1', '2', '3', '4', '5']
const newArr = str.split(',', 2);

console.log(newArr); // ['1', ' 2']

 

splice

배열의 원래 요소를 삭제하거나 삭제 후에 추가한다. 반환 값은 삭제한 요소의 배열이다.

배열.splice(자르기 시작할 index, 지울 요소 개수, 대체할 요소);
let myArray = [1, 2, 3, 4, 5];

myArray.splice(0, 2);

console.log(myArray); // [3, 4, 5]
myArray.splice(0, 2, 12,34);

console.log(myArray); // [12, 34, 3, 4, 5]

 

slice

원하는 요소를 새로운 배열로 추출한다. 원래의 배열은 수정되지 않고 새로운 배열로 복제된다.

let myArray = ['apple', 'banana', 'orange', 'grape'];

//마지막 인덱스 아규먼트가 없으면 시작 인덱스부터 끝까지 추출된다.
console.log(myArray.slice(1,3)); // banana,orange
console.log(myArray); // apple banana orange grape

 

forEach

배열의 요소를 하나씩 살펴보면서 반복작업한다. 리턴값은 void라 map메서드를 사용하는 일이 더 많다. 콜백함수를 첫 번째 아규먼트로 받는다. (index와 array는 생략가능)

배열.forEach((element, index , arr) => {}); // 요소, 인덱스, 배열 순으로 아규먼트를 받는다.
let myArray = [1, 2, 3, 4, 5];

for (let value of myArray) {
    console.log(value);
}
console.log('----------------')
myArray.forEach((element) => {
    console.log(element);
}); // 위의 for문과 똑같이 작용하는 것을 알 수 있음.

결괏값

 

map

forEach함수와 작동하는 방식이 비슷하다. 콜백함수의 리턴값을 모아 새로운 배열을 만든다. 원배열에는 영향을 끼치지 않는다.

배열.map((element,index,arr) => {}
let myArray = [1, 2, 3, 4, 5];

const newArr = myArray.map((element) => { 
    return element + 5
})

console.log(myArray); // [1, 2, 3, 4, 5]
console.log(newArr); // [6, 7, 8, 9, 10]

 

filter

배열의 모든 요소들을 돌면서 콜백함수에 반환된 값이 true가 나오는 모든 요소를 모아 새로운 배열로 반환한다.

배열.filter((element, index, arr) => {})
const myArray = [5, 10, 15, 20, 25];

const filteredNumbers = myArray.filter((number) => {
    return number >= 10;
});

console.log(filteredNumbers); // [10, 15, 20, 25]

 

find

배열 내 모든 요소들을 돌면서 콜백함수에 반환된 값이 true가 나오면 그 즉시 코드를 종료하고 값을 반환한다.

배열.find((element, index, arr) => {})
const myArray = [5, 10, 15, 20, 25];

const findedNumbers = myArray.find((number) => {
    return number >= 10;
});

console.log(findedNumbers); // [10]

 

some

모든 배열을 돌면서 콜백함수 조건을 하나라도 만족하면 true를 리턴하고 반복을 종료한다.

배열.some((element, index, arr) => {})
const myArray = [5, 10, 15, 20, 25];

const bool = myArray.some((number) => {
    console.log(number); // 5, 10까지만 출력됨
    return number >= 10;
});

console.log(bool); // true

 

every

some과 반대되는 개념이다. 모든 배열을 돌면서 콜백함수 조건을 모두 만족하면 true를 리턴하고 반복을 종료한다. 반대로 하나라도 false를 반환하면 false를 리턴하고 반복이 종료된다.

배열.every((element, index, arr) => {})
const myArray = [5, 10, 15, 20, 25];

const bool = myArray.every((number) => {
    console.log(number); // 5, 10, 15까지만 출력됨
    return number < 15;
});

console.log(bool); // false

 

reduce

원하는 시작점부터 모든 배열을 돌면서 값을 누적한다.

배열.reduce((prev,curr,curI,arr) => {},0)
//처음값, 현재값, 현재 인덱스, 배열

처음값(prev)은 생략하면 두 번째 아규먼트(curr)이 처음값으로 설정된다. reduce메소드의 두번째 아규먼트는 가장 처음 값을 할당하고 없다면 1을 자동으로 할당한다. 처음값에는 리턴 값을 반복적으로 할당하고 현재값에는 배열의 요소를 반복하여 할당받는다. (reduceRight는 반대에서 시작한다.)

const myArray = [5, 10, 15, 20, 25];

const sum = myArray.reduce((prev,curr) => {
    console.log(`prev: ${prev}`);
    console.log(`curr: ${curr}`);
    const acc = prev + curr;
    console.log(`acc: ${acc}
    `);
    return acc;
},0);

console.log(sum);

sort

배열의 순서를 정렬한다. 아무 값도 전달하지 않으면 유니코드를 기준으로 정렬한다. 해당 배열 자체를 바꾼다.

 

배열.sort();
const myArray = [10, 24, 115, 34, 264];

const sortedArr = myArray.sort();

console.log(sortedArr); //[10, 115, 24, 264, 34]

위처럼 유니코드를 기준으로 정렬하기 때문에 오름차순이나 내림차순으로 정렬하려 할 때 오류가 발생할 수 있다.

sort의 첫 번째 아규먼트는 콜백함수로 콜백함수의 아규먼트는 보통 앞의 값과 다음값으로 정해진다.

const myArray = [10, 24, 115, 34, 264];

const sortedArr = myArray.sort((a,b) =>{
    console.log(`prev ${a}`);
    console.log(`curr ${b}
    `);
    return a-b;
});

console.log(sortedArr);

콜백 함수 내의 a - b가 음수라면 앞의 값(prev)을 반환하고 양수라면 뒤의 값(curr)을 반환한다. 따라서 a - b를 반환하면 오름차순으로 정렬되고 b - a로 반환하면 내림차순으로 정렬된다.

reverse

해당 배열의 순서가 뒤집힌다. 새로운 배열 생성이 아닌 원래 배열에 덮어쓴다.

const myArray = [1, 2, 3, 4, 5];

myArray.reverse();
console.log(myArray); // [5, 4, 3, 2, 1]

 

마무리

자주 사용되지는 않는 배열 메서드들이 많아 까먹을 것 미리 정리해 보았습니다. 앞으로는 이 페이지를 자주 들릴 것 같네요.

자바스크립트는 에러가 발생하면 코드가 끝까지 실행되지 않고 에러 객체를 생성합니다. 에러를 다루는 방법을 알면 더욱 안정적인 프로그램을 만드는대 도움이 됩니다.

에러 타입

const title = '123';
console.log(title);
  • Reference Error : 존재하지 않는 변수 혹은 함수( 존재하지 않는 변수를 사용할 시 (variable))
  • TypeError : 잘못된 방식으로 자료형을 다룸 ( 함수가 아닌 변수를 함수처럼 사용할 시 ex. title())
  • SyntaxError : 문법에 맞지 않는 코드 작성 (변수 선언 시 -를 넣는 경우 ex. const ti-tle)

링크 - 위 3가지 타입을 제외한 에러 객체(오류 유형)

 

에러 객체 구성

  • name: 에러 객체의 타입
  • message: 에러 내용

 

의도적으로 에러를 만들고 발생시키는 법

new 키워드와 에러 객체 이름을 따서 만들 수 있다

const error = new TypeError('타입 에러 발생'); // 에러 객체 생성

throw error; // 의도적으로 발생

console.log('123'); // 에러 발생시키고 난 뒤의 코드는 실행 되지않음

 

try catch문

try catch 문 역시 if와 for문처럼 스코프를 생각해서 코드를 짜야합니다.(try {} 안에 변수 선언 시 중괄호 {} 안에서만 사용이 가능하다) try catch문을 사용하면 프로그램이 에러로 인해 멈추지 않고 catch {} 안에 있는 코드와 그 이후의 코드를 안전하게 실행시킬 수 있습니다. 만약 에러가 발생하지 않는다면 catch문의 코드는 실행되지 않습니다.

 try 문에서 에러가 발생하면 에러 객체가 생성되는데 그건 catch의 첫 번째 파라미터로 전달됩니다. 

try {
    //코드
} catch {
    //에러 발생 시 동작
}
try {
    const error = new TypeError('타입 에러 발생');
    
    console.log('12321')
    
    throw error;
    
    console.log('123'); //실행되지않음
} catch (err){
    console.log('456');
    console.error(err);
    console.log(err);
    console.log(err.name);
    console.log(err.message);
}

결괏값:

console.error는 우리가 평소에 보는 오류처럼 에러를 빨간색으로 처리해 보여줍니다. 이렇게 try catch문으로 에러를 처리하는 과정을 '예외 처리(Exception Handling)'라고 합니다.

 

finally문

finally문은 try catch 문 이후에 항상 발생하는 코드를 적을 때 사용합니다. 예를 들어 try catch문이 사용된 시간을 표시할 때 사용합니다. finally문에서 에러가 발생하면 try catch 문을 중첩으로 사용하여 예외 처리 할 수 있습니다.

try {
try {
  // 실행할 코드
} catch (err) {
  // 에러가 발상했을 때 실행할 코드
} finally {
  // 항상 실행할 코드
} 
} catch { // 첫번째 try문의 catch
// finally문에서 오류 발생시 코드
}

마무리

초보 개발자가 끄적이는 공부노트라 틀린 것이 있을 수 있습니다. 틀린 점 지적은 언제나 환영합니다!

 

 

'JS' 카테고리의 다른 글

[JS]모듈(Module) 모듈화(Modularization)/ Import/Export  (0) 2023.04.06
[JS] 다양한 배열 메소드  (0) 2023.04.06
[JS] 구조 분해(Destructuring)  (0) 2023.04.05
[JS] 옵셔널 체이닝(Optional Chaining)  (0) 2023.04.03
[JS] Spread 구문  (0) 2023.04.01

+ Recent posts