본문 바로가기
Front-End/JavaScript

JavaScript(1)

by newny 2023. 2. 8.
반응형

1. 자바스크립트 시작

✅클라이언트와 서버

서버(server) : 서비스를 제공하는 컴퓨터(service provider)

  • 고사양의 하드웨어를 갖춘 컴퓨터
  • 하드웨어의 사양으로 서버와 클라이언트를 구분하는 것은 아님
  • 사양의 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라고 함

클라이언트(client) : 서비스를 사용하는 컴퓨터(service user)

  • 서버와 이어진 모든 기기(컴퓨터의 경우 WIFI / 모바일은 모바일 네트워크)와 단말기에서 이용하는 웹에 접근하는 SW이며, 주로 서버에 요청을 보내고 응답을 받는 역할을 함

서비스(Service)

  • 위에서 본 것처럼 서버는 클라이언트로부터 요청을 받아 응답을 내려주고 클라이언트는 서버에 데이터를 요청하고 응답을 받음. 재화와 서비스의 개념에서 가져와 서비스라고 일컬음
  • 서비스의 종류에 따라 파일 서버/메일 서버/어플리케이션 서버 등으로 나눠짐

✅웹 서버 / 웹 애플리케이션 서버(was)

Static pages

  • image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들을 의미한다.
  • 웹 서버에서 요청에 알맞은 파일을 반환하며, 항상 동일한 페이지를 반환한다. (말 그대로 정적인 콘텐츠)
  • 웹 서버에서 제공한다.

Dynamic pages

  • 들어온 요청에 맞게 동적으로 만들어진 콘텐츠를 의미한다.
  • 데이터베이스, 서버 내 로직 등을 활용해 만들어진 콘텐츠를 반환한다.
  • 웹 어플리케이션 서버에서 제공한다.

Web Server 웹 서버

HTTP(HyperText Transfer Protocol)
하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종으로, 서버와 클라이언트 사이에서 어떻게 메세지를 교환할지를 정해놓은 규칙

HTTP 요청을 받아 Static contents를 제공하는 서버, 프로그램

  • 정적인 컨텐츠 제공
    • HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당 (사용하는 서버: Apache Server, Nignx, ...)
  • 정적인 컨텐츠 제공은 WAS를 거치지 않고, 바로 제공할 수 있음
  • 동적 컨텐츠 제공을 위해 WAS에 요청을 보내고, WAS가 처리한 결과를 클라이언트에게 전달

WAS (Web Application Server) 웹 어플리케이션 서버

다양한 서버 내 알고리즘, 비즈니스 로직, DB 조회 등 클라이언트 요청에 따라 동적인 콘텐츠를 제공하는 서버, 프로그램

  • HTTP 프로토콜을 기반으로 하여 클라이언트의 요청에 따라 구현된 비즈니스 로직을 통해 동적으로 만들어진 콘텐츠를 반환 (사용하는 서버: Tomcat, JBoss, Jeus,...)
  • 데이터베이스 접속 기능, 여러 개의 트랜잭션 관리 등 수행

✅자바스크립트

  • 자바스크립트는 웹 브라우저에 포함된 자바스크립트 인터프리터가 소스코드를 직접 해석하여 바로 실행해 줌
  • 객체 기반의 스크립트 언어
  • HTML 위에서 동작하는 동적언어
  • 타입을 명시할 필요가 없는(소스코드 바로실행) 인터프리터 언어
  • 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있음
  • 유니코드 문자셋을 사용함
  • HTML 코드 <script> 태그로 자바 스크립트 언어를 사용함을 알려줘야 함
<script>
	document.write('hello JavaScript');
</script>

Script 언어

이미 존재하는 소프트웨어(어플리케이션)를 제어하기 위한 용도로 쓰이는 언어

함수형 프로그래밍 언어

  • 변경가능한 상태를 최대한 제거하려고 노력한 프로그래밍 언어
  • 때문에 모든 것을 예측하고 통제하기 쉬움

DOM이란?

  • 파싱 된 HTML 언어는 트리구조를 갖는 객체로 표현되는데, 이를 DOM(Document Object Model)이라고 함
  • DOM은 문서에 접근할 수 있는 API로, node와 property, method를 갖는 객체로 이루어져 스크립트나 CSS와 같은 언어들이 DOM 구조에 접근하여 커스텀할 수 있게 만들어주는 연결 부분 역할을 가짐
  • 때문에 DOM을 이용하여 텍스트값을 변경할 수 있고 스타일링 및 노드 구조까지도 바꿀 수 있음

자바vs자바스크립트

자바 자바스크립트
컴파일 언어 인터프리터 언어
타입 검사를 엄격하게 함 타입을 명시하지 않음
클래스 기반의 객체지향 언어 프로토타입 기반의 객체 지향 언어

자바스크립트 문법

  • 대소문자를 구분함
  • 실행문은 세미콜론(;)으로 구분

