💠프로그래밍 언어/JavaScript

[마스터 개념] 2 | 객체, 클래스, 빌트인 객체

2022. 10. 26. 19:19
728x90

[마스터 개념] 2 | 객체, 클래스, 빌트인 객체

1 variable 변수

2 operator 연산자

3 function 함수

4> object 객체

5> class 클래스

7> built-in 빌트인 객체

8 array 배열

9 iterator 이터러블

10 map

11 more-operators 유용한 연산자들

12 module 모듈

13 promise 프로미스

14 scope 스코프

15 prototype 프로토타입

16 closure 클로져

17 this 

4 object 객체

key : 문자, 숫자, 문자열, 심볼

value : 원시값, 객체, 함수

 

속성, 데이터에 접근

 

// 마침표 표기법 dot notation
console.log(apple.name);
// 대괄호 표기법 bracket notation ('-'가 있을 때 사용)
console.log(apple["hello-bye"]);

 

const obj = {
  name: "말랑",
  age: 20,
};

// 코딩하는 시점에, 정적으로 접근
obj.name;
obj.age;

// 동적으로 속성에 접근
function getValue(obj, key) {
  return obj[key];
}
getValue(obj, 'name');

 

 동적으로 속성에 접근하고 싶을 때 대괄호 표기법을 사용한다.

 

객체 축약 버전

 

function obj(name, age) {
  return { name, age } ;	// { name: name, age: age };
}

5 class 클래스

static

 

 클래스 레벨의 메서드에서는 this 를 참조할 수 없으며, 만들어진 인스턴스를 직접적으로 사용할 때는 인스턴스 레벨의 메서드로 사용한다.

 

field 접근제어자

 

class Fruit {
  #name;	// 생략가능
  #color;	// 생략가능
  #type = "과일";
  constructor(name, color) {
    this.#name = name;
    this.#color = color;
  }
  display = () => {
    console.log(`${this.name} : ${this.color}`);
  };
}

 

public : 기본값

private : #, 외부에서 접근이 불가능함

 

Accessor Property 접근자 프로퍼티

 

class Student {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  get fullName() {
    return `${this.lastName} ${this.firstName}`;
  }
  set fullName(value) {
    console.log("set " + value);
  }
}

 

 함수처럼 행동이나 행위를 하지 않고, 단순히 조합하거나 제어하고 싶을 때 사용하며 속성값처럼 접근한다.

 

get : 속성값처럼 점( . )을 사용하여 호출한다. ex) student.fullName;

set : 할당( = )을 하여 호출한다. ex) student.fullName = "말랑";

 

7 built-in 빌트인 객체

Wrapper Object

 

const number = 123;
console.log(number.toString());

 

 number 변수는 number 원시타입이지만, 점( . )을 찍으면 number 원시타입을 감싸는 Number 객체로 감싸져 Number 객체에 있는 함수들을 사용할 수 있게 된다.

 

따라서 원시값을 필요에 따라 관련된 빌트인 객체로 변환한다.

 

global 전역

 

globalThis, this, Infinity, NaN, undefined : 전역으로 사용

 

eval("const num = 2; console.log(num)");	// 2

 

eval( ) : 문자열을 값으로 평가하여 출력

 

console.log(isFinite(1));			// true
console.log(isFinite(Infinity));	// false

 

isFinite( ) : 유한한지 아닌지 boolean 값 가짐

 

console.log(parseFloat("12.34"));		// 12.34
console.log(parseInt("12.34"));			// 12
console.log(parseInt("11"));			// 11

 

parseFloat( ) : 문자열 안에 소수점 포함된 숫자만 있다면, 이를 숫자로 바꿈

parseInt( ) : 문자열 안에 소수점 포함된 숫자만 있다면, 이를 정수로 바꿈

 

const URL = "https://코딩.com";
const encoded = encodeURI(URL);
console.log(encoded);	// https://%EC%BD%94%EB%94%A9.com

const decoded = decodeURI(encoded);
console.log(decoded);	// https://코딩.com

const part = "코딩.com";
console.log(encodeURIComponent(part));	// %EC%BD%94%EB%94%A9.com

 

 우선 URL은 아스키 문자로만 구성되어야 해서, 한글이나 특수문자가 포함되면 이스케이프 처리를 해야 한다.

 

encodeURI( ) : 한글이나 특수문자를 정해진 다른 문자로 변환

decodeURI( ) : 다른 문자로 변환한 것을 원래대로 변환

encodeURIComponent( ) : 전체 URI 이 아닌 부분적인 것을 변환

 

number 숫자

 

MAX_VALUE : 1.7976931348623157e+308 (e+308 : 10의 308 제곱을 곱한 것)

MIN_VALUE : 5e-324

MAX_SAFE_INTEGER : 안전하게 사용할 수 있는 최대 정수 9007199254740991

MIN_SAFE_INTEGER : 안전하게 사용할 수 있는 최소 정수 -9007199254740991

NaN : NaN

NEGATIVE_INFINITY : -Infinity

POSITIVE_INFINITY : Infinity

 

const num1 = 102;
console.log(num3.toExponential());	// 1.02e+2

 

