[Node.js_4기] Today_I_Learn : Node.js 설치, javascript학습 (23/12/28)

2023. 12. 28. 21:28공부/내배캠 TIL

목차

 

1. 학습 내용

2. 내용 정리

3. 예제

4. 생각 정리


금일 미니 프로젝트가 마무리됨에 따라, 개인 공부를 시작했습니다.

Node.js (opentutorials.org)
그리고, sparta...

1. 학습 내용 


1. VSCode를 사용하여 Node.js 사용해보기

node.js를 다운로드 받고, cmd에서 node -v를 입력해서 node.js 설치를 확인한다.

1. 새 폴더를 만들고 해당 폴더를 vscode를 사용해 엽니다.
2. js파일을 만들고, console.log('Hello World');를 입력 후 저장합니다.
3. 터미널을 열고, node <파일명.js> 를 입력한 후 출력을 확인합니다.

4. main.js( Node.js - 웹서버 만들기 - Node.js (opentutorials.org) )를 실행하면 localhost:3000으로 페이지에 접근이 가능해진다.

만약, main.js를 종료하면 더이상 접근이 불가능해진다. -> js파일이 서버로서 작동하고 있다는 것을 알 수 있다.

2. JavaScript - 기초문법

[1. JavaScript - JS의 특징]

1. JS의 역사
2008년 V8엔진 출시(super fast, 컴파일러와 메모리 관리 시스템) => 
js를 웹에서 끌어내서 따로 써볼까? (2009년 Node.js 등장)
-- 하나의 언어로 Front, End, DB(MongoDB) = FullStack
-- 이후 프론트엔드 프레임워크(React, Vue등)의 대중화, SPA(Single Page Application) 개발의 활성화
-- 현재 : JS는 프론트 엔드와 백 엔드 개발 분야에서 널리 사용되고 있으며, Node.JS를 이용한 서버 개발도 발히 이루어지고 있다. 

2. JS 언어의 특징
[객체 지향 프로그래밍 지원]
(객체지향 : 데이터와 함수를 객체라는 그룹으로 묶어 처리 / 절차지향 : 순서대로 실행되는 일련의 과정으로 프로그래밍)
객체를 생성하고 관리하는 데에 강점. 복잡한 기능 구현 가능.
중괄호({})를 통해 객체 생성, 속성을 쉼표(,)로 구분.
속성은 이름과 값을 지니닌다.
이름은 문자열로, 값은 여러 데이터 타입으로.
객체 내부의 함수는 메소드라 부르며 속성의 값으로 메소드를 추가할 수 있음.
객체를 만들어 필요한 속성과 메소드를 추가하여 사용.

[동적 타이핑]
변수 선언시 타입을 지정하지 않음. 이는 런타임 시점에 변수에 할당되는 값에 따라 데이터 타입이 자동으로 결정된다는 뜻. (변수가 불러와 졌을때 타입이 결정된다.)


(런타임 시점 : 프로그램이 실행되는 동안의 시점. = 코드가 실행되는 동안에 발생하는 시점 / 컴파일 시점)

[함수형 프로그래밍 지원]
자바 스크립트는 함수를 사용해서 프로그래밍할 수 있다!
함수를 일급 객체로 취급하고, 고차 함수를 지원한다. 
이는 코드의 재사용성과 가독성이 높아진다는 뜻.
(일급 객체 : 함수를 일반 값과 마찬가지로 취급할 수 있다.)
(고차 함수 : 함수를 인자로 받거나, 함수를 변수로 받는 함수. )

[비동기 처리]
처리가 병렬로 이루어진다. -> 속도가 빠른 이유


[클라이언트 측 및 서버 측 모두 지원]
Node.js를 사용한 서버 구축 가능. 
풀스택 개발에 자바스크립트를 활용할 수 있다!

[2. JavaScript - 기본 문법]

(1) 변수 와 상수
변수 -
모든 프로그래밍 언어는 값을 메모리에 저장하고, 저장된 값을 읽어 재사용 하기 위해 변수를 이용.
변수의 주요 5개념 -
이름(고유명), 값(저장된 값), 할당(저장), 선언(사용하기 위한 행위), 참조(할당된 값을 read)

변수 선언 키워드 -
var, let, const + <변수명>
var : 옛날 방식, 여러 번 선언해도 오류가 발생하지 않는다. 가장 마지막에 선언한 값으로 선언됨.
let : 변수 선언(선언 이후 변경 가능). 같은 이름이 변수 두 번 선언시 오류 발생.
const : 상수 선언(선언 이후 변경 불가능). 같은 이름이 변수 두 번 선언시 오류 발생.
선언되지 않은 변수 사용시, 참조 에러 발생.

대입 연산자 : = 좌측에 대입 할 변수명, 우측에 대입 할 값을 작성

(2) 데이터 타입

[1] 데이터 타입
1. 숫자(Number)

a. 정수형 숫자(integer)

let num1 = 10;
console.log(num1); // 10
console.log(typeof num1); // "number"

 

b. 실수형 숫자(Float)

let num2 = 3.14;
console.log(num2); // 3.14
console.log(typeof num2); // "number"

 

c. 지수형 숫자(Exponential)

let num3 = 2.5e5; // 2.5 x 10^5
console.log(num3); // 250000
console.log(typeof num3); // "number"

 

d. NaN(Not a Number) :  수학적으로 정의되지 않는 계산 수행시, 숫자가 아닌 값을 숫자로 변환시 발생.

