[JAYโŒจ๏ธJS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์ธ Class์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

2023. 5. 8. 01:29ใ†javascript

๋ฐ˜์‘ํ˜•

 

 

[JAYโŒจ๏ธJS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์ธ Class์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž
[JAYโŒจ๏ธJS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์ธ Class์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

 

 1๏ธโƒฃ class ๋ž€?
  • 2016๋…„ ES6 ๋ถ€ํ„ฐ ๋„์ž…๋œ instance๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜.
  • ๊ฐ์ฒด๋ฅผ ์ƒ์‚ฐํ•˜๋Š” ๋ถ•์–ด๋นต ํ‹€๊ณผ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ํ”ํžˆ ์„ค๋ช…ํ•˜๋Š”๋ฐ, ์ƒ์‚ฐ ๋„๋ฉด ํ˜น์€ ์ฒญ์‚ฌ์ง„์ด๋ผ๊ณ ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • class + ์ด๋ฆ„ + { constructor ... } ๋กœ ๊ตฌ์„ฑ.
  • constructor()๋Š” new ์—ฐ์‚ฐ์ž๋กœ ํ˜ธ์ถœ๋˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ธฐ๋ณธ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ.
    ํŠน๋ณ„ํ•œ ์ ˆ์ฐจ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • class๋‚ด๋ถ€์— ์žˆ๋Š” Field๋Š” ๋ณ€์ˆ˜์™€ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, Constructor์™€ Method ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… ์ƒ์„ฑ(๊ฐ์ฒด ์ƒ์„ฑ) ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ํด๋ž˜์Šค ๋ฌธ๋ฒ•์ฒ˜๋Ÿผ ๋ฐ”๊ฟ”์ค€ ๊ฒƒ.
    ์ด์ฒ˜๋Ÿผ ๋‚ด๋ถ€์ ์ธ ๋™์ž‘์€ ๋™์ผํ•˜์ง€๋งŒ ๋” ๋ณด๊ธฐ ์ข‹๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ฐœ์„ ๋œ ๋ฌธ๋ฒ•์„ Sugar Syntactic ์„คํƒ• ๋ฌธ๋ฒ•์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๋ณด์™„ ์„ค๋ช…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์šฐ์ธก ๊ฒŒ์‹œ๋ฌผ ์ฐธ๊ณ . [JAYโŒจ๏ธJS]๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
// Robot์ด๋ผ๋Š” Class์— speak() ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ
class Robot {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`์‚๋ฆฌ๋น„๋ฆฌ. ์ œ ์ด๋ฆ„์€ ${this.name}์ž…๋‹ˆ๋‹ค.`);
    }
}

// ๐Ÿ’Š Encapsulation ์บก์Šํ™”!
// new ํ‚ค์›Œ๋“œ๋กœ Robot ํ…œํ”Œ๋ฆฟ์„ ๊ฐ€์ ธ์™€์„œ newBot Object์— data In.
const newBot = new Robot('๐Ÿค– JAY');


// newBot instance์— Method ์‹คํ–‰ 
// = ์‚๋ฆฌ๋น„๋ฆฌ.์ œ ์ด๋ฆ„์€ ๐Ÿค– JAY์ž…๋‹ˆ๋‹ค.
newBot.speak();

 

์˜ˆ์ œ ์ฝ”๋“œ class Robot์˜ ๊ตฌ์กฐ
์˜ˆ์ œ ์ฝ”๋“œ class Robot์˜ ๊ตฌ์กฐ

 

 

 

 2๏ธโƒฃ class ์ƒ์†
  • ํด๋ž˜์Šค์˜ ์ƒ์†์€ extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ.
  • ๋ถ€๋ชจ class์—๊ฒŒ ์ƒ์†์„ ๋ฐ›๋Š” ์ž์‹ class๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค(subclass) ํ˜น์€ ํŒŒ์ƒ ํด๋ž˜์Šค(derived class) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • super() ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ constructor ์†์„ฑ์„ ์ƒ์†์‹œํ‚ค๋Š” ํŠน์ˆ˜ํ•œ ๋ฉ”์†Œ๋“œ.
  • ์„œ๋ธŒ ํด๋ž˜์Šค์—๋Š” super([arguments]); ์†์„ฑ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ fields ๋‚ด๋ถ€์— ์œ„์น˜ํ•œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ƒ์†๋œ๋‹ค.
  • super() ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ this ๊ฐ’์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ this ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ
    ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ ์ฃผ์˜!
// 1. Robot์ด๋ผ๋Š” Class์— speak() ๋ฉ”์†Œ๋“œ ์ƒ์„ฑ
class Robot {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`์‚๋ฆฌ๋น„๋ฆฌ. ์ œ ์ด๋ฆ„์€ ${this.name}์ž…๋‹ˆ๋‹ค.`);
    }
}

