파카

객체 (2) 본문

프로그래밍/Javascript

객체 (2)

Anphaca 2021. 11. 10. 11:52

계속 머릿속에서만 생각하니 더 복잡해져만 가는 기분이 들어 

역시 남겨놓고 수정해야지 하면서 계속 기록에 남겨놓으려고 한다. 

 

객체안에는 함수를 넣어서 사용할 수 있다. 

자연스럽게 Getter와 Setter에 대해 알아보자.

 

그 전에 JS의 정의를 보면 아래와 같다.

Javascript는 프로토타입 기반 객체 생성을 지원하는 동적 스크립트 언어이다. 

이게 무슨 소리일까.. 간단히 정리해보자

- 자바스크립트는 객체지향언어이다.

- 일반적인 다른 언어(C++, JAVA)와는 다르다.

 

객체 지향 언어에는 2가지 큰 틀이 있다

  • 클래스 기반 
  • 프로토타입 기반 
    (객체의 원형인 프로토타입을 이용하여 새로운 객체를 만들어내는 프로그래밍 기법이다. 이렇게 만들어진 객체 역시 자기자신의 프로토타입을 갖는다. 이 새로운 객체의 원형을 이용하면 또 다른 새로운 객체를 만들어 낼수도 있으며 이런 구조로 객체를 확장하는 방식을 프로토타입 기반 프로그래밍이라고 한다.)

이것도 정리하면 JavaScript에는 클래스라는 개념이 없다. 

사실상 추후에 다룰 class가 추가되긴 했지만 클래스 기반 언어와는 다르다.

 

기본적으로 클래스 기반언어는 이전에 얘기했던 것처럼 어떤 객체의 틀이된다.

 

프로토타입 기반 언어는 객체들을 prototype으로 연결 시킨다. 

또한 상속 받은 객체의 내용을 동적으로 추가 및 삭제할 수 있다. 

 

JS에서는 함수도 하나의 값이라는 말을 듣게 되는데 

위의 개념을 정리하면 자연스럽게 이해가 될 거 같다.

 

말이 너무 길었다.. 쓰면서도 뭔가 싶다.. 

한번 문법과 구조를 코드로 작성해보자

 

객체 내에 메서드를 추가할 수 있다.  

한번 더 정리

// 메소드는 3가지 방법이 있다.
// 아래의 선언된 메소드를 참고
const obj = {
    name: "Seong Chan",
    age : 30,
    getFamilyName: function() {
        return "An";
    },
    // arrow function
    getLastName: () => "An", 
    getBloodType() {
        return "B";
    },
};

 

JS는 객체 지향 언어이다. 

객체의 보호를 위해 캡슐화 개념을 지원하는데 그게 Getter와 Setter이다.

// 아래의 선언된 메소드를 참고
const obj = {
    name: "Seong Chan",
    age : 30,
    getFamilyName: function() {
        return "An";
    },
    // arrow function
    getLastName: () => "An", 
    getBloodType() {
        return "B";
    },
    get fullName() {
        return `${obj.name} ${obj.getLastName()}`;
    },
    set setAge(value){
        if(value >=0 && value < 120) {
            this.age = value;
        } else {
            this.age = 0;
        }
  },
};

// Getter와 Setter
/*
문제가 있는 값을 세팅하는 것을 막고싶을 때
객체의 내부적으로는 실제 함수인데 객체 외부에서는 속성처럼 보이게 하는 방법
*/
obj.setAge = 131;                    // setAge: [Setter]
console.log(obj.fullName);          // fullName: [Getter]

console.log(obj);                  
console.log(obj.getFamilyName);     // [Function: getFamilyName]
console.log(obj.getFamilyName());

 

근데 JS는 동적프로그래밍 언어이다 보니 

객체의 속성을 막 지울 수 있다. 허허..

 

추후 클래스를 정리하면서 관련된 내용을 더 알아보도록 하자. 

'프로그래밍 > Javascript' 카테고리의 다른 글

일급함수, 일급객체란 ?  (0) 2021.12.08
클래스 그리고 prototype  (0) 2021.11.10
객체 (1)  (0) 2021.11.09
호이스팅이란?  (0) 2021.11.08
JS, 함수 (2)  (0) 2021.11.01
Comments