let num4 = "Hello" / 2;
console.log(num4); // NaN
console.log(typeof num4); // "number"

 

e,d. Infinity

let num5 = 1 / 0;
console.log(num5); // Infinity
console.log(typeof num5); // "number"

let num6 = -1 / 0;
console.log(num6); // -Infinity
console.log(typeof num6); // "number"

 

2. 문자열(String)

문자의 나열. 작은 따옴표('), 큰 따옴표(")로 감싸서 표현

let name = 'Alice';
let message = "Hello, world!";

 

3. 불리언(Boolean)
참(true)와 거짓(false)

let bool1 = true;
console.log(bool1); // true
console.log(typeof bool1); // "boolean"

let bool2 = false;
console.log(bool2); // false
console.log(typeof bool2); // "boolean"

조건문과 논리 연산자와 함께 사용되는 경우가 많음.

4. undefined
값이 할당되지 않은 변수를 의미.

let a;
console.log(a); // undefined

5. null
값이 존재하지 않음을 의미 != undefined

let a = null;


6. 객체(Object)
attribute와 method를 가지는 컨테이너. 중괄호({})를 사용하여 생성.

let person = {name:'Alice',age:20}
person.name // 'Alice'
person.age // 20

-> 파이썬의 딕셔너리 자료형? 으로 이해. 그런데 이제, 값으로 함수를 받을 수 있는...

7. 배열(Array)
여러 데이터를 순서대로 저장하는 데이터 타입. 대괄호([])를 사용하여 배열을 생성.

let numbers = [1, 2, 3, 4, 5];
let fruits = ['apple', 'banana', 'orange'];

-> 파이썬의 리스트 자료형? 또는 numpy array? 으로 이해.

2. 내용 정리 

[1. JS의 특징]
JS는 프론트엔드/백엔드 모두에서 널리 사용되고 있는 언어이다. -> 배울 필요가 있다.
JS는 객체 지향, 동적 타이핑, 함수형 프로그래밍, 비동기 처리, 클라이언트 서버 지원을 특징으로 한다.
-> 파이썬이랑 거의 유사한데? / 웹개발을 파이썬으로 못하는건 아니지만, JS가 더 쉽고 빠르다. 마찬가지로 JS로 인공지능 개발을 못하는건 아니지만, 파이썬이 더 잘한다.(Pytorch는 신이고 무적이다)

[2. 기본 문법]
(1) 변수와 상수
let 변수선언, const 상수선언
(2) 자료형
1. 숫자형
- 정수형(Integer), 실수형(Float), 지수형(Exponential), NaN, Infinity(+), Infinity(-)
- (python의 int, float과 함수로 표현되는 값들...) 
2. 문자열 (== python str)
3. 불리언 (Boolean, python과 동일)
4. undefined 
5. null
6. 객체(Object)  - 객체 리터럴, 생성자 함수, 프로토타입, class로 생성 / python에선 class로 생성
- 일단 예제에선 파이썬의 딕셔너리와 같은 형태를 가지지만, 이런저런 부분이 다르다. 따옴표 생략이라던가...
7. 배열(Array) - 파이썬에서 배열은 numpy로 지원하는 n*n형태의 배열을 말한다. 바닐라 파이썬의 리스트와 비슷한 느낌으로 쓰는건가?

3. 예제 


동적 타이핑 예시

let myVariable = "Hello, world!"; // 변수 선언 및 문자열 데이터 타입으로 할당
console.log(typeof myVariable); // "string" 출력
myVariable = 123; // 숫자 데이터 타입으로 할당
console.log(typeof myVariable); // "number" 출력
myVariable = true; // 불리언 데이터 타입으로 할당
console.log(typeof myVariable); // "boolean" 출력

 


고차함수 예시

function operate(func, a, b) {
return func(a, b);
}
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
console.log(operate(add, 2, 3)); // 5
console.log(operate(multiply, 2, 3)); //


변수 선언 예시

// var로 변수 선언
var myVar = "Hello World";
console.log(myVar); // "Hello World"
// let으로 변수 선언
let myLet = "Hello World";
console.log(myLet); // "Hello World"
// const로 상수 선언
const myConst = "Hello World";
console.log(myConst); // "Hello World"


2. 문자열 

// 길이(length) 확인
let str = "Hello, world!";
console.log(str.length); // 13

// 결합(concaternation)
let str1 = "Hello, ";
let str2 = "world!";
let result = str1.concat(str2);
console.log(result); // "Hello, world!"

// 자르기(substr, slice)
let str = "Hello, world!";
console.log(str.substr(7, 5)); // "world"
console.log(str.slice(7, 12)); // "world"

// 검색(search)
let str = "Hello, world!";
console.log(str.search("world")); // 7

// 대체(replace)
let str = "Hello, world!";
let result = str.replace("world", "JavaScript");
console.log(result); // "Hello, JavaScript!"

// 분할(split)
let str = "apple, banana, kiwi";
let result = str.split(",");
console.log(result); // ["apple", " banana", " kiwi"]

3. 불리언

// 조건문과 논리 연산자에서의 불리언 연산자 사용 예시
let a = 1;
let b = 2;

if (a==b){
	console.log("same");
}
else {
	console.log("diffrent");
}

console.log(a**b); // false

 


4. 생각 정리 


이전에 파이썬을 학습했던 경험이 학습 초반에는 도움이 되고 있는듯 합니다.
그러나 차이점도 꽤 큰편이라, 앞으로도 둘을 비교하며 공부하는 방식으로 계속할 듯 합니다.