์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค!
์ค๋๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด Static,Protected,Private ์ ๋ํด ์ ๊ฐ ์ดํดํ ๊ฒ์ ๋ฐํ์ผ๋ก
์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
Static
Static์ ์ ์ ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ด, ๋ณํ์ง ์๋๋ค๋ ๋ป์ด๋ค.
์ด๊ฒ์ ์ด์ฉํ์ฌ ์ ์ ๋ฉ์๋, ํ๋กํผํฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
์ฝ๊ฒ ๋งํ๋ฉด ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๋ถ๋ถ์ด๋ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ์ ์ํด ๋๋ ๊ฒ์ด๋ค.
Static Property
class Person {
//๋ชจ๋ ์ฌ๋์ด ๋์ผํ๊ฒ ๊ฐ์ง๊ณ ์๊ณ ๋ณํ์ง ์๋ ๊ฐ
static planet = "์ง๊ตฌ"
}
//ํด๋์ค ์์ฒด์์ ๋ฐ๋ก ์ฝ๊ธฐ ๊ฐ๋ฅ
console.log(Person.planet) //์ง๊ตฌ
Static Method
class User {
constructor(name,createDate) {
this.name = name
this.createDate = createDate
}
//๋ชจ๋ ์ ์ ๊ฐ ๋์ผํ๊ฒ ๊ฐ์ง๊ณ ์๊ณ ๋ณํ์ง ์๋ ๊ธฐ๋ฅ
static sayHi() {
console.log("Hi")
}
static compare(user1,user2) {
return user1.createDate - user2.createDate
}
}
//ํด๋์ค ์์ฒด์์ ํธ์ถ๊ฐ๋ฅ
User.sayHi() //Hi
let users = [
new User("Foma",new Date(2021,1,1)),
new User("Gran",new Date(2020,1,1)),
new User("Young",new Date(2022,1,1))
]
//์๋์ ๊ฐ์ด ์ ์ ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์์
console.log(users.sort(User.compare))
/*
[
User { name: 'Gran', createDate: 2020-02-01T06:00:00.000Z },
User { name: 'Foma', createDate: 2021-02-01T06:00:00.000Z },
User { name: 'Young', createDate: 2022-02-01T06:00:00.000Z }
]
*/
//์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค ๋๋ ์ ์ฉํจ
User.createTodayNewUser = function() {
return new this("Foma",new Date())
}
Protected
Protected๋ ํด๋์ค์ ํด๋์ค์ ์์๊น์ง ํ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๋ ํค์๋์ด๋ค.
์์ฑํ๋ ๋ฐฉ์์ ์ด๋ฆ ์์ '_'๋ฅผ ๋ถ์ด๊ณ ์์ฑํ๋ค.
_waterAmount = 0
_plusWaterAmount1() {...}
ํ์ง๋ง JavaScript ๋ฌธ๋ฒ์ ์ผ๋ก ์ง์ ํ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํธ์ถ์ด ๋๋ค.
๊ฐ์ ํ ์ฌํญ์ด ์๋๋ฉฐ ํ๋ก๊ทธ๋๋จธ๋ค ์ฌ์ด์์ ์ฝ์์ผ๋ก '_'์ด ์๋ค๋ฉด ์ธ๋ถ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ ํ๋ค๊ณ ์ฌ๊ธด๋ค.
console.log(a._waterAmount) //0
a._plusWaterAmount1() //waterAmount + 1
console.log(a._waterAmount) //1
Private
Private๋ ํด๋์ค ๋ด๋ถ์์๋ง ํ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๋ ํค์๋์ด๋ค.
์์ฑํ๋ ๋ฐฉ์์ ์ด๋ฆ ์์ '#'์ ๋ถ์ด๊ณ ์์ฑํ๋ค.
#waterAmount = 0
#plusWaterAmount1() { ... }
Protected์๋ ๋ค๋ฅด๊ฒ Private๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ํธ์ถํ๊ฒ ๋๋ฉด Error๊ฐ ๋ฐ์ํ๋ค.
a.#plusWaterAmount() //Error
console.log(a.#waterAmount) //Error
Reference
'๐ Language > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๊ณ ๊ธ ์ฐ์ฐ์(Advanced Operator)๋? (feat. ๋นํธ์ฐ์ฐ์) (0) | 2022.02.26 |
---|---|
[JS] ๋น๋๊ธฐ ์ฒ๋ฆฌํ๋ ๋ฒ ์์๋ณด๊ธฐ(Callback,Promise,Async & Await) (0) | 2022.02.15 |
[JS] ํด๋์ค(Class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์์ (0) | 2022.02.12 |
[JS] ํ๋กํ ํ์ (Prototype) ๋ค๋ค๋ณด๊ธฐ (0) | 2022.02.12 |
[JS] ํ๋กํผํฐ ์ต์ (ํ๋๊ทธ) ๋ค๋ฃจ๊ธฐ(Property Flag) (0) | 2022.02.12 |
๋๊ธ