์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

6.6. ๋ณ€์ˆ˜ ์บก์Аํ™”ํ•˜๊ธฐ (Encapsulate Variable)

๐Ÿœ๊ฐœ๋ฐœ์ž๋ผ๋ฉด/์ฑ…์„ ์ฝ์žโœ

by :ํ•ดํ”ผ๋ž˜๋น—๐Ÿพ 2021. 9. 26. 14:58

๋ณธ๋ฌธ

- ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ๋„“์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ 

: ๊ทธ ๋ฐ์ดํ„ฐ๋กœ์˜ ์ ‘๊ทผ์„ ๋…์ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ์‹์œผ๋กœ ์บก์Аํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•

- ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ „ ๊ฒ€์ฆ์ด๋‚˜ ๋ณ€๊ฒฝ ํ›„ ์ถ”๊ฐ€ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ.

: ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ private๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•์กฐํ•˜๋Š” ์ด์œ 

= ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํ†ต๋กœ๊ฐ€ ์ •ํ•ด์ง€๊ฒŒ ๋จ. ์˜ค๋ฅ˜ ์ฐพ๊ธฐ ์‰ฌ์›€

- ํด๋ž˜์Šค ์ชผ๊ฐœ๊ธฐ ์ „, ํ•„๋“œ๋ฅผ ์ž๊ฐ€ ์บก์Аํ™”


๋ฐฉ๋ฒ•

1. ๋ณ€์ˆ˜๋กœ์˜ ์ ‘๊ทผ๊ณผ ๊ฐฑ์‹ ์„ ์ „๋‹ดํ•˜๋Š” ์บก์Аํ™” ํ•จ์ˆ˜๋“ค์„ ๋งŒ๋“ ๋‹ค.

2. ์ •์  ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

3. ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘์ฐธ์กฐํ•˜๋˜ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์ ์ ˆํ•œ ์บก์Аํ™” ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ฐ”๊พผ๋‹ค. ํ•˜๋‚˜์”ฉ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธํ•œ๋‹ค.

4. ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ๋‹ค.

-> ๋ณ€์ˆ˜๋กœ์˜ ์ง์ ‘ ์ ‘๊ทผ์„ ๋ง‰์„ ์ˆ˜ ์—†์„ ๋•Œ๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. // ๋ฌด์Šจ ๋ง์ผ๊นŒ

5. ํ…Œ์ŠคํŠธํ•œ๋‹ค.

6. ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ ˆ์ฝ”๋“œ๋ผ๋ฉด ๋ ˆ์ฝ”๋“œ ์บก์Аํ™”ํ•˜๊ธฐ๋ฅผ ์ ์šฉํ• ์ง€ ๊ณ ๋ คํ•ด๋ณธ๋‹ค.

 


  ์ „์—ญ ๋ณ€์ˆ˜  

์ „์—ญ ๋ณ€์ˆ˜์— ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋‹ค

// ๋ณ€๊ฒฝ ์ด์ „
let defaultOwner = {firstName: "๋งˆํ‹ด", lastName: "ํŒŒ์šธ๋Ÿฌ"};
// ์ฐธ์กฐ
spaceship.owner = defaultOwner;
// ๊ฐฑ์‹ 
defaultOwner = {firstName :"๋ ˆ๋ฒ ์นด", lastName:"ํŒŒ์Šจ์Šค"};

 

getter, setter ์ƒ์„ฑ &  ์ ‘๊ทผ์ž๋งŒ ๋…ธ์ถœ์‹œํ‚ค๊ธฐ
// 1) getter, setter ์ƒ์„ฑ
function getDefaultOwner(){
    return defaultOwner;
}
function setDefaultOwner(arg){
    defaultOwner = arg;
}

// 2) getter, setter๋กœ ๋ณ€๊ฒฝ ์ด์ „ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พผ๋‹ค.
spaceship.owner = getDefaultOwner();
setDefaultOwner({firstName:"๋ ˆ๋ฒ ์นด",lastName:"ํŒŒ์Šจ์Šค"});

// 3) ์ ‘๊ทผ์ž๋งŒ ๋…ธ์ถœ ์‹œํ‚ค๊ธฐ
let defaultOwner = {firstName: "๋งˆํ‹ด", lastName: "ํŒŒ์šธ๋Ÿฌ"};
export function getDefaultOwner(){
    return defaultOwner;
}
export function setDefaultOwner(arg){
    defaultOwner = arg;
}

> ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ์˜ ์ด๋ฆ„์„ ๋˜‘๊ฐ™์ด ์ง“๊ณ  ์ธ์ˆ˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. (get,set)


  ํ•„๋“œ๊ฐ’ ๋ณ€๊ฒฝ ์ œ์–ด 

1. ๊ฒŒํ„ฐ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ๋ณต์ œ๋ณธ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค.
let defaultOwnerData = {firstName: "๋งˆํ‹ด", lastName: "ํŒŒ์šธ๋Ÿฌ"};
export function defaultOwner(){
    return Object.assign({},defaultOwnerData);
}
export function setDefaultOwner(arg){
    defaultOwnerData = arg;
}

์›๋ณธ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด...?
2. ๋ ˆ์ฝ”๋“œ ์บก์Аํ™”ํ•˜๊ธฐ

> ์›๋ณธ์œผ๋กœ์˜ ๋งํฌ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ

let defaultOwnerData = {firstName: "๋งˆํ‹ด", lastName: "ํŒŒ์šธ๋Ÿฌ"};
export function defaultOwner(){
    return new Person(defaultOwnerData);
}
export function setDefaultOwner(arg){
    defaultOwnerData = arg;
}
class Person {
    constructor(data){
        this._lastName = data.lastName;
        this._lastName = data.firstName;
    }
    get lastName() {return this._lastName;}
    get firstName() {return this._firstName;}
}

 

์œ„ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๊นŠ์ด๊ฐ€ 1์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค

 

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