toExponential( ) : 매우 크거나 작은 숫자를 표기할 때 사용, 10의 n 제곱으로 표기

 

const num2 = 1234.12;
console.log(num2.toFixed());			// 1234
console.log(num2.toString());			// 1234.12
console.log(num2.toLocaleString("ar-EG"));	// ١٬٢٣٤٫١٢
console.log(num2.toPrecision(5));		// 1234.1
console.log(num2.toPrecision(2));		// 1.2e+3

 

toFixed( ) : 반올림하여 문자열로 변환

toString( ) : 문자열로 변환

toLocaleString( ) : 해당 나라의 문자로 변환

toPrecision( ) : 원하는 자릿수까지 유효하도록 반올림 (전체 자릿수 표기가 안될 때는 지수 표기법)

 

const num = 0.1 + 0.2 - 0.2; // 0.10000000000000003
console.log(num);

 

 이때 0.00000000000000003 은 10진수를 2진수로 변환하여 나타날 때 생기는 사소한 차이인데, 0보다는 크고 1보다는 작은 가장 작은 숫자인 엡실론이다.

 

function isEqual(original, expected) {
  return Math.abs(original - expected) < Number.EPSILON;
}

 

 이때 기존값에서 해당값을 뺀 차이가 엡실론보다 작은 경우에 같은 값이라 할 수 있다.

 

Math 수학

 

E : 오일러 상수, 자연로그 밑

PI : 원주율 PI 값

 

// 절대값
console.log(Math.abs(-10));				// 10

//소수점 이하 올림
console.log(Math.ceil(1.4));				// 2

// 소수점 이하 내림
console.log(Math.floor(1.4));				// 1

// 소수점 이하 반올림
console.log(Math.round(1.4));				// 1
console.log(Math.round(1.7));				// 2

// 정수만 반환
console.log(Math.trunc(1.2345));			// 1

// 최대, 최소값 찾기
console.log(Math.max(1, 2, 3));				// 3
console.log(Math.min(1, 2, 3));				// 1

// 거듭제곱
console.log(3 ** 2);					// 9
console.log(Math.pow(3, 2));				// 9

// 제곱근
console.log(Math.sqrt(9));				// 3

// 랜덤한 값을 반환
console.log(Math.random());				// 0.9159291659528985

// 1 ~ 10 랜덤
console.log(Math.floor(Math.random() * 10 + 1));	// 9

 

String 문자열

 

const text = "Hello world";

// 배열로 해당 인덱스 접근
console.log(text[0]);				// H
console.log(text[1]);				// e
console.log(text[2]);				// l

// 함수로 해당 인덱스 접근
console.log(text.charAt(0));			// H
console.log(text.charAt(1));			// e
console.log(text.charAt(2));			// l

// 해당 문자열의 인덱스 (앞에서부터 찾음)
console.log(text.indexOf("l"));			// 2
console.log(text.lastIndexOf("l"));		// 9

// 해당 문자열이 존재하는지 boolean 값
console.log(text.includes("tx"));		// false
console.log(text.includes("h"));		// false
console.log(text.includes("H"));		// true

// 해당 문자열로 시작 or 종료하는지 boolean 값
console.log(text.startsWith("He"));		// true
console.log(text.endsWith("!"));		// false

// 대문자로 or 소문자로
console.log(text.toUpperCase());		// HELLO WORLD
console.log(text.toLowerCase());		// hello world

// 문자열을 해당위치까지 삭제
console.log(text.substring(0, 2));		// He
console.log(text.slice(2));			// llo world
console.log(text.slice(-2));			// ld

// 문자열에서 공백 제거
const space = "                 space    ";
console.log(space.trim());			// space

// 문자열을 잘라서 배열로 반환
const longText = "Get to the, point";
console.log(longText.split(" "));		// [ 'Get', 'to', 'the,', 'point' ]
console.log(longText.split(" ", 2));		// [ 'Get', 'to' ]
console.log(longText.split(", ", 2));		// [ 'Get to the', 'point' ]

 

Date 날짜

 

const now = new Date();

// 날짜를 설정
now.setFullYear(2023);
now.setMonth(11); 		// 0 : 1월
// 날짜 가져오기
console.log(now.getFullYear());			// 2023
console.log(now.getMonth());			// 11
console.log(now.getDate());	// 0 : 1일	// 11
console.log(now.getDay()); 	// 0 : 일요일	// 1
console.log(now.getTime());			// 1702289290201
console.log(now);				// 2023-12-11T10:08:10.201Z

// 날짜를 문자열로 변환하여 가져오기
console.log(now.toString());			// Mon Dec 11 2023 19:08:10 GMT+0900 (대한민국 표준시)
console.log(now.toDateString());		// Mon Dec 11 2023
console.log(now.toTimeString());		// 19:08:10 GMT+0900 (대한민국 표준시)
console.log(now.toISOString()); 		// ISO 8601 형식
console.log(now.toLocaleString("en-US"));	// 12/11/2023, 7:08:10 PM
console.log(now.toLocaleString("ko-KR"));	// 2023. 12. 11. 오후 7:08:10

 

 

 

 

 

 

 

 

728x90