프로퍼티

  • ‘속성’이란 의미를 가지고 있음
  • 객체의 일부로 이름과 값 사이의 연결을 의미
  • 객체를 구성하는 블록들
  • 이름(string이나 symbol)과 값(원시함수(primitive), 메서드(method) 또는 객체 참조(object reference))을 가지고 있음

이스케이프 문자 (\)

\’, \” : ‘ , “
\t : 공백
\n : n
\\ : \

 

2. 타입

✅기본 타입

원시 타입

  • 원시타입은 불변성을 갖고 있음
  • stack에 쌓이는 형태로 저장됨
  • 변수값을 재할당 한다고 해서 메모리에서 할당 전 값이 사라지는 것이 아님(메모리에 남아있음)


number : 실수 (정수, 실수 구분 없음)

let thirdNum = 10e6;   // 10000000
let fourthNum = 10e-6; // 0.00001


string : “”, ‘’ (문자열에 따옴표를 포함시키려면 서로 다른 따옴표를 사용해야 함)

let fourthStr = '나의 이름은 "홍길동"이야.'


boolean : 예약어 true, false를 가지고 있음

symbol : 유일하고 변경할 수 없는 타입으로, 객체의 프로퍼티를 위한 식별자로 사용할 수 있음 (거의 볼일 없음)

undefined : null과는 달리 '타입'이 정해지지 않은 것을 의미, 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환

let num;          // 초기화하지 않았으므로 undefined 값을 반환함.
let str = null;   // object 타입의 null 값
typeof secondNum; // 정의되지 않은 변수에 접근하면 undefined 값을 반환함.

참조타입

  • hip에 순서 없이 저장됨
  • stack에 저장될 수 없는 큰 크기의 값이 저장됨
  • 값의 크기를 변경할 수 있음
  • 값 자체의 크기가 크기 때문에 자체를 불러올 수 없어서 힙 영역에 저장된 값의 주소를 참조하여 불러옴
  • 원시 타입을 제외한 나머지는 참조타입 (배열과 객체, 그리고 함수가 대표적)

✅변수 타입 키워드

var

  • variable의 약어
  • ES6(ECMAScript6) 이전에 나온 변수 선언 방식
  • var는 scope(범위)가 function 단위로 이루어짐
  • 변수 중복선언을 허용
  • 중복선언 허용으로 인해 프로그램 흐름상 가독성을 떨어뜨리고, 오류를 발생시킬 수 있고, 의도치은 중복이 발생할 수 있음
var str="hello";
if(true){
	var str2="world";
}
console.log(str2);		//world
var str="hello";
var str="world";
console.log(str);	//world

let

  • ES6(ECMAScript6)에서 추가된 변수 선언 방식
  • let은 {}(block) 단위의 scope를 가짐
  • 중복 선언할 수 없음
let str='hello';
{
  let str='world';
  console.log(str); //world
}
console.log(str); //hello

const

constant의 약어
const는 상수를 선언할 때 사용
stack 영역에 const선언된 변수의 값은 바꿀 수 없음 (hip영역의 const로 선언된 값은 바꿀 수 있음)

const str="hello";
str="world";	//error

✅자바스크립트 출력 방법

window.alert() 메소드

가장 간단하게 출력하는 방법

<script>
    function alertDialogBox() {
        alert("확인을 누를 때까지 다른 작업을 할 수 없어요!");
    }
</script>

HTML DOM 요소를 이용한 innerHTML 프로퍼티

  • 가장 많이 사용하는 방법
  • document 객체의 getElementByID()나 getElementsByTagName() 등의 메소드를 사용하여 HTML 요소를 선택
  • innerHTML 프로퍼티를 이용하면 선택된 HTML 요소의 내용(content)이나 속성(attribute) 값 등을 손쉽게 변경
<script>
    var str = document.getElementById("text");
    str.innerHTML = "이 문장으로 바뀌었습니다!";
</script>

document.write() 메소드

  • 테스트나 디버깅을 위해 사용
  • 웹 페이지의 모든 내용이 로딩된 후에 document.write() 메소드가 실행되면, 웹 페이지 내에 먼저 로딩된 모든 데이터를 지우고 자신의 데이터를 출력
  • → 이러한 특성 때문에 테스트 이외의 용도로 사용할 때에는 충분히 주의해서 사용해야 함
<script>
    document.write(4 * 5);
</script>

console.log() 메소드

콘솔 화면을 통한 출력은 좀 더 자세한 사항까지 출력되므로, 디버깅하는데 많은 도움을 줌

<p>F12를 눌러서 콘솔 화면을 열면 결과를 확인할 수 있다.</p>
<script>
    console.log(4 * 5);
</script>

 

3. 연산자

자바스크립트 연산자의 우선순위표

참조사이트
http://www.tcpschool.com/javascript/js_operator_arithmetic

✅산술연산자 (+, -, *, /, %)

두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽

