자바스크립트 객체
1. 자바스크립트 객체와 프로토타입
객체의 정의 및 특성
객체(Object): 실제 세상에 존재하는 사물을 모델링한 것으로, 속성(데이터)과 동작(함수)을 함께 가집니다. 이를 통해 데이터와 동작이 분리되지 않고 하나로 묶여 관리되는 엔터티를 형성합니다.
- 속성(Property): 객체가 가지고 있는 특성값을 변수로 표현 (예: model, speed, color)
- 동작(Method): 객체가 수행할 수 있는 행동을 함수로 표현 (예: brake(), accel())
- 기본 자료형: 자바스크립트에서 객체는 가장 기초적인 자료형이며, 문자열, 수치형, 부울형 등 거의 모든 변수가 객체처럼 구현됩니다.
객체 지향 프로그래밍
정의: 속성과 동작을 하나로 묶어서 프로그램을 작성하는 기법입니다.
핵심 원칙:
- 속성과 메서드: 객체 내부에 존재하며 서로 긴밀하게 연결됩니다
- 컨테이너 개념: 객체는 변수(속성)와 메서드를 소유하는 컨테이너로 볼 수 있습니다
- 은닉성: 객체 내부의 변수는 외부 세계로부터 감추어져 있어 데이터 보호가 가능합니다
객체의 종류 및 생성 방법
객체의 종류:
- 내장 객체: window, document, Date, String, Array 등 생성자가 미리 작성되어 있음
- 사용자 정의 객체: 사용자(개발자)가 생성자를 정의함
객체 생성 방법:
- 객체 상수로부터 생성 (싱글톤): 를 사용하여 객체를 정의하고 값을 초기화하며, 해당 문장이 실행될 때 바로 객체가 생성됩니다.
var myCar = {
model: "Grandure",
speed: 60,
color: "red",
brake: function () {
this.speed -= 10;
},
accel: function () {
this.speed += 10;
},
};
- 생성자 함수를 이용한 객체 생성: 생성자 함수를 정의한 후 new 연산자를 사용하여 객체를 생성합니다. 이는 C++의 클래스와 유사하며, 개발자가 원하는 개수만큼 객체를 쉽게 만들 수 있는 장점이 있습니다.
function Car(model, speed, color) {
this.model = model;
this.speed = speed;
this.color = color;
this.brake = function () {
this.speed -= 10;
};
this.accel = function () {
this.speed += 10;
};
}
myCar = new Car("Sonata", 60, "red");
참고:
this
는 코드를 실행하는 현재 객체를 의미하며, 속성에 반드시 this를 붙여 지역 변수와의 혼동을 피해야 합니다.
객체 멤버 사용 및 추가
객체 멤버 사용: 객체 안의 속성과 메서드인 객체 멤버를 사용하기 위해서는 점(dot) 연산자를 사용합니다.
myCar.color = "yellow";
myCar.brake();
객체에 속성 및 메서드 추가: 기존 객체에도 점(dot) 연산자를 이용하여 새로운 속성이나 메서드를 동적으로 추가할 수 있습니다.
myCar.turbo = true;
myCar.showModel = function () {
// 함수 내용
};
프로토타입
객체의 공유: 여러 객체가 동일한 메서드를 가질 때, 메모리 낭비를 줄이기 위해 메서드를 공유하는 메커니즘입니다. 일반적인 객체 지향 언어는 클래스를 사용하지만, 자바스크립트는 프로토타입(prototype) 개념을 사용합니다.
프로토타입의 개념: 자바스크립트의 모든 객체는 prototype이라는 숨겨진 객체를 가지고 있습니다. 이 prototype 객 체를 통해 공유되는 속성과 메서드를 작성할 수 있습니다. 즉, 여러 인스턴스가 생성되더라도 공통적인 메서드는 다시 생성하지 않고 이전 메서드를 사용합니다.
function Point(xpos, ypos) {
this.x = xpos;
this.y = ypos;
}
Point.prototype.getDistance = function () {
return Math.sqrt(this.x * this.x + this.y * this.y);
};
프로토타입 체인: 객체의 속성이나 메서드를 참조하는 순서를 의미합니다. 객체에서 속성이나 메서드를 찾을 때, 먼저 해당 객체 자체를 확인하고, 없으면 __proto__
속성을 통해 연결된 prototype 객체로 올라가면서 찾습니다.
Object 객체: 자바스크립트 객체의 부모가 되는 객체입니다. 자바스크립트의 모든 객체는 Object 객체를 기초로 하여 생성되며, Object 객체의 메서드(toString(), valueOf(), hasOwnProperty(), isPrototypeOf())는 하위 객체에서 재정의하여 사용할 수 있습니다.
2. 내장 객체
Date 객체
기능: 날짜와 시간 코딩 작업에 사용되는 가장 기본적인 객체입니다.
생성 방법:
new Date()
(현재 날짜/시간)new Date(milliseconds)
new Date(dateString)
new Date(year, month, date[, hours[, minutes[, seconds[, ms]]]])
주요 메서드:
getDate()
,setDate()
getDay()
getFullYear()
,setFullYear()
getHours()
,setHours()
getMilliseconds()
,setMilliseconds()
getMinutes()
,setMinutes()
getMonth()
,setMonth()
getSeconds()
,setSeconds()
toDateString()
toISOString()
toJSON()
toLocaleDateString()
toLocaleTimeString()
toLocaleString()
toString()
toTimeString()
toUTCString()
활 용 예시: 두 날짜 비교 (getTime()
메서드 활용), 카운트다운 타이머, 시계 제작 등에 사용됩니다.
String 객체
기능: 문자열을 다루는 객체입니다.
주요 속성 및 메서드:
length
: 문자열의 길이toUpperCase()
,toLowerCase()
: 대소문자 변환concat()
,+
: 문자열 결합indexOf()
: 문자열 내에서 특정 텍스트가 처음 등장하는 위치 반환match()
: 정규식을 사용하여 문자열 내 일치하는 콘텐츠 탐색replace()
: 정규식을 사용하여 문자열 내 주어진 값을 다른 값으로 대체split(delimiter[, limit])
: 문자열을 분리자로 분리한 후, 배열로 반환
HTML 래퍼 메서드:
big()
,small()
bold()
,italics()
fixed()
문자열 리터럴과 문자열 객체: 문자열 리터럴은 큰따옴표로 생성되며, 자동 형변환이 되어 문자열 객체의 모든 속성과 메서드를 사용할 수 있습니다. new String()
을 통해 생성된 문자열 객체와는 달리, 함수로 전달될 때 값만 전달되므로 원본은 변경되지 않습니다.
Math 객체
기능: 수학적 계산 작업을 위한 객체입니다.
특징: new
를 통해 객체를 생성할 필요 없이 바로 이용합니다.
주요 속성:
E
(오일러 상수)LN2
,LN10
PI
SQRT1_2
,SQRT2
주요 메서드:
abs(x)
: 절대값acos(x)
,asin(x)
,atan(x)
: 아크 삼각함수ceil(x)
: 올림floor(x)
: 내림round(x)
: 반올림max(x, y)
: 최댓값min(x, y)
: 최솟값pow(x, y)
: 거듭제곱sqrt(x)
: 제곱근random()
: 0과 1 사이의 난수
Array 객체
배열의 표현: 자바스크립트에서는 배열도 객체로 표현되며, 배열을 나타내는 객체는 Array입니다.
특징:
- 배열의 크기가 자동으로 조절됩니다
- 하나의 배열에 여러 가지 자료형을 혼합해서 저장할 수 있습니다
- 배열의 크기보다 큰 인덱스 값으로 접근해도 오류가 발생하지 않고 undefined 값이 반환됩니다
생성 방법:
new Array()
new Array("요소1", "요소2")
["요소1", "요소2"]
주요 속성:
length
: 배열의 크기
주요 메서드:
concat(value1[, value2...])
: 배열의 끝에 인수를 추가하며, 인수는 배열일 수도 있습니다indexOf(searchStr[, startIndex])
: 요소의 값을 가지고 요소의 인덱스를 찾습니다push(value)
,pop()
: 스택(stack)처럼 데이터를 삽입/추출합니다shift()
,unshift()
: 큐(queue)처럼 배열의 첫 번째 요소를 반환하고 제거하며, 맨 앞에 요소를 추가합니다sort()
: 배열을 알파벳순으로 정렬하며, 수치값 정렬을 위해function(a,b) { return a-b }
와 같은 정렬 기준 함수를 사용할 수 있습니다slice([begin[, end]])
: 배열의 일부를 복사하여 새로운 배열로 반환합니다join(delimiter)
: 배열의 요소들을 하나의 문자열로 출력하며, 분리자를 지정할 수 있습니다filter()
: 어떤 조건에 부합하는 요소만을 선택하여 새로운 배열로 만들어서 반환하며, 요소를 선택하는 함수를 인수로 전달합니다
2차원 배열: Array 객체 안에 다른 Array 객체를 포함시켜 2차원 배열을 구현할 수 있습니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];