// 2. class ์ƒ์†
// ํด๋ž˜์Šค์˜ ์ƒ์†์€ extends ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ.
// ์„œ๋ธŒ ํด๋ž˜์Šค์— ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์•ˆ์—์„œ super() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ.
// extends ๋ช…๋ น์–ด ์•ˆ์— ๋ณ€๋™ ์—†์ด ์ƒ์†๋งŒ ๋ฐ›๋Š”๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ
class clone extends Robot {
    constructor([name]) {
        super([name]);
    }
    // ์ƒ์œ„ ๊ฐ์ฒด์˜ Method๋ฅผ ์žฌ์„ ์–ธํ•ด์„œ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ Overriding์ด๋ผ๊ณ  ํ•œ๋‹ค.
    speak() {
        super.speak(); // = ๋ถ€๋ชจ Class์˜ Method ์ƒ์†!
        console.log(`Super ${this.name} Overriding!`);
    }
}

// extends ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ๋œ subclass 'clone'์„ ๊ฐ€์ ธ์™€์„œ ์บก์Šํ™”.
const babyBot = new clone('๐Ÿค– BABY')

// babyBot instance์— Method ์‹คํ–‰
// = ์‚๋ฆฌ๋น„๋ฆฌ. ์ œ ์ด๋ฆ„์€ ๐Ÿค– BABY์ž…๋‹ˆ๋‹ค.
// = Super ๐Ÿค– BABY Overriding!
babyBot.speak();

