06. 객체
with 양지은
Last updated
with 양지은
Last updated
객체를 공부하기 전에 JavaScript
라는 언어의 특징에 대해 살펴보자. 위에 있는 자료를 참고하면 client-side language 라는 말과 Object based programming language 라는 말이 눈에 띈다. 즉 JavaScript
는 클라이언트 사이드 언어이면서 동시에 객체를 기반으로 둔 언어라는 것을 알 수 있다..
쉽게 말해 Client
란 웹 브라우저에서 움직이는 것들을 말한다. 즉 JavaScript
가 웹 브라우저 언어라는 말과 같은 의미이며 사진과 함께 참고하면 웹 브라우저에서 서버에 request
하기 위해 사용되는 언어라는 의미가 된다.
객체지향언어는 class
를 기반으로 둔 언어를 일컷는다. 하지만 JavaScript
같은 경우 class가 존재하지 않는다. (es6 이후 class 라는 개념이 생김.) 그렇다고 해서JavaScript
가 객체지향언어가 아닌 것은 아니다. function
이 class
를 대채해 사용하고 있다. JavaScript
는 프로토타입 기반의 함수형, 명령어, 객체지향적인 특징을 갖고 있다. 자세한건 다중 패러다임 언어 (multiparadigm programming language) 항목을 참고하자. 링크
위에 있는 사진을 봐도 알다시피 객체(Object) 는 다수의 개념이라는 것을 알 수 있다. 이것을 JavaScript
에 대입하면 여러가지 데이터라는 의미가 되고, 즉 객체(Object) 는 한 가지 이상의 데이터 타입을 갖고 있는 복합형 데이터 타입을 갖고 있는 셈이 된다.
위의 코드에서 처럼 객체(Object)는 하나 이상의 데이터 타입을 갖고 있다. name
이라는 String
과 age
라는 number
데이터 타입을 동시에 가질 수 있기 때문에 복합형 데이터 타입이다. (*Object와 마찬가지로 Array 역시 복합형 데이터 타입이다.)
그렇다면 위와 같은 객체가 없다고 한다면 어떻게 될까?
위에 있는 코드를 보다시피 1의 경우
는 원하는 데이터 값을 일일히 변수로 선언해줘서 불필요한 공간을 차지하게 되고, 양이 많아 질 수록 유지보수 (관리) 측면에서도 떨어진다는 단점을 갖고 있다. 하지만 2의 경우
데이터 값을 하나의 변수 안에 여러가지 데이터 타입을 선언해줌으로서 한 눈에 들어옴과 동시에 관리도 편해지고 불필요한 공간 역시 덜 차지한다는 장점을 갖고 있어 여러 데이터 값을 관리할 때는 객체를 사용한다. (배열도 객체와 이런점이 비슷하다. JavaScript의 배열은 다른 언어와 달리 여러가지 데이터 타입을 가질 수 있다.)
그렇다면 한 번 실습을 해보자. 자기 자신을 나타내는 객체를 하나 선언 해라. 단 조건은 데이터 타입이 두 가지 이상이여야 한다는 것이다.
내가 푼 실습은 총 세 가지 데이터 타입이 쓰였다. (String
, Number
, Boolean
) 반드시 객체에 여러가지 데이터 타입을 넣을 필요는 없지만 우리가 만들어본 실습처럼 객체는 여러가지 데이터 타입들을 하나의 변수에 넣고 관리할 수 있다는 점을 염두해두면 좋을 것 같다.
위와 같이 var person = {}
처럼 {}
안에 데이터 값을 넣는 객체를 객체 리터럴(Object Literal) 이라고 한다. 또한 객체 리터럴에 담긴 값들은 속성 이름 (Property name)
과 속성 (Property)
으로 나뉘는데 이때 name
은 속성
"je"
는 속성 값
이 된다.
쉽게 말해 변수 선언과 동시에 값을 할당하는 것.
객체를 다루기 앞서 속성 접근자(property accessor) 에 대해서 알아야 한다.
위의 코드 처럼 . (온점) 을 이용해 속성에 접근하는 것을 말한다. obj.b를 하게 되면 123이라는 Number 값이 찍히게 된다.
07. 에서 배울 수 있는 배열 객체도 위와 같은 속성 접근자를 이용해 속성에 접a근 할 수 있다.
변수에 특정한 객체를 넣고 속성 접근자를 이용해 객체에 있는 속성을 사용할 수도 있다.
아래는 값을 넣을 때 (input) 사용하는 방법 들이다.
아래는 값을 빼낼 때 (output) 사용하는 방법 들이다.
이렇듯, 속성 접근자를 사용하여 속성을 넣어줄 수도 있고 속성을 가져올 수도 있다.
JavaScript 에서는 이런 식으로 객체를 사용하기도 한다.
물론 아래 같은 코드도 가능하다. 대신 return 값을 선언해줘야 값이 출력된다. (05. 함수와 이벤트 참조)
즉 JavaScript는 구조화가 자유롭다는 것을 알 수있다. 다른 언어를 공부하다 접하는 경우 Js의 이런 점 때문에 어려울 수 있지만 c언어에서 #include ~~~ 를 해주듯 언어의 특징이라고 생각하고 공부하면 될 것 같다.
JavaScript 객체는 크게 다섯 가지 종류로 나뉜다.
window (최상위 객체)
브라우저 객체 모델
기본 내장 객체 모델
문서 객체 모델
사용자 정의 객체
about:blank 에 가서 직접 개발자도구에서 window를 검색해보자.
window 객체는 우리가 자주 사용하는 (var 변수나 function 같은 함수 들도 포함하는 최상위 객체 들이다. 변수나 함수를 선언해주고 window.식별자명과 같은 식으로 console.log에 검색했을 때 값이 아래와 같이 뜨는 것을 볼 수 있다.
단, let과 const는 window.식별자명 하면 뜨지 않으니 참조 바란다.
이와 관련해선 나중에 내용을 추가 할 예정이다.
브라우저 객체 모델이란 쉽게 말해서 JavaScript에 내장되어 있는 객체들을 말한다. 대표적으로 Array가 있고 NaN (not number) String 등도 내장 객체다.
브라우저 내장 객체 모델이란 쉽게 말해 브라우저에 계층적으로 내장되어 있는 객체들이다. 자세한 부분은 BOM
에 대한 부분을 참조하자.
HTML을 조작하기 위한 객체를 일컷는다. getElementByTagName() 과 같은 식으로 생겼다. 자세한 부분은 DOM
에 대한 부분을 참조하자.
사용자 정의 객체는 우리가 계속해서 보고 만들었던 var obj = { 블라블라 }
형태의 리터럴 객체들을 일컷는다.
객체를 공부하다보면 프로토타입(prototype)
과 인스턴스(instance)
라는 용어를 보게 될 것이다. 처음 보면 헷갈릴 수 있지만, 프로토타입(prototype)
의 기능을 인스턴스(instance)
가 갖고 있는 것이다.
쉽게 말해 프로토타입(prototype)
이 가장 큰 파일이고 인스턴스(instance)
가 작은 파일이라고 생각하면 된다.