본문 바로가기

심층 자바스크립트(1) -객체의 생성과 활용-

by Recstasy 2019. 6. 7.

객체지향 객체지향이라고들 하는데 객체지향이 뭘까?

문과 출신이 생각하는 관점에서 객체는 수동적인 상태에 놓여있는 물건을 떠올리게 한다. 능동적이지 않다는 것만 확실하다. 수동적인 상태라니, 어쩐지 더 애매해진다. 문과의 기준에서 객체를 좀더 깊게 살펴보자.

 

객체는 한자로 客體다. '손님 객'과 '몸 체'가 합친 말이 '객체'다. 한자를 있는 그대로 해석하면, '손님의 몸(육체)'이다. 손님의 몸이라..

 

현실적에서 손님의 몸이 오고가는 곳이 어디일까? 일단 숙박업소가 떠오른다. 이왕 여기까지 생각했다면 게스트하우스를 떠올려보자. 게스트하우스와 일반 가정집의 차이점은 무엇일까? 일반 가정집은 매일 사람이 바뀌지 않는다. 그래서 그집 특유의 냄새와 분위기가 있다. 반면 게스트하우스는 손님들에 의해 분위기가 바뀐다. 가령, 음악가들이 숙박하면 자유로운 분위기가 되고, 교수님들이 들리면 묵직한 분위기가 되는 식이다.

 

프로그래밍에서 객체도 이와 같다. 게스트하우스(객체)로 집을 설계하면, 내용물(손님)에 따라 매번 집 문화가 달라진다.(언어,분위기,냄새 등....) 또, 손님에게 음식을 판매하거나 악세서리를 판매하는 식으로 장사를 할 수 있고(집기능 확장) 유지보수에 유리하게끔 설계되어 있다.

 

자신이 혼자 사용하기에 적합한 개발방식이 '절차지향 방식'이며, 여러 사람이 사용가능하게끔 구조를 만들어, 내용에 따라 아웃풋을 조절할 수 있는 설계방식을 '객체지향개발'로 생각하자. 가령, 가정집의 화장실은 절차지향 방식(개인에 특화된)이며, 고속도로 휴게소의 화장실은 객체지향 방식(많은 사람이 이용할 수 있고, 언제든지 변경할 수 있는 구조와 방식)으로 만들어야 한다.


절차지향 방식으로 시작한 프로그래밍 언어가 객체지향으로 변모한 이유는 가내식 수공업에서 분업화된 공장제 대량생산으로 바뀐 것과 비슷하다. 절차지향 방식의 다음과 같은 단점은 폭발적인 성장에 있어 치명적이었다.


[절차지향 방식의 단점]

1] 재사용이 까다롭다.

2] 기능 확장이 어렵다.

3] 프로그램 소스분석이 어렵다.

4] 유지보수가 힘들다.

5] 많은 인력이 참여하는 대형프로젝트에 부적합하다.



객체지향 방식은 절차지향 방식의 단점이 모두 장점이며, 단점은 개발이 어렵고 작은 프로젝트에서 사용하면 소잡는 칼로 닭 잡는 상황이 된다는 점이다.

 

1 『객체 생성방법』

객체를 생성해보자. 객체 생성방법은 리터럴 방식과 프로퍼티 2가지가 있다. 리터럴 방식은 중괄호를 이용하여 객체를 선언하면 된다.

 

let company = { }

 

객체는 프로퍼티와 값을 아래와 같이 입력한다.

 

{ 프로퍼티 : '값' }

 


let company = {

 

name : '삼성전자',

birth : 1969,

product : '스마트폰'

console.log(company.name);

//>>삼성전자

console.log(company.birth);

//>>1969



객체생성은 아래와 같이 생성한 이후에 정의할 수도 있다.



let company = { };

    company.name = '삼성전자';

    company.birth = 1969;

 

console.log(company.name);

//>>삼성전자

console.log(company.birth);

//>>1969


 

2 『메서드 생성

메서드는 함수다. 자바스크립트에서는 함수를 객체의 값으로 넣을 수 있는데, 이를 메서드라 부른다. 메서드는 이름과 값을 콜론( : )으로 구분하고, 메서드들은 콤마( , )로 구분한다. 메서드를 호출하려면 점( . )연산자를 찍어서 사용하거나 대괄호([ ])를 활용한다.


let company = {

name : '삼성전자' ,

getName : function( ){

return this.name;

},

setName : function(name){

this.name = name;

},

display : function( ){

console.log(this.name);

}

}

 

console.log(company.getName( ));

//>>삼성전자

company.setName('LG전자');

console.log(company.getName( ));

//>>LG전자

company.display( );

//>>삼성전자

company["setName"]("애플");

console.log(company["getName"]( ));

//>>애플

company["display"]( );

//>>애플



대괄호 표기법에 비해 점 표기법이 훨씬 편리하다. 점 표기법에 의하면 다음과 같이 이미 생성된 객체에 메서드를 넣을 수 있다. 


company.product = '스마트폰'

company.business = function(){

    return this.name + ' : ' + this.product

}

console.log(company.business());

//>>애플 : 스마트폰



다음 포스팅에서는 객체의 캡슐화에 관해 알아보자. 

댓글

최신글 전체

이미지
제목
글쓴이
등록일