<script>
        document.write(5+3);
        document.write(5-3);
        document.write(5*3);
        document.write(5/3);    //몫        1.666666
        document.write(5%3);    //나머지    2
        document.write("<hr>");

        document.write(3/5);    //0.6
        document.write(3%5);    //3
        document.write("<hr>");
<script>

연산자의 우선순위(operator precedence)와 결합 방향(associativity)

✅대입 연산자 (=, +=, -=, *=, /=, %=)

변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽

let x = 10, y = 10, z = 10;
x = x - 5;
y -= 5; // y = y - 5 와 같은 표현임.
z =- 5; // z = -5 와 같은 표현임.

✅증감 연산자(++x, x++, - -x, x- -)

피연산자를 1씩 증가 혹은 감소시킬 때 사용하는 연산자

let x = 10, y = 10;
document.write((++x - 3) + "<br>"); // x의 값을 우선 1 증가시킨 후에 3을 뺌.
document.write(x + "<br>");         // 11
document.write((y++ - 3) + "<br>"); // 먼저 y에서 3을 뺀 후에 y의 값을 1 증가시킴.
document.write(y);                  // 11
let c=10;
let d=20;
let i=c++; //let i=c, 먼저 i=c 넣은다음에 c+1시킴
           //c=c+1  
let j=--d; //d=d-1, 먼저 d-1 한 다음 j=d 넣음
           //let j=d
document.write(i+c+j+d); //(10+11+19+19)

증감 연산자의 연산 순서

let x = 10;            
let y = x-- + 5 + --x;
// x = 8, y = 23


① : 첫 번째 감소 연산자(decrement operator)는 피연산자의 뒤쪽에 위치하므로, 덧셈 연산이 먼저 수행됩니다.
② : 덧셈 연산이 수행된 후에 감소 연산이 수행됩니다. (x의 값 : 9)
③ : 두 번째 감소 연산자는 피연산자의 앞쪽에 위치하므로, 덧셈 연산보다 먼저 수행됩니다. (x의 값 : 8)
④ : 감소 연산이 수행된 후에 덧셈 연산이 수행됩니다.
⑤ : 마지막으로 변수 y에 결괏값의 대입 연산이 수행됩니다. (y의 값 : 23)

비교 연산자 (==,===,!=,!==, >, >=, <, <=)

비교 연산자

  • 피연산자 사이의 상대적인 크기를 판단하여, 참(true)과 거짓(false)을 반환
  • 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽

비교 연산자 설명

비교연산자 설명
== 왼쪽 피연산자와 오른쪽 피연산자의 값이 같으면 참을 반환함.
=== 왼쪽 피연산자와 오른쪽 피연산자의 값이 같고, 같은 타입이면 참을 반환함.
!= 왼쪽 피연산자와 오른쪽 피연산자의 값이 같지 않으면 참을 반환함.
!== 왼쪽 피연산자와 오른쪽 피연산자의 값이 같지 않거나, 타입이 다르면 참을 반환함.

피연산자 타입에 따른 비교연산자의 비교기준

  • 피연산자가 둘 다 숫자면, 해당 숫자를 서로 비교함
  • 피연산자가 둘 다 문자열이면, 문자열의 첫 번째 문자부터 알파벳 순서대로 비교함
let x = 3, y = 5;
let a = "abc", b = "bcd";
document.write((x > y) + "<br>");  // y의 값이 x의 값보다 크므로 false
document.write((a <= b) + "<br>"); // 알파벳 순서상 'a'가 'b'보다 먼저 나오므로 'a'가 'b'보다 작음.
document.write(x < a);             // x의 값은 숫자이고 a의 값은 문자열이므로 비교할 수 없으므로 false

동등 연산자와 일치 연산자

  • 동등 연산자(==) : 두 피연산자의 값이 서로 같으면 참(true)을 반환
  • 일치 연산자(===) : 타입의 변환 없이 두 피연산자의 값이 같고, 타입도 같아야만 참(true)을 반환

✅논리 연산자 (&&, ||, !)

  • 주어진 논리식을 판단하여, 참(true)과 거짓(false)을 반환
  • && 연산자와 || 연산자는 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽
  • ! 연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽

✅기타 연산자

삼항 연산자

  • 피연산자 세 개를 가지는 조건 연산자
  • 물음표(?) 앞의 표현식에 따라 결괏값이 참이면 반환값 1을 반환하고, 결괏값이 거짓이면 반환값 2를 반환
  • 짧은 if / else 문 대신 사용할 수 있으며, 코드를 간결하게 만들어 줌

💡 [문법] 표현식 ? 반환값1 : 반환값2;

let su=-5;
let result = (su<0) ? su*-1 : su;

document.write(su+"절대값: "+result);
document.write("<hr>");
반응형

'Front-End > JavaScript' 카테고리의 다른 글

자바스크립트 예제 (2)  (0) 2023.02.09
JavaScript(2)  (0) 2023.02.09
자바스크립트 예제 (1)  (0) 2023.02.08

댓글