Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- boj
- 모던 자바스크립트 deep dive
- 노마드코더
- 알고리즘
- CodeStates
- 개발자북클럽
- 구름edu
- Do it! 시리즈
- 자격증
- SQL 개발자
- js
- 프로그래머스
- IT 지식
- javascript
- 엘리스코딩
- 공부를 가장한 일기일지도
- SQLD
- 자바스크립트
- 노개북
- 백준
- 최원영 저자
- 제로베이스
- K-Digital Credit
- 티스토리챌린지
- 노마드 코더
- nomadcoders
- 이해할 수 있는
- 비전공자를 위한
- 오블완
- 톺아보기
Archives
- Today
- Total
개발자를 희망하는 초보의 자기개발 이야기
[혼공스] 5주차 Chapter 06 객체 본문
반응형
기본 미션
객체, 속성, 메소드가 무엇인지 설명하기
객체
- 객체는 속성과 메소드를 가지고 있는 데이터 타입이다.
- 중괄호 {}를 사용하여 만들 수 있다.
- 배열처럼 여러가지 자료형을 담을 수 있다.
속성
- 객체의 특징을 나타내는 값이다.
- 객체의 속성은 키와 값으로 이루어져 있다.
- 속성의 키는 문자열이다.
메서드
- 객체의 속성 중 함수인 속성을 메서드라고 한다.
선택미션
p. 288 확인 문제 3번 풀고, 풀이 과정 설명하기
- Math.sin()은 매개변수로 radian에 대한 사인 값을 반환한다.
- radian은 각도의 도(°)와 다르게, 원의 반지름과 원주를 기준으로 각도를 측정하는 단위 중 하나다.
- degree는 90으로 주어졌으니, radian은 (degree * Math.PI) / 180로 계산된다.
- 따라서, console.log(Math.sin(radian))은 1을 출력한다.
const degree = 90;
const radian = (degree * Math.PI) / 180;
console.log(Math.sin(radian));
학습 기록
객체
- 객체는 키와 값의 쌍으로 구성되며, 배열과 마찬가지로 여러 가지 자료를 한꺼번에 다룰 수 있는 특별한 자료형이다.
객체 생성 방법:
- {} 중괄호로 생성한다.
- 객체의 키는 식별자를 사용한다.
- (식별자 규칙에 의해 숫자로 시작하거나 $, \_ 외에 특수기호가 올 수 없다.)
- 값에는 숫자, 문자열, 불, 함수 등 다양한 자료형을 사용할 수 있다.
// 객체 기본 형태
const object = {
키: 값,
키: 값,
};
객체 값 접근:
- 객체 이름 뒤에 점(.)이나 대괄호[]를 사용해서 값에 접근할 수 있다.
const object = {
age: 13,
level: 1,
};
console.log(object["level"]); // 1
object["level"] = 25;
console.log(object["level"]); // 25
console.log(object.age); // 13
속성과 메서드
- 객체 내의 요소를 속성(property)라고 부른다.
- 객체 내부에 있는 함수를 메서드라고 부른다.
- 메서드를 정의할 때는 일반 함수와 화살표 함수 두 가지 방식을 사용할 수 있다.
- 단, 메서드에서 화살표 함수의 경우 this를 사용할 수 없으므로 일반 함수 방식을 사용하길 권장한다.
const character = {
level: 1,
class: "마법사",
fireball: function () {
console.log(`${this.class}가 파이어볼을 사용하였습니다.`);
},
icewall: () => {
console.log(`${character.class}가 아이스월을 사용하였습니다.`);
},
};
character.fireball(); // 마법사가 파이어볼을 사용하였습니다.
character.icewall(); // 아이스월을 사용하였습니다.
메서드 내부의 this
- 메서드 내부에서 this를 사용하면 현재 객체 자기 자신을 참조한다.
- 하지만, 화살표 함수는 this가 외부 다른 객체(windows 등)를 참조한다.
- 이를 익명 함수는 this를 바인딩 하지만 화살표 함수는 this를 바인딩 하지 않는다고 표현한다.
- this 바인딩 : this를 현재 객체와 연결하는 행위
const character = {
class: "마법사",
icewall: () => {
console.log(`${this.class}가 아이스월을 사용하였습니다.`);
},
};
character.icewall(); // undefined가 아이스월을 사용하였습니다.
객체 속성 추가와 삭제
- 객체 이름 뒤에 점(.)이나 대괄호[]를 사용해서 속성을 추가할 수 있다.
- delete 연산자를 사용하여 속성을 제거할 수 있다.
const character = {
level: 1,
class: "마법사",
fireball: function () {
console.log(`${this.class}가 파이어볼을 사용하였습니다.`);
},
};
character.hp = 100; // 동적 생성
delete character.hp; // 키와 값을 동적으로 제거
기본 자료형과 객체 자료형, 프로토타입
- 자바스크립트의 자료형은 기본 자료형과 객체 자료형으로 구분한다.
기본 자료형
- 기본 자료형은 숫자, 문자열, 불리언 등이다.
- 기본 자료형은 값만 저장하기 때문에 속성과 메서드를 가질 수 없다.
객체 자료형
- 객체 자료형은 함수, 배열, 객체 등이다.
- 스택과 힙을 연결하여 활용하기 때문에 크기를 늘릴 수 있다.
- 속성과 메서드를 가질 수 있다.
Array.isArray()
- 자바스크립트에서는 배열도 객체이기 때문에 typeof를 통해서는 자료형 확인이 어렵다.
- Array.isArray() 메서드를 사용해 배열을 판단할 수 있다.
let arr = [1, 2, 3, 4];
console.log(Array.isArray(arr)); // true
일급 객체(First-Class Object)
- 자바스크립트에서 함수는 '실행이 가능한 객체'라는 특이한 자료형이다.
- typeof 연산자를 사용하면 function을 출력하지만, 객체의 특성을 가지고 있다.
- 변수에 저장하고, 다른 함수에 전달하고, 함수에서 반환할 수도 있다.
- 이러한 성질을 일급객체라 한다.
기본 자료형을 객체 자료형으로 선언하기
- new 키워드를 사용해 기본 자료형도 객체 자료형으로 바꿔 선언할 수 있다.
let num = new Number(123);
num.color = "blue";
console.log(num); // Number {123, color: "blue"}
console.log(num + 5); // 128
기본 자료형의 일시적 승급
- 자바스크립트는 사용의 편리성을 위해 기본 자료형의 속성과 메서드를 호출할 때 일시적으로 기본 자료형을 객체로 승급시킨다.
- (자료형 뒤에 점을 찍고 무엇인가 하려고 할 때)
- 하지만 이는 일시적인 승급으로 문장이 종료되면 없어진다.
const str = "문자열입니다.";
str.sample = 20;
console.log(str.sample); // undefined
교재 외 래퍼 객체
- new 키워드로 생성한 자료형을 래퍼 객체(Wrapper Object)라 한다.
- 이는 아래와 같은 여러 이유로 권장하지 않다.
- 타입이 달라져 typeof로 비교가 불가능하다.
- 비교 연산이 어렵다.
- 자바스크립트 엔진 자체에서 필요시 래퍼 객체로 임시 생성했다가 삭제한다.(ex. length 메서드)
프로토타입(Prototype)
- 프로토타입은 기본 자료형에 추가적인 속성과 메서드를 부여할 수 있는 기능이다.
- 프로토타입을 활용하면 기본 자료형에 사용자 정의 메서드를 추가할 수 있다.
- 하지만 최근에는 프로토타입을 직접 수정하는 방식이 위험할 수 있어 사용이 줄어들고 있다.
- 기본적으로 존재하지 않는 메서드인데 사용하고 있는 코드를 본다면 prototype은 아닌지 확인해보자.
String.prototype.contain = function (str) {
return this.indexOf(str) >= 0;
};
const a = "문자열";
console.log(`a.contain('문자'): ${a.contain("문자")}`); // a.contain('문자'): true
다양한 메서드 맛보기
Number 객체 메서드
toFixed()
- 숫자 N번째 자릿수까지 출력한다.
- 문자열로 변환하면서 반올림하여 출력한다.
const num = 123.0987;
num.toFixed(2); // 123.10
isNaN()
- 매개변수의 값이 NaN이면 true를, 아니라면 false를 반환한다.
const num = Number("문자열");
Number.isNaN(num); // true
isFinite()
- 무한대의 값을 inFinity라고 한다.
- Infinity는 양과 음의 2가지 형태로 나뉜다.
- isFinite는 유한한 숫자이면 true, Infinity이면 false를 반환한다.
let n = Infinity;
let m = -10 / 0; // - Infinity
console.log(n === m); // false
console.log(n === Infinity); // true
Number.isFinite(n); // false
String 객체 메서드
trim()
- 앞, 뒤의 공백을 제거한다.
- 웹 개발에서 입력을 받는 경우가 굉장히 많기 때문에 자주 사용하는 메서드다.
let str = " 문자 ";
console.log(str.trim()); // 문자
split()
- 특정 기준으로 배열을 만들고 싶을 때 사용한다.
- 필수로 알고 있어야 할 메서드 중 하나다.
let str = "15.12.25,크리스마스,기념일";
console.log(str.split(",")); // ['15.12.25', '크리스마스', '기념일']
str = "15.12.25 크리스마스 기념일";
console.log(str.split(" ")); // ['15.12.25', '크리스마스', '기념일']
Math 객체 메서드
내림: Math.floor(), 올림: Math.ceil(), 반올림: Math.round()
- 매개변수로 값을 넣으면 내림, 올림, 반올림된 결과값을 반환한다.
Math.floor(34.12); // 34
Math.ceil(34.12); // 35
Math.round(34.12); // 34
최대값: Math.max(), 최소값: Math.min()
- 배열의 요소에서 값을 도출하는 경우가 많으므로 전개연산자를 함께 기억하도록 한다.
Math.max(12, 34, 56); // 56
let arr = [12, 34, 56];
Math.max(...arr); // 56
랜덤한 숫자 생성: Math.random()
- 0 이상, 1 미만의 랜덤한 숫자를 생성한다.
- Math.floor와 함께 사용해 소수점을 없앤 형태로 많이 사용한다.
Math.floor(Math.random() * 10); // 0~9까지 생성됨
Math.floor(Math.random() * 50); // 0~50까지 생성됨
Math.floor(Math.random() * 10) + 1; // 1부터 10까지 생성됨
Math.floor(Math.random() * (max - min + 1)) + min; // min이상 max미만 랜덤하게 생성하는 공식
자바스크립트 라이브러리 활용
- 다른 개발자가 미리 여러 클래스나 함수들을 만들어 놓은 것을 라이브러리 라고 한다.
- 라이브러리는 파일을 다운로드 받거나 CDN 링크를 사용하는 방법이 있다.
- src 속성에 다운로드 받은 파일 자체를 경로지정하거나 CDN의 경로를 지정한다.
유용한 라이브러리
- Lodash - 집합처리나 배열처리와 관련해 유용한 기능을 제공한다.
- Luxon - 시간을 처리할 때 유용하며, '타임존 세팅', '지금부터 몇시간 후' 같은 처리에 유용하다.
- Handsontable - 웹페이지에 스프레드시트를 출력한다.
- D3.js / Chart.js - 데이터 시각화에 유용하다.
- Three.js - 3차원 그래픽을 다룬다.
객체의 기본 속성 지정하기
매개변수로 객체를 지정하는 방법
- 일반적으로 함수를 호출할 때 호출코드만으로는 각 매개변수가 무슨 역할을 하는지 알 수 없다.
const sendMail = function (from, to, content) {
return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다.`;
};
console.log(sendMail("나", "첫사랑", "잘지내"));
// "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
- 매개변수로 객체를 전달하고, 함수에서 각 매개변수를 처리하도록 하면 좀 더 명확한 코드 작성이 가능하다.
const sendMail = function (object) {
return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
매개변수의 기본값 지정하기
- 아래와 같은 기본형은 매개변수 자체에 기본 값을 지정하면 된다.
- 하지만 객체를 매개변수로 전달하게 되면 기본값을 지정하기 어렵다.
let sendMail = function (from, to, content, status = "수취인불명") {
return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다.`;
};
console.log(sendMail("나", "첫사랑", "잘지내"));
// "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
객체를 매개변수로 전달할 때 기본값 지정하기
과거방법1: undefined 체크 방식
- 자바스크립트는 정의되지 않은 속성을 출력하면 undefined가 출력된다.
- 이를 활용해 기본값을 설정한다.
const sendMail = function (object) {
object.status = object.status !== undefined ? object.status : "이상 없음";
return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
과거방법2: Falsy 체크 방식
- Falsy값을 체크해서 기본값을 설정한다.
- 단, 빈 문자열이나 0도 Falsy 값으로 체크되니 이런 값이 오지 않을 것이 확실해야 한다.
const sendMail = function (object) {
object.status = object.status ? object.status : "이상 없음";
return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
과거방법3: 조건부 연산자 + 짧은 조건문
- 왼쪽 피연산자가 Falsy 값이면 오른쪽 값을 반환함.
- Falsy 체크 방식처럼 0, false, "" 등도 기본값이 적용되는 문제가 있다.
const sendMail = function (object) {
object.status = object.status || object.status : "이상 없음";
return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다."
현대방법1: 전개연산자 활용
- 객체에 기본값인 속성과 기존 객체를 전개연산자로 묶는다.
- 이 때 기존 객체에 동일한 속성명이 있으면 값을 덮어쓰게 된다.
- 동일한 속성이 없다면 기본값으로 추가한 속성이 출력된다.
const sendMail = function (object) {
object = { status: "이상없음", ...object };
return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다. 전송:${object.status}`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음"
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
status: "수취인불명",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:수취인불명"
현대방법2: 매개변수 구조 분해 할당 활용
- 함수 매개변수에서 직접 구조 분해 할당을 사용하여 기본값을 설정한다.
const sendMail = function ({ from, to, content, status = "이상없음" }) {
return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다. 전송:${status}`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음"
현대방법3: 전개 연산자와 구조 분해 할당 병행
- 전개 연산자로 기본값을 포함한 새로운 객체를 만들고, 구조 분해 할당으로 필요한 속성만 추출한다.
- 객체를 수정하지 않고 안전하게 기본값을 추가할 수 있으며, 선택적으로 필요한 속성만 사용한다.
- Node.js 등에서 자주 사용되는 패턴으로 기억하도록 한다.
const sendMail = function (object) {
const { from, to, content } = { status: "이상없음", ...object };
return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다. 전송:${status}`;
};
console.log(
sendMail({
from: "나",
to: "첫사랑",
content: "잘지내",
})
); // "나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음"
반응형
'혼공학습단 > 혼공자스' 카테고리의 다른 글
혼공학습단 13기 활동 회고 (0) | 2025.02.23 |
---|---|
[혼공스] 6주차 Chapter 07 문서 객체 모델 (0) | 2025.02.23 |
[혼공스] 4주차 Chapter 05 함수 (0) | 2025.02.05 |
[혼공스] 3주차 Chapter 04 반복문 (3) | 2025.02.04 |
[혼공스] 2주차 Chapter 03 조건문 (0) | 2025.01.22 |