์˜ˆ์ œ์ฝ”๋“œ class ์ƒ์†์˜ ๊ตฌ์กฐ
์˜ˆ์ œ์ฝ”๋“œ class ์ƒ์†์˜ ๊ตฌ์กฐ

 

 

 

 3๏ธโƒฃ ๋น„๊ณต๊ฐœ(private) ํ”„๋กœํผํ‹ฐ
  • ๋น„๊ณต๊ฐœ ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ์ฒด ์•ˆ์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋œปํ•˜์ง€ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ์—ญํ• .
  • CloserํŒจํ„ด์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด์‹œํƒœ๊ทธ(#)๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. Closer๋ฅผ ํ™œ์šฉํ•œ Private property

  • Private property๋Š” ์ฝ”๋“œ ์ ‘๊ทผ์— ์ œํ•œ์„ ํ•œ๋‹ค๋Š” ์  ์ด์™ธ์— ๋ถˆํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ „์ฒด ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์œ„ํ—˜์„ ๋ฐฉ์ง€.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํƒœ์ƒ์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์ง€๋งŒ ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‰๋‚ด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ.
  • ์ด์™€ ๊ฐ™์ด ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ(property)์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ชจ๋“ˆ ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.
// 'closer' ๋ฅผ ํ™œ์šฉํ•œ Private property
class Robot {
    constructor(name, pw) {
        this.model = name;
        const getPassword = () => pw;
        this.speak = () => console.log(`๐Ÿค– ์ œ ์ด๋ฆ„์€ ${this.model}์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ${getPassword()}`);
    }
}

const closerBot = new Robot('๐Ÿค– ๋ฏธ์ถœ์‹œ ๋กœ๋ด‡', '1234');

closerBot.password   // = undefined  // password์— ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ!

Closer๋ฅผ ํ™œ์šฉํ•œ Private property ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด
Closer๋ฅผ ํ™œ์šฉํ•œ Private property ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด

 

 

2. # ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ Private property

  • # ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋น„๊ณต๊ฐœ ํ”„๋กœํผํ‹ฐ๋กœ ์ „ํ™˜๋œ๋‹ค.
  • class๋‚ด์—์„œ๋งŒ ํ™•์ธ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ณ , Instance์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด getPassword() setPassword() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
  • ์ถœ์‹œ๋œ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•„ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์  ์ฃผ์˜!
// '#' ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ Private property
class Robot {
    // '#password' property๋ฅผ ๋น„๊ณต๊ฐœ ์ฒ˜๋ฆฌ
    #password
    constructor(name, pw) {
        this.model = name;
        this.#password = pw;
    }
    getPassword() {
        return this.#password
    }
    setPassword(_pw) {
        this.#password = _pw;
    }
    speak() {
        console.log(`๐Ÿค– ์ œ ์ด๋ฆ„์€ ${this.model}์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ${this.getPassword()}`);
    }
}

const privateBot = new Robot('๐Ÿค– ๋ฏธ์ถœ์‹œ ๋กœ๋ด‡', '1234');

privateBot.password // = undefined  // password์— ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ!

# ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ Private property ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด
# ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ Private property ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด

 

 

 

4๏ธโƒฃ Get, Set Property
  • get set ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋“ฏ ๊ฐ’์„ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ
    ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ getter ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ setter ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • #๋ฅผ ํ™œ์šฉํ•œ ๋น„๊ณต๊ฐœ ํ”„๋กœํผํ‹ฐ์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์ฃผ์˜!
  • ํ˜‘์—… ์‹œ์—๋Š” get, set ์•ˆ์— ์–ด๋–ค ๋กœ์ง์ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ
    ์ฃผ์„์ด๋‚˜, ๊ฐ€์ด๋“œ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š”๊ฒƒ์ด ์ข‹๋‹ค.
function HidePassword(password) {
    return "๊ด€๋ฆฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”! ๐Ÿšซ";
}
class Robot {
    #password;
    constructor(name, pw) {
        this.name = name;
        this.#password = pw;
    }
    get password() {
        return HidePassword(this._password);
    }
    set password(pw) {
        this._password = pw;
    }
    speak() {
        console.log(`๐Ÿค– ์ €๋Š” ${this.name}์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ${HidePassword(this._password)}`);
    }
    viewPassword() {
        const hasOwnPassword = this.#password ? this.#password : '๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.';
        console.log(`๐Ÿ” ${hasOwnPassword}`);
    }
}

const testBot1 = new Robot("๋กœ๋ด‡1", "1234");
const testBot2 = new Robot("๋กœ๋ด‡2");

testBot1.speak();          // = '๐Ÿค– ์ €๋Š” ๋กœ๋ด‡1์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๊ด€๋ฆฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”! ๐Ÿšซ'
testBot2.speak();          // = '๐Ÿค– ์ €๋Š” ๋กœ๋ด‡2์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๊ด€๋ฆฌ์ž๋งŒ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”! ๐Ÿšซ'
testBot1.viewPassword();   // = '๐Ÿ” 1234'
testBot2.viewPassword();   // = '๐Ÿ” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.'

Getter & Setter ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด
Getter & Setter ์ฝ˜์†” ๋…ธ์ถœ ํ™”๋ฉด

 

 

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ์š”์•ฝ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ class๋Š” ํ•จ์ˆ˜์˜ ํ•œ ์ข…๋ฅ˜๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์‚ฐํ•˜๋Š” ๋ถ•์–ด๋นต ํ‹€๊ณผ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ํ”ํžˆ ์„ค๋ช…ํ•˜๋Š”๋ฐ, 
    ์ƒ์‚ฐ๋„๋ฉด ํ˜น์€ ์ฒญ์‚ฌ์ง„์ด๋ผ๊ณ ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • constructor()๋Š” new ์—ฐ์‚ฐ์ž๋กœ ํ˜ธ์ถœ๋˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๊ธฐ๋ณธ ์ƒํƒœ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ.ํŠน๋ณ„ํ•œ ์ ˆ์ฐจ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค์˜ ์ƒ์†์€ extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ.
  • ๋ถ€๋ชจ class์—๊ฒŒ ์ƒ์†์„ ๋ฐ›๋Š” ์ž์‹ class๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค(subclass) ํ˜น์€ ํŒŒ์ƒ ํด๋ž˜์Šค(derived class) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • super() ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ constructor ์†์„ฑ์„ ์ƒ์†์‹œํ‚ค๋Š” ํŠน์ˆ˜ํ•œ ๋ฉ”์†Œ๋“œ.
  • ๋น„๊ณต๊ฐœ ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ์ฒด ์•ˆ์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋œปํ•˜์ง€ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ์—ญํ• .
    CloserํŒจํ„ด์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด์‹œํƒœ๊ทธ(#)๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • get set ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๋“ฏ ๊ฐ’์„ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ
    ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ getter ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ setter ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•