์ถ์ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ตฌํํด๋์ค์์ private ์ ๊ทผ ๋ถ๊ฐ๊ด๋ จ ํด์ ์ง๋ฌธ ์์ต๋๋ค.
์ถ์ ํด๋์ค์์ private ํ๋๋ฅผ ์ธ ์ผ์ด ์๋๊ณ , ๋์ฒด ์ด๋จ ๋ ์ฐ๊ธธ๋ ํ์ํ๊ฑด์ง ๋ฌผ์ด๋ณด์ ๊ฒ ๊ฐ์ต๋๋ค.abstract method๊ฐ ์กด์ฌํ ์ ์๋ค๋ ๊ฒ๋ง ๋นผ๋ฉด abstract class๋ class์ ๋์ผํ ์ญํ ์ ํฉ๋๋ค. ์ฆ, ์ถ์๋ฉ์๋๊ฐ ์๋ ์ผ๋ฐ ๋ฉ์๋๊ฐ ์กด์ฌํ ์ ์๊ณ , ๊ทธ ๋ฉ์๋์์๋ง ์ฌ์ฉํ๋ ๋ณ์๊ฐ ํ์ํ๋ค๋ฉด ํ๋ผ์ด๋น์ผ๋ก ์ธ ์๋ ์์ต๋๋ค. ์ง์ง๋ก ์ธ๋ชจ์๋ abstract class์์์ private ๋ณ์ ์์์
๋๋ค.abstract class Animal { private callCount: number = 0; abstract crying(): void; call():void{ this.crying(); this.callCount++; console.log(`์ ๋ฅผ ${this.callCount}๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์?`); } } class Dog extends Animal{ crying(){ console.log("๋ฉ๋ฉ"); } } class Cat extends Animal{ crying(){ console.log("์ผ์น"); } } const main = ():void => { const choco: Dog = new Dog(); const bori: Dog = new Dog(); const nabi: Cat = new Cat(); choco.call(); //๋ฉ๋ฉ ์ ๋ฅผ 1๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ bori.call(); //๋ฉ๋ฉ ์ ๋ฅผ 1๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ choco.call(); //๋ฉ๋ฉ ์ ๋ฅผ 2๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ choco.call(); //๋ฉ๋ฉ ์ ๋ฅผ 3๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ nabi.call(); //์ผ์น ์ ๋ฅผ 1๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ nabi.call(); //์ผ์น ์ ๋ฅผ 2๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ bori.call(); //๋ฉ๋ฉ ์ ๋ฅผ 2๋ฒ์งธ ๋ถ๋ฌ์ฃผ์
จ๊ตฐ์ } main();์ ์์ ์์ call()์ ๋ชจ๋ Animal์ด ๊ฐ์ง๋ ๋ฉ์๋์ด๊ณ ๊ฐ ๋๋ฌผ์ด ๋ช๋ฒ ๋ถ๋ ธ๋์ง๋ฅผ ์ถ๋ ฅํด์ค๋๋ค. ์ด๋ call์ด ์คํ๋ ํ์๋ฅผ ๋ด์ ํ๋(๋ณ์)๊ฐ Animal ๊ฐ์ฒด์ ํ์ํ๊ณ , ๊ทธ ํ๋๋ช
์ callCount๋ก ํ์ต๋๋ค. ๊ทผ๋ฐ callCount์ ๊ฒฝ์ฐ call()ํจ์์์๋ง ์ฌ์ฉ๋์ด์ผํ๋๋ฐ, ํน์ ์์ํ ๋ค๋ฅธ ํด๋์ค์์ ์๋ชป๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น ํ๋๋ฅผ ์ฌ์ฉํ ๊น๋ด ์์ํ ํด๋์ค์์๋ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ Animal ๊ฐ์ฒด ์์์๋ง ์ธ ์ ์๋๋ก private๋ก ์ ์ธํ์์ต๋๋ค.์ด์ฒ๋ผ ์ถ์ํด๋์ค ์์์๋ง ์ฌ์ฉํ ํ๋์ ๊ฒฝ์ฐ, private ํค์๋๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.