본문 바로가기
Programming/HTML & CSS & JavaScript

js 2일차 - 1일차 정리

by yoon9i 2024. 5. 3.

* 웹 어플리케이션 개발 ( 웹사이트 )

 1. web application
   
   - 화면 필요 ( html, JSP/Servlet)
   

     브라우저 ------------------------> 서버 ( html, JSP/Servlet, Spring Framework, Spring Boot )
            <--------------------------
      응답: html(css,js)


2. REST API
             -----------------------> 서버 ( Spring Framework, Spring Boot )
     장치      <----------------------
        XML, JSON ( JavaScript Object Notation)
{key:value, key:value}
    

3. full stack 어플리케이션 ( 화면 + REST API)

      React.js(JS)  ------------------------> 서버 ( Spring Framework, Spring Boot )
                  <--------------------------
          응답: JSON


4. MSA ( Micro Service Application)

###########################################################################
###########################################################################
1장. JS 개요
###########################################################################
1. (Vanilla) Javascript(JS) 개요

  - Java 언어와 무관
  - 웹브라우저에서 실행됨 ( JS 엔진 )
    크롬의 JS 엔진: v8
    html 랜더링 기능: 랜더링 엔진

  - V8엔진을 크롬 브라우저뿐만 아니라 일반 서버에서도 실행될 수 있도록 만듬.
    ==> node.js


     클라이언트                           서버
     (크롬브라우저:V8)                 (node.js:V8)

  - JS 라이브러리
    ==> jQuery

  - JS 프레임워크 (프런트 앤드 기술 )
    => React.js (*, 페이스북)
    => Vue.js   ( 중국계 미국인 )
    => Angular  ( 구글 )

  - React 종류 3가지

    가. React.js
       - CSR ( Client Side Rendering )

    나. Next.js
       - SSR ( Server Side Rendering )

    다. React Native
      - 모바일 용

  - JS 표준화 ==> ES6 ( ECMAScript 6: 2015 년 )
    일반적인 JS는 ES5 의미한다.

  - TypeScript (******)
     JS + 타입지정 ==> 개발향상 기대
     *.tsc --------> *.js
            도구이용
 
