배경

데이터 구조는 프로그램을 이해하는 역할을 한다.

데이터 구조는 깔끔하게 관리해야 한다. 개발을 이어갈 수록 데이터를 이해하게 것이다. 깊어진 이해를 프로그램에 반드시 반영해야 한다.

예시

const organization = {name: "애크미 구스베리",country:"GB"};
상수에 name title 변경해야 한다. 객체는 코드베이스 곳곳에서 사용된다.


const organization = {name: "애크미 구스베리",country:"GB"};
//organization 레코드 클래스로 캡슐화
class Organization{
    constructor(data){
        this._name = data.name;
        this._country = data.country;
    }
    get name(){return this._name;}
    set name(arg){ this._name = arg;}
    get country(){return this._country;}
    set country(arg){ this._country = arg;}
}
레코드를 클래스 캡슐화한 덕에 변경을 작은 단계로 나눠할 있게 됐다.
작은 단계라 함은 잘못될 일도 작아진다는 말과 같다.


const organization = {name: "애크미 구스베리",country:"GB"};
class Organization{
    constructor(data){
        //생성자와 접근자를 구분하여 점진적으로 변경
        this._title = data.name;
        this._country = data.country;
    }
    get name(){return this._title;}
    set name(arg){ this._title = arg;}
    get country(){return this._country;}
    set country(arg){ this._country = arg;}
}


const organization = {name: "애크미 구스베리",country:"GB"};
class Organization{
    constructor(data){
        //생성자 조정
        this._title = (data.title !== undefined) ? data.title : data.name;
        this._country = data.country;
    }
    get name(){return this._title;}
    set name(arg){ this._title = arg;}
    get country(){return this._country;}
    set country(arg){ this._country = arg;}
}


//호출하는 곳 수정
const organization = new Organization({title: "애크미 구스베리",country:"GB"});


class Organization{
    constructor(data){
        this._title =  data.title;
        this._country = data.country;
    }
    get name(){return this._title;}
    set name(arg){ this._title = arg;}
    get country(){return this._country;}
    set country(arg){ this._country = arg;}
}


const organization = new Organization({title: "애크미 구스베리",country:"GB"});
class Organization{
    constructor(data){
        this._title =  data.title;
        this._country = data.country;
    }
    get title(){return this._title;}
    set title(arg){ this._title = arg;}
    get country(){return this._country;}
    set country(arg){ this._country = arg;}
}

지금 과정은 데이터 구조가 여러 곳에서 참조되고 있을 리팩터링 과정이다.

만약 참조되는 적거나 곳이라면 캡슐화도 필요없었을 것이다.

복잡할 수록 이처럼 작게 나눠서 정복해야한다.

 

자바스크립트가 아닌 데이터 구조를 불변으로 만들 있는 언어는 캡슐화 대신 데이터 구조를 값을 복제해 새로운 이름으로 선언 복제한 값을 사용하게 바꾸는 식으로 진행한다.

 

+ Recent posts