* 웹 어플리케이션 개발 ( 웹사이트 )
1. web application ( studentOAP )
- 화면 필요 ( 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}
장치?
- 도구 이용
- postman 툴 ( GUI )
Talend API Tester 툴 ( GUI ) - *
curl 툴 ( CMD )
Swagger ( 자바언어 ) - *
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 객체가 관리 (자바의 List 역할, ***************)
Set/Map 같은 컬렉션 제공됨(ES6)
-JSON ==> object 객체가 관리
2) BOM ( Browser Object Model)
- 웹 브라우저 관련 객체
- 종류
Window 객체 ( window 변수로 참조 )
Screen 객체 ( screen 변수로 참조 )
Histroy 객체 ( histroy 변수로 참조 )
Location 객체 ( location 변수로 참조 )
Navigator 객체 ( navigator 변수로 참조 )
- 웹브라우저를 open하면 자동으로 생성됨.
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
2) 수치 데이터 관련 객체
- 정수와 실수를 모두 관리한다.
- Number 객체가 관리한다.
- 생성방법 3가지
가. 리터럴값만 이용 (권장)
let n = 100;
나. new 생성자 이용
let n2 = new Number(100);
다. 생성자 이용
let n3 = Number(100);
- Number객체 메서드 정리
3) 날짜 데이터 관련 객체
- Date 객체가 관리.
- 생성방법 2가지
let d = new Date();
let d2 = Date();
4) 배열 데이터 관련 객체
- Array 객체가 관리
- 특징: 자바의 List 처럼 동작됨.
- 생성방법
var n = [10,20,30];
var n = [];
var n = new Array();
var n = new Array(10,20,30);
var n = Array();
var n = Array(10,20,30);
3. spread 연산자 ( 전개구문 )(************************)
기능: 배열|JSON 요소를 펼치는 기능으로서
기존 배열을 펼쳐서 새로운 배열을 만들 때 사용함.
문법: [...배열]
예>
// spread 연산자 (전개 구문)
var n = [10,20,30];
var x = n; // 얕은 복사(주소값 복사, x 변경하면 n도 영향 받음)
//1. 배열 복사
var n2 = [...n]; // 깊은 복사 ( 실제값 복사, n2 변경해도 n은 영향 없음 )
console.log(n2);
//2. 기존 배열에 새로운 값을 추가
var n = [10,20,30];
var n2 = [...n, 40, 50]
var n2 = [40, 50, ...n]
console.log(n2);
//3. 배열 연결
var n = [10,20,30];
var n2 = [100,200,300];
var n3 = [...n, ...n2];
console.log(n3);
// 4. 문자열 전개
var x = [...'hello'];
console.log(x); // ['h', 'e', 'l', 'l', 'o']
4. BOM ( Browser Object Model)
- 웹 브라우저 관련 객체
- 종류
Window 객체 : 전역객체( window 변수를 생략하고 사용이 가능하다.(***) )
웹브라우저 창 자체를 의미.
Screen 객체 : 창의 크기 정보 ( width/height )
History 객체 : 웹 페이지의 뒤로/앞으로 기능
Location 객체 : 웹 브라우저의 URL 정보
Navigator 객체 : 웹 브라우저 자체 정보
- 특징: 웹 브라우저를 open하면 자동으로 객체생성이 된다.
개발자는 명시적 생성없이 참조해서 사용할 수 있음.
어떤 변수명으로 되어 있을까?
Window 객체 참조: window 변수를 사용한다.
Screen 객체 참조: screen 변수를 사용한다.
History 객체 참조: history 변수를 사용한다.
Location 객체 참조: location 변수를 사용한다.
Navigator 객체 참조: navigator 변수를 사용한다.
5. Window 객체
- 전역객체
- window 변수로 참조 가능.
하지만 일반적으로 생략해서 사용.
- screen, location, history. navigator, document 은
Window 객체의 속성이다.
원래는 window.screen
window.location
window.history
window.navigator
window.document 사용하는것이 원칙이지만 일반적으로 window 는 생략하고 사용된다.
1) 새로운 창 열고 닫기
- window.opener : 자식창에서 부모창 참조할 때 사용.
- 부모에서 새로운 창(자식창)을 만드는 방법
var childWin = open("child.html"); // window.open("child.html", 옵션); 동일
현재 창 닫기
window.close();
부모창 닫기
opener.close();
자식창 닫기
childWin.close();
2) setTimeout(function(){}, 1/1000);
- 한번 만 실행됨.
3) setInterval(function(){}, 1/1000);
- 매번 실행
- 해제방법: clearInterval(fun);
4) alert("경고창")
confirm("진짜 삭제할거임?")
propmt("이름을 입력하세요");
5. JSON 객체 (*******************)
1)문법
{"key":value, key1:value1,...}
2) 특징
- value는 함수도 가능하다.
만약 함수인 경우에 일반 key 접근시 this 사용해야 된다.
- 속성 접근은 .(dot) 이용하거나 ["key값"] 형식의 연관배열 사용 가능 (************)
연관배열의 특징은 "key값" 을 변수로 사용할 수 있다. (*****)
- value값은 변수로 사용가능.
만약 key와 value가 동일하면 key만 지정가능.
예> { username:username } ==> {username}
- value가 함수인 경우에는 :function 생략가능해서 자바의 메서드처럼 사용가능.
예>
setUsername:function(n){this.username=n}
==> setUsername(n){this.username=n}
- 메서드 정의 앞에 set / get 키워드 지정 가능.
기존 메서드처럼 사용하면 안되고( person.setUsername("이순신"), person.getUsername() )
속성처럼 사용해야 된다. ( person.setUsername="이순신", person.getUsername )
예>
set setUsername(n){this.username=n}
get getUsername(){return this.username;}
- key값도 변수로 사용가능. [변수명]
예> var xxx = "username";
{[xxx]:"홍길동" }; ==> {"username":"홍길동"}
+ 이용해서 연결해서 사용가능
{[xxx+"01"]:"홍길동" }; ==> {"username01":"홍길동"}
- 중첩가능
- "{key:value}" --------> {key:value}
"[10,20]" --------> [10,20]
JSON.parse("{key:value}");
{key:value} ----> "{key:value}"
[10,20] ----> "[10,20]"
JSON.stringify({key:value})
"10" --------> 10
Number.parseInt("10");
10 ----------->"10"
String(10)
##################################
6. 함수 ( function *************************** X 200)
1) 개요
- 용도: 기능처리 담당 ( 자바의 메서드 역할 )
2) 종류1
- 일반함수: 일반적으로 사용되는 함수 의미.
- generator 함수 : Generator 객체를 반환하는 함수.
- 비동기 함수: Promise를 객체를 반환하는 함수 ( 동기 vs 비동기 )
3) 함수 작성 방법 2가지
가. 함수 선언식 ( 이름있는 함수 )
function 함수명([파라미터,..]){
문장;
[return 값;]
}
==> js 실행할 때 함수가 생성됨.
따라서 선언보다 먼저 호출이 가능하다.
나. 함수 표현식 ( 이름없는 함수, 익명함수 )
var 변수 = function ([파라미터,..]){
문장;
[return 값;]
};
변수가 함수명으로 사용됨.
==> var 변수=함수 코드를 만나면 함수가 생성됨.
반드시 선언후에 호출할 수 있다.
4) 함수특징
- 반드시 호출해야 된다.
(함수명을 이용)
- 호출후 반드시 호출한 곳으로 돌아온다.
- 호출할 때 인자값을 설정할 수 있고
돌아올때 리턴값이 존재할 수 있다.
- JS 함수는 함수호출시 인자값의 갯수가 달라도 된다. (******)
- 파라미터 갯수 > 인자값 갯수 경우에 인자값이 저장되고 남은
파라미터에는 undefined가 저장되는데 undefined 대신에 임의의 초기값을 설정할 수 있다.
==> 함수의 default 파라미터라고 부른다.
==> function fun(n=초기값,n2=초기값){}
- 파라미터 갯수 < 인자값 갯수 경우에 파라미터에 저장되고 남은
인자값은 소실된다. 이 경우에 소실되는 인자값을 배열로 가져올 수 있다.
==> 함수의 rest 파라미터라고 부른다.
주의할 점은 파라미터 가장 마지막에만 사용된다.
==> function fun(n,...n2){}
function fun(n,n2,...n3){}
fun(10,20,30);
- 함수호출시 spread 연산자 이용한 방식으로 인자값을 전달 할 수 있다.
예>
function fun(n,n2){}
var x = [10,20];
fun(x[0],x[1]); //기본
fun(...x); //spread
- 기본형 데이터와 참조형 데이터 인자값 사용
- 기능에 따라 4가지 형태
가. 파라미터없고 리턴값없는 형태
나. 파라미터있고 리턴값없는 형태
다. 파라미터없고 리턴값있는 형태
라. 파라미터있고 리턴값있는 형태
- JS함수는 일급객체(first-class) 이다. (************)
일급객체의 핵심개념은 함수를 데이터로 처리하는 것이다.
함수이용해서 할수 있는 작업은 다음과 같다.
가. 함수를 변수에 저장할 수 있다.
나. 함수호출시 인자값으로 함수를 사용할 수 있다. ===> 콜백함수를 구현 가능
예> arr.forEach(인자값);
personList.forEach(function(data,idx){});
다. 함수호출후 리턴값으로 함수를 사용할 수 있다. ==> 중첩함수를 구현 가능
예>
var x = function(){};
function fun(){
// return 값;
//return x;
return function(){};
}
- 콜백함수(callback *********************)
=> 개념: 사용자가 명시적으로 호출하지 않고
시스템이 특정상황에 호출하는 함수를 의미한다.
=> 주로 이벤트 처리시 사용된다.
=> 구현방법
명시적으로 호출할 때 시스템이 호출할 수 있는
함수명을 전달하는 방법으로 구현이 가능하다.
7. arrow 함수 ( 자바의 lambda와 비슷, -> thin arrow)
- JS에서는 => (fat arrow )이용
- 함수선언식 및 함수표현식 모두 arrow 함수로 변경 가능.
- 종류는 기능에 따른 4가지
가. 파라미터없고 리턴값없는 형태
나. 파라미터있고 리턴값없는 형태
다. 파라미터없고 리턴값있는 형태
라. 파라미터있고 리턴값있는 형태
// arrow 함수
// 가. 파라미터없고 리턴값없는 형태
var fun = function(){console.log("가. 일반 fun");};
fun();
var fun = ()=>{console.log("가. arrow fun");};
var fun = ()=>console.log("가. arrow fun");
fun();
//나. 파라미터있고 리턴값없는 형태
var fun = function(n){console.log("나. 일반 fun", n );};
fun(100);
var fun = (n)=>{console.log("나. arrow fun", n );};
var fun = n=>console.log("나. arrow fun", n );
fun(100);
// 다. 파라미터없고 리턴값있는 형태
var fun = function(){return 100};
var result = fun();
console.log("다. 일반 fun", result);
var fun = ()=>{return 100};
var fun = ()=> 100;
var result = fun();
console.log("다. arrow fun", result);
// 라. 파라미터있고 리턴값있는 형태
var fun = function(n, n2){return n+n2};
var result = fun(10, 20);
console.log("라. 일반 fun", result);
//arrow 변경하시오
var fun = (n, n2)=>{return n+n2};
var fun = (n, n2)=>n+n2;
var result = fun(10, 20);
console.log("라. arrow fun", result);
8. generator 함수
1) 문법
function* fun(){
console.log("1");
yield 값
console.log("2");
console.log("3");
}
2)특징
- 함수를 호출하면 Generator 객체로 반환됨.
호출시 함수코드 블럭이 실행이 안됨.
- 함수코드 블럭을 실행하기 위해서는 next() 호출해야 된다.
- 함수코드 블럭의 여러 실행문을 분할해서 실행할 수 있다.
yield 키워드 이용
- 함수실행 중단
가. 일반함수
function fun(){
console.log("1");
console.log("2");
if(true) return;
console.log("3");
}
fun();
나. generator함수
function* fun(){
console.log("1");
yield
console.log("2");
yield
console.log("3");
}
var gen = fun();
gen.next(); // 1
//중단
gen.return();
3) 용도
- 많은 데이터를 이용해서 처리를 해야되는 작업을
분할해서 작업이 가능하다.
9. 즉시실행함수(즉시호출함수)
==> 함수를 정의하면서 실행됨.
- 문법:
(function(){
console.log();
})();
- JS 라이브러리를 만드는 곳에서 주로 사용됨.
예> jQuery
###########################################################################
###########################################################################
7장. 이벤트
############################################################################
1. 이벤트 개요
1) 용어정리
가. 이벤트(event)
- 사용자 및 시스템(웹브라우저)이 특정상황에 발생시키는 사건(동작) 의미.
예> 사용자가 마우스를 이용해서 버튼을 클릭/더블클릭/드래그/마우스오버/.....
사용자가 키보드를 이용해서 input태그에 값을 입력...
시스템(웹브라우저)가 window(창)에 html을 랜더링하기 위해서
DOM 트리를 만드는데, DOM 트리가 모두 완성됨을 알 수 있는 정보를 얻을 수 있음.
나. 이벤트타입(event type): 이벤트 종류
마우스 이용: click, change, mouseover, mouseout, dbclick,....
키보드 이용: keyup, keydown, keypress
포커스 관련: focus, blur(포커스해제)
submit버튼: submit
시스템 관련: load
다. 이벤트 핸들러 ( event handler )
- 이벤트가 발생했을 때 실제로 처리하는 코드를 가진 함수 의미.
- 예>
function fun(){}
var fun = function(){};
라. 이벤트 소스 ( event source )
- 이벤트가 발생된 태그(버튼)
2) 이벤트 처리 방법 ( 이벤트소스와 이벤트 핸들러 연결작업 )
가. DOM Level 0
- 인라인 방식
=> html 시작 태그에서 이벤트처리.
=> 시작태그에서 on이벤트타입으로 된 속성이용
예> <button onclick="함수()"></button> ==> HTMLButtonElement 객체관리(속성,메서드)
<a href="daum"></a> ==> HTMLAnchorElement 객체관리
=> 특징은 html과 JS 분리가 안된 방식으로 권장 안함.
- 고전 방식
=> 특징은 html과 JS 분리해서 이벤트처리가 됨
=> JS에서 이벤트소스를 얻고 on이벤트타입를 지정해서 처리.
문법:
JS: 이벤트소스.onclick=function(){};
이벤트소스.href="naver";
html: <button id="x">Ok</button>
<button id="y">OK2</button>
=> 이벤트소스 얻는 방법 (button)
document.메서드() 이용
예> 요소(태그) 하나 반환하는 경우
- var result = document.getElementById("x");
..
- var result = document.querySelector("css의 선택자문법");
css의 선택자문법: #id, .class, 태그명, [속성명], 부모 > 자식,
요소 여러개 반환하는 경우 ( 배열로 반환 )
- var result = document.querySelectorAll("css의 선택자문법");
css의 선택자문법: #id, .class, 태그명, [속성명], 부모 > 자식,
나. DOM Level 2
=> 특징은 html과 JS 분리해서 이벤트처리가 됨.
=> JS에서 이벤트소스를 얻고 addEventListener() 메서드로 이벤트 처리함.
문법:
JS: 이벤트소스.onclick=function(){}; // DOM Level 0
JS: 이벤트소스.addEventListener("이벤트타입",이벤트핸들러, useCapture); // DOM Level 2
==>document.querySelector("#x").addEventListener("click",function(){}); //콜백함수
var fun = function(){};
document.querySelector("#x").addEventListener("click", fun); //콜백함수
html: <button id="x">Ok</button>
==> useCapture 개요
- 기본값은 false
- 이벤트 전파와 관련된 동작방식을 변경하는 용도.
a. 자식--->부모
-버블링(bubbling)이라고 부름
b. 부모--->자식
- 캡처링(capturing)이라고 부름
- useCapture 값을 true로 지정하면 부모-->자식으로 전파(캡처링(capturing))으로 동작.
false로 지정하면 자식-->부모으로 전파(버블링(bubbling))으로 동작.
==> 이벤트 전파 방지 가능 (*****)
- 이벤트객체의 stopPropagation() 이용.
예> event.stopPropagation();
3) 이벤트 객체 (*************)
- 이벤트 소스(button)에서 발생되는 이벤트 정보를 관리하는 객체.
- 이벤트 객체를 사용해서 다양한 작업을 할 수 있다. ( 변수, 메서드)
- 이벤트 객체를 얻는 방법은
이벤트 핸들러(함수)에서서 event 변수명으로 얻어온다.
예>
function fun(){
console.log(event);
}
- 속성과 메서드가 제공됨.
속성: event.target
메서드:
이벤트전파방지: event.stopPropagation();
기본동작방지: event.preventDefault();
예> <form>태그의 submit 기능
###########################################################################
###########################################################################
8장. DOM
############################################################################
1. 개요
- Document Object Model
=> Document(html문서)
Object(JS객체)
=> 사용자가 만든 html(태그및속성)문서를
웹브라우저가 랜더링하기 위해서
html내의 요소(태그및속성)에 해당되는 객체(HTMLButtonElement,HTMLAnchorElement)를
생성해서 메모리에 올리고(DOM Tree)
메모리에 올라간 객체를 참조해서 관리하는 방법론.
우리는 메모리에 올라간 JS객체(DOM)의 속성과 메서드를 이용해서
동적인 화면처리가 가능하다.
- DOM 접근방법 ( html 문서를 참조하는 Document 객체를 이용, 실제 참조는 docuement 변수를 이용 )
# 하나의 요소(객체)를 반환
document.getElementById("아이디값");
document.querySelector("css 선택자");
# 여러개의 요소(객체)를 반환 ( 배열 )
document.querySelectorAll("css 선택자");
2. DOM의 값 종류
1) 시작태그와 종료태그의 content(body)
예>
<p>홍길동</p>
<p><span>홍길동</span></p>
<div>홍길동</div>
<div><span>홍길동</span></div>
- content 접근은 innerText / innerHTML 사용한다.
2) <input> 태그같은 폼의 태그의 값
- value 속성 사용한다.
3. 폼과 관련 내용 정리
1) 기본내용
<form action="target.html" method="get|post" id="myForm">
아이디:<input />
<input type="submit" value="로그인" >
<button>로그인</button>
<input type="button" value="로그인" > <== submit 안됨, JS이용하면 가능함.
</form>
2) 동적으로 form의 속성값을 변경할 수 있다.
var f = document.querySelector("myForm"); // HTMLFormELEMENT 객체
f.action="구글";
f.method="get|post"
f.submit();
3) submit은 기본으로 동작됨. 기본동작을 방지할 수 있다.
event.preventDefault();
4. 객체분해할당 ( destructuring , ********************* X 201)
가. 배열 객체 분해 할당
const [변수,변수2]= [값,값2];
나. JSON 객체 분해 할당 (******************)
const {key변수, key2변수}= {key:값, key2:값};
* 함수호출시 객체전달(배열|JSON)하면
함수쪽에서 객체분해할당 문법으로 데이터를 얻을 수 있다. (*********)
###########################################################################
###########################################################################
9장. 클래스
############################################################################
1. 문법
-JS에서는 접근지정자가 없다. ( public,private..)
-JS에서는 class가 키워드가 됨.
HTML에서는 <p class="x"> 태그 속성이 있음.
React.js에서는 충돌됨. 따라서 class대신에 className을 사용한다. 예> <p className="x">
class 클래스명{
변수( 메서드 및 생성자내에서만 선언이 가능. this.변수 문법을 따름 )
메서드
생성자
}
- 클래스를 작성후에는 반드시 객체생성해야 된다.
var 변수 = new 클래스명();
- 메서드명을 변수로 설정 가능
예> let xxx = "setName";
class Person{
[xxx](name){}
}
- 메서드명 앞에 set/get 키워드를 지정하면 메서드가 아닌 변수처럼 동작됨.
예> get getName(){
return this.name;
}
p.getName; // 변수처럼 사용.
- 생성자( constructor )
자바: 클래스명으로 생성자를 작성
오버로딩이 지정 가능
JS: constructor 명으로 생성자를 작성
단 한번만 지정 가능
- 상속 (inheritance )
extends 키워드 이용
부모요소를 자식이 상속받음.(생성자 상속안됨)
부모에서 선언된 변수는 반드시 부모에서 초기화해야 된다. super() 이용
예> class Cat extends Pet{
constructor(name,age,gender){
super(name, age); // 부모에서 초기화 필수
this.name=name; // 에러발생
this.gender=gender;
}
메서드 재정의 가능.(overriding)
static 메서드 지원( 클래스명.메서드 사용, 객체생성과 무관)
generator 함수사용 가능.
###########################################################################
###########################################################################
10장. 모듈
############################################################################
1. 개념
- .js 파일 하나하나를 모듈이라고 부른다.
- 여러 js간에 접근해서 사용하려는 방법이고
만약에 main.js 에서 header.js를 접근하고자 한다면
main.js 에서는 import 사용하고
header.js 에서는 export 해야 된다.
하나의 js에서는 export 를 여러번 할 수 있다.
export default 는 한번만 사용할 수 있다.
export 된 요소를 import 하는 문법은 다음과 같다.
import {요소, 요소2} from '경로';
export default 된 요소를 import 하는 문법은 다음과 같다.
import 요소 from '경로';
export 와 export default 가 혼합된 요소를 import 하는 문법은 다음과 같다.
import 요소, {요소, 요소2} from '경로';
//변형된 import 로서 별칭지정 가능
// export 별칭지정
import {yyy as Y} from './body.js';
// export default 별칭지정
import {default as X} from './body.js';
###########################################################################
###########################################################################
11장. 비동기
############################################################################
1. 동기 vs 비동기
가. 동기
function fun(){
"1출력"
fun2(); function fun2(){ "2출력"} //1시간 작업
"3출력"
}
fun();
실행결과:
1출력
2출력
3출력 ( 1시간 이후에 출력됨 )
나. 비동기
function fun(){
"1출력"
fun2(); //비동기 function fun2(){ "2출력"} //1시간 작업
"3출력"
}
fun();
실행결과:
1출력
3출력
( 1시간 이후에 출력됨 )
2출력
2. 비동기 만드는 방법
가. Promise 객체 이용
- 문법: 함수를 작성할 때 Promise객체를 반환한다.
예>
#일반함수
function fun(){
}
#비동기 함수
function fun(){
//성공시 호출함수: resolve
//실패시 호출함수: reject
return new Promise(function(resolve, reject){});
}
- 실제 구현
resolve 호출에 대한처리: .then(function(){})
reject 호출에 대한처리: .catch(function(){})
- then().then() 체인 가능
나. async/await 키워드 이용 (*************)
-내부적으로 Promise 사용됨.
-문법:
# 일반함수
function fun(){
}
# 비동기함수
async function fun(){
"1출력"
///////////////
xxx = await fun2(); // await 함수가 실행이 끝날때까지 fun() 실행을 중지시킴.
///////////////
"2출력"
}
var result = fun(); // result 값이 Promise 객체이다.
###########################################################################
###########################################################################
12장. Ajax
############################################################################
1. AJAX ( Asynchronous Javascript And Xml ) - 에이잭스, 아작스
- 비동기 + 자바스크립트 + xml(데이터포맷의미, 현재는 JSON)
==> 클라이언트에서 JS 이용해서 서버와 비동기로 데이터 통신(JSON)을 하는 방식.
2. 서버와 통신하는 2가지 방법
1) 비 Ajax
요청: a태그, 새로고침,
명시적인url입력후엔터,
form의submit
웹브라우저 --------------------> 서버
<-------------------
응답: html
-응답을 html로 받으면 웹 브라우저의 전체 화면이 리로딩 됨.
- 1M가 되는 전체 html을 서버에서 받아야 된다. ( 네트워크 부하가 심하다)
- 전체 html을 받기 때문에 깜박이 있음. 사용자 UI/UX 매우 불편하다.
2) Ajax
요청: JS이용 ( XMLHttpRequest 객체)
웹브라우저 --------------------> 서버 ( reqres.in )
<-------------------
응답: JSON
예> {mesg:"logout">
- 응답을 JSON로 받으면 웹 브라우저의 전체 화면이 리로딩 안됨.( 깜박거림이 없음)
- 크기가 매우 작은 JSON 데이터를 받는다. ( 네트워크 부하가 거의 없다.)
- 전체 html을 받지 않기 때문에 깜박임이 없음. 사용자 UI/UX 매우 편함.
- React 같은 Front-end 프레임워크는 내부적으로 Ajax 로 서버와 연동함.
3) Ajax 구현
가. 명시적인 XMLHttpRequest 이용 ( OLD 방법, 사용안함 )
- https://reqres.in/api/users/2
나. async + await + fetch() 이용 (***************)
- https://reqres.in/api/users/2
#####################################
React.js에서 매우 많이 사용되는 코드 패턴
1. arrow 함수
2. 객체분해할당(특히 JSON )
3. async, await 이용한 비동기처리
==> 서버와 연동시 필수
4. fetch() 함수
==> 서버에 요청하는 함수
==> 일반적으로 async, await와 같이 사용.
5. 백티 사용
6. 모듈
- import 및 export
7. Array객체 메서드
- map함수
- filter함수
- foreach함수
'[study]이론정리 > HTML & CSS & JavaScript' 카테고리의 다른 글
jQuery 2일차 - Traversing(필터링), Attributes, Manipulation, Util (0) | 2024.05.20 |
---|---|
jQuery 1일차 - 설치, ready, DOM(this), selectors, 2차필터링 (0) | 2024.05.16 |
js 6일차 - 비동기, Ajax (0) | 2024.05.16 |
js 6일차 - 클래스, 모듈 (0) | 2024.05.16 |
js 5일차 - DOM(DOM, 객체분해할당) (0) | 2024.05.09 |