2. JS 특징
  - 인터프리터 언어 ( 컴파일 없이 한줄 씩 실행 )
  - 대소문자 구별함.
  - JS 엔진에서 실행.
  - html 태그에 포함되어 정의함.
   
    가. <head> 태그안에 JS 정의가능
       - <script> 태그 이용

    나. <body> 태그안에 JS 정의가능
       - <script> 태그 이용

  - 주석문은 자바와 동일 ( //, /*~*/ )

###########################################################################
###########################################################################
2장. 식별자와 데이터 종류
###########################################################################
1. 식별자 (identifier)
  - JS 문법에 지정하는 영단어.
  - 대소문자 구별
  - 첫글자는 반드시 영문자 또는 _ 또는 $ 만 가능.
    이후에 숫자지정 가능.
  - 자바와 비슷하게 시스템 정의 식별자(예약어,키워드) 와 사용자 정의 식별자(변수, 함수(메서드), 클래스명)가 있음.

2. 데이터 종류 ( 외우기 )

  가. 기본 데이터형

      - 수치데이터: 정수와 실수 포함 ==> Number 객체 관리
      - 문자데이터: 문자와 문자열 포함 ==> String 객체 관리
                 예> '홍길동', "홍길동"
      - 논리데이터: true/false ( 일반데이터도 boolean 값으로 처리 가능 ) ==> Boolean 객체 관리

      - undefined : 변수 초기화 안된 상태 의미. (*****) ==> Object 객체 관리
      - null      : 초기화는 되었는데 값(객체)없음 의미.  ==> Object 객체 관리
      - NaN       : Not a Number                  ==> Number 객체 관리 
                  예>  Number.parseInt("홍길동"); ==> NaN 발생
       
                  자바:  Integer.parseInt("123");  ==> 123
        Integer.parseInt("홍길동"); ==> 에러

  나. 참조 데이터형 ( 객체 데이터 의미 )

     - 배열(객체): [값, 값2, ..]
     - JSON(객체): {key:value, key:value}
     - 함수(function): 기능처리 
                    예> function fun(){}
       ==> 함수가 데이터란 의미는 함수를 변수에 저장할 수 있음을 의미한다. (*************)

     - 클래스(class):   class Cat{
                         생성자
 메서드(함수문법)
 function fun(){}
                      }
      

3. typeof 연산자

 - 데이터 타입을 알 수 있음.
 - 반환값은 문자열로 반환.

 - 문법:  typeof 값

###########################################################################
###########################################################################
3장. 변수와 상수
###########################################################################

1. 변수 용도
  - 데이터 저장

2. 변수 특징
  - 데이터형을 지정하지 않는다. (******)
    변수에 저장되는 데이터 종류(데이터타입)을 제한안함.
    즉 하나의 변수에 모든 데이터를 저장할 수 있음.


3. 문법

  가.  var 키워드 이용 ( OLD 방법 )
    
     - var 변수명; // 변수선언, undefined 값이 저장됨.
       변수명=값;  // 변수초기화
  
     - var 변수명=값;
     - 특징:
        변수명 중복가능.
함수 스코프를 따른다. ( 함수(function)가 아닌 {} 에서는 외부에서도 사용 가능 )
예> 
     if(true){
               var n = 10;
     }
     console.log(n);  // 사용가능

     function fun(){
                var n2 = 10;
     }
     console.log(n2);  // 사용 불가능

  나.  let 키워드 이용 ( ES6 지원 )

      - let 변수명;  // 변수선언 , undefined 값이 저장됨.
        변수명=값;   // 변수초기화
  
      - let 변수명=값;
      - 특징:
        변수명 중복 불가능.
블럭 스코프를 따른다.

        예> 
     if(true){
               let n = 10;
     }
     console.log(n);  // 사용 불가능

     function fun(){
                let n2 = 10;
     }
     console.log(n2);  // 사용 불가능

 
4. 데이터 형변환

  1> + 를 제외한 나머지 산술연산자 ( -, *, / , % )는
    문자열이 자동으로 수치로 형변환되어 연산됨.
     + 는 연결처리됨.


  2> 일반 데이터가 boolean 로 처리 (********************)

     - false로 처리되는 일반 데이터

 0
 "" (빈문자열)
 undefined
 null
 NaN

     - true로 처리되는 일반 데이터
       ==> 위의 false로 처리되는 5가지 제외한 나머지 모두 true로 처리됨.

      //JS에서 가능한 표현식
      if(10){
        console.log("10은 true");
      }
   

5.  기본형 변수  vs  참조형 변수

   1> 기본형 변수
    - 기본형 데이터를 저장하는 변수
    예> 
       let n = 10;
       let n2 = n;

       n2값을 변경해도 n값은 변경이 안됨.


   2> 참조형 변수
    - 참조형 데이터를 저장하는 변수

    예> 
        let x = [10,20,30];
let x2 = x;

x2값을 변경하면 x값도 변경이 됨.


6.  상수 (ES6 지원) ==> React.js에서 주로 사용.
 
   - const 키워드 이용 
   - 문법:
       
        const 상수명 = 값;

   - 값 변경이 불가
   - let 키워드 동작을 따름.
     ( 중복불가, 블럭 스코프 따름 )

   *주의할 점 (**************)

    const NUMS = [10,20,30];
    NUMS[0]=100;

     NUMS는 주소값을 가지고 있고 주소값 자체가 변경된 것이 아니기 때문에
    위 코드는 에러없이 동작이 된다.
    즉 변경전과 변경후의 배열의 주소값은 동일함. 단지 배열의 요소가 달라진 것이다.


###########################################################################
###########################################################################
4장. 연산자
###########################################################################

1. 산술연산자

   +
   -
   *
   /
   %
 
 => + 제외한 나머지는 문자열형태의 숫자가("10") 자동으로 수치로 변환되어 연산된다.
    + 는 연결이 된다.

 => 자바:  10/3 ==> 3
    JS:   10/3 ==> 3.333333


2. 대입연산자

    a=b
    a+=b
    a-=b
    a*=b
    a/=b
    a%=b

 
3. 비교연산자

   a == b ( 같냐?,  equal 연산자 ( 값만 비교 ))
   a === b ( 같냐?, identical 연산자 ( 값과 타입까지 비교 ), *******)

   a != b  (같지 않냐?)
   a !== b (같지 않냐?)

   a > b ( 크냐 )
   a >= b (크거나 같냐)

   a < b ( 작냐)
   a <= b (작거나 같냐 )

   // 비교연산자2 - equal vs identical
let n = "10";
let n2 = 10;


console.log(n == n2); // true, equal 연산자 ( 값만 비교 )
console.log(n === n2); //false,  identical 연산자 ( 값과 타입까지 비교 )

  - undefined 비교시에는 반드시 === (identical)를 사용해야 된다. 
   이유는 실제는 null값일지라도 undefined와 == 비교하면 true 반환됨.


4. 논리 연산자

 - && (and )
   || (or)
   !  (not)

 - 기본형식-1
  
   논리값 && 논리값 ==> 두 개 모두 true인 경우에 true 반환
   논리값 ||논리값  ==> 두 개중 하나만 true여도 true 반환
   !논리값        => true값을 false,  false 값을 true 반환

 - 주의할점
   JS에서는 true/false 만 논리값으로 사용되지 않는다.
   일반값도 논리값으로 사용될 수  있다.
    false로 처리되는 값: 0, "", undefined, null, NaN
    true로 처리되는 값: false 제외한 나머지.

  - 기본형식-2  (*********************************** X 100 )
    나중에 react.js 조건부 랜더링에서 사용된다.

    일반값1 && 일반값2 (******매우중요) ==> 일반값1 이 true이면 일반값2 반환한다.
                                       일반값1 이 false이면 일반값1 반환한다.

    일반값1 || 일반값2 ==> 일반값1 이 true이면 일반값1 반환한다.
                        일반값1 이 false이면 일반값2 반환한다.


5. 증감연산자

 - 기본:
  ++n;
  n++;

  --n;
  n--;

  - 주의할점:
   
    다른 연산자와 같이 사용시 전치/후치에 따라서 결과값이 달라질 수 있다.

    예>
        let result = ++n;   // 먼저 1증가하고 나중에 result에 할당
let result = n++;   // 먼저 result 할당하고 나중에 증가


6. 3항 연산자

 - 문법:
   
    (조건식)?참:거짓;

 - 중첩 가능


###########################################################################
###########################################################################
5장. 문장
###########################################################################

1. 문장종류


  - 문장 

    - 실행문 
      :순차문
      :제어문 - 조건문( 단일if문, if~else문, 다중if문, switch 문(내부적으로 ===(identical)을 사용함 )

            - 반복문 ( for문, while문, do~while문, foreach문)
              ==> break문
          continue문

    - 비실행문: 주석문 ( //, /*  ~  */ )

   - let 변수는 블럭scope를 갖는다. ( 자바와 동일한 문법 )
     var 변수는 함수scope를 갖는다.


###########################################################################
###########################################################################
6장. 객체 (object) - **********************
###########################################################################

1. 종류 3가지
  ==> 자바처럼 상속과 비슷한 개념(프로토타입(prototype) 관계)으로 계층구조화 되어 있음.
      최상위 객체는 Object 이다.
  ==> 객체의 구성요소는 변수,메서드(정적메서드, 인스턴스 메서드),생성자를 가짐.
  1) 데이터(기본+참조) 관련 객체
      -문자관련 ==> String 객체가 관리
      -수치    ==> Number 객체가 관리
      -날짜    ==> Date 객체가 관리
      -배열    ==> Array 객체가 관리 (***************)
                 Set/Map 같은 컬렉션 제공됨(ES6)
      -JSON   ==> object 객체가 관리
  2> BOM ( Browser Object Model)
    - 웹 브라우저 관련 객체 
    - 종류
      Window 객체
      Screen 객체
      Histroy 객체
      Location 객체
      Navigator 객체
  3> DOM ( Document Object Model )
   - html 문서 관련 객체
   - Document 객체 ( 자동으로 생성됨. document 변수로 참조 )


2. 데이터 관련 객체

 1> 문자데이터 관련 객체

   - String 객체 관리
   - 생성방법 3가지

     가. 리터럴값만 이용 (권장)
        let s = "hello";

     나. new 생성자 이용       
        let s2 = new String("hello");

     다.  생성자 이용    
       let s3 = String("hello");
     
    - 문자열 표현방법 3가지
      가. 'hello' 이용
      나. "hello" 이용
      다. `hello` 이용( 백틱, template literal ) (*****************************)

        * 백틱장점 2가지
1> 변수삽입 가능: ${변수}이용
2> 들여쓰기, 엔터 같은 동작이 그대로 적용되어 출력포맷의 가독성이 높아진다.


    - 메서드 조회
     http://developer.mozilla.com