[JavaScript] ν΄λμ€ (Class)
μλ°μ€ν¬λ¦½νΈλ₯Ό λΉλ‘―ν μ¬λ¬ νλ‘κ·Έλλ° μΈμ΄μλ "ν΄λμ€", νκ΅μ΄λ‘ λ²μνλ©΄ "λΆλ°, κ°μ²΄κ΅°" μ΄λΌλ κ°λ μ΄ μ‘΄μ¬νλ€. μ΄ κ°λ μ "κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°" κ³Όλ κΉμ μ°κ΄μ±μ κ°μ§κ³ μμ΄, κ°λ°μλ‘μ¨λ μμλμ΄μΌ ν νμ μμμ΄κΈ°λ νλ€.
ν΄λμ€λ λ§ κ·Έλλ‘ νλμ κ·Έλ£Ή, λλ λ¬Άμμ΄λΌκ³ μκ°νλ©΄ νΈνλ€.κ°λ Ή, 'μ΄λ¦', 'μ±λ³', 'λμ΄' λΌλ μμ±μ΄ μκ³ , 'μ΄λ¦ λΆλ₯΄κΈ°', 'κ°λͺ νκΈ°', 'λμ΄ κ³μ°νκΈ°' λ±μ λ©μλ (κΈ°λ₯) μ΄ μλ€κ³ νμ. 'μ΄λ¦' μμ±κ³Ό 'μ΄λ¦ λΆλ₯΄κΈ°', 'κ°λͺ νκΈ°' λ©μλλ₯Ό νλλ‘ κ·Έλ£Ήννμ¬ κ΄λ¦¬νλ κ²μ΄ μ΄λ€μ κ°λ³μ μΌλ‘ λΆμ°μν€λ κ²λ³΄λ€ ν¨μ¬ μμ μ μ©μ΄ν κ²μ΄λ€. μ΄λ κ² λΉμ·ν κΈ°λ₯μ νκ±°λ μμ±μ κ°λ μμλ€μ νλμ κ°μ²΄μ λ΄μ μ¬μ©νκ³ κ΄λ¦¬ν μ μλλ‘ νλ μλ£κ΅¬μ‘°λ₯Ό ν΄λμ€λΌκ³ νλ€.
κ·Έλ λ€λ©΄ ν΄λμ€λ μ΄λ»κ² μλνλκ°? μ΄λ₯Ό μμ보기 μ μ λ¨Όμ , μλ°μ€ν¬λ¦½νΈμ ν΄λμ€μ κ΄κ³λΆν° λ€μ΄κ°λ³΄μ.
β¨ μλ°μ€ν¬λ¦½νΈμ ν΄λμ€μ κ΄κ³
μλ°μ€ν¬λ¦½νΈλ "νλ‘ν νμ κΈ°λ° κ°μ²΄μ§ν₯ μΈμ΄" μ΄λ€. μ΄ λ§μΈμ¦μ¨, ν΄λμ€κ° νμ μλ (class-free) κ°μ²΄μ§ν₯ μΈμ΄λΌλ λ»μ΄λ€. ES5 μμ κΉμ§λ§ ν΄λ μμ±μ ν¨μμ νλ‘ν νμ μ ν΅ν΄ μμμ ꡬννμ§λ§, ES6 μμ λμ λ "ν΄λμ€" κ°λ λλΆμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν¨μ¬ κ°νΈνκ² κ΅¬νν μ μκ² λμλ€.
// μμ±μ ν¨μ (ES5)
var Person = (function() {
function Person(name) {
this.name = name;
}
Person.prototype.sayHi = function () {
console.log('Hi, ' + this.name)
}
}());
var me = new Person('Kang')
me.sayHi() // Hi, Kang
// ν΄λμ€ (ES6)
class Person {
constructor(name) {
this.name = name;
}
sayHi() {
console.log('Hi, ' + this.name)
}
}
const me = new Person('Kang')
me.sayHi() // Hi, Kang
νμ§λ§ κΈ°μ‘΄(ES5) μλ κ°μ²΄μ§ν₯μ ꡬνν μ μμλ€λ©΄, κ΅³μ΄ μλ‘ ν΄λμ€λ₯Ό λμ ν μ΄μ λ 무μμΌκΉ?
κ·Έ μ΄μ λ, μμ±μ ν¨μλ νλ‘ν νμ κΈ°λ°μ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ°λ νλ, μ 곡νμ§ μλ μ¬λ¬ κΈ°λ₯μΌλ‘ μΈν΄ κ°μ²΄μ§ν₯μ μμ ν ꡬννλ λ°μλ μ μ½μ΄ μμκΈ° λλ¬Έμ΄λ€. κ°λ Ή, μμ±μ ν¨μμ ν΄λμ€μ μ°¨μ΄λ₯Ό μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
π new μ°μ°μ μμ΄ νΈμΆ : μμ±μ ν¨μλ μΌλ° ν¨μλ‘ νΈμΆλμ§λ§, ν΄λμ€λ μ€λ₯κ° λλ€.
π extends μ super : μμ±μ ν¨μμλ μ 곡λμ§ μμ§λ§, ν΄λμ€μλ μ 곡λλ€.
π νΈμ΄μ€ν : μμ±μ ν¨μμλ νΈμ΄μ€ν μ΄ λ°μνλ, ν΄λμ€μλ λ°μνμ§ μλλ€.
π strict mode : μμ±μ ν¨μμλ μ묡μ μΌλ‘ μ§μ λμ§ μμ§λ§, ν΄λμ€μλ μ묡μ μΌλ‘ μ§μ λλ€.
π [[Enumerable]] : ν΄λμ€μ constuctor, νλ‘ν νμ λ©μλ, μ μ λ©μλλ λͺ¨λ [[Enumerable]] μ κ°μ΄ false λ€.
ν΄λμ€λ μμ±μ ν¨μλ³΄λ€ μμ κ΄κ³ ꡬνμ λμ± λͺ λ£νκ² νκΈ° λλ¬Έμ, κ°μ²΄μ§ν₯μ λμ± κ²¬κ³ νκ² λ§λ λ€κ³ νκΈ°λ νλ€. κ·Έλ λ€λ©΄ ν΄λμ€κ° μ΄λ»κ² μλνλμ§, κΈ°λ³ΈλΆν° μ‘°κΈμ© μμ보λλ‘ νμ.
β¨ ν΄λμ€μ μ μμ λ©μλ
μ°μ ν΄λμ€λ₯Ό μ μν λλ λ€μ μμΉμ λ°λ₯΄λ©΄ λλ€.
1. class ν€μλλ₯Ό μ¬μ©νμ¬ μ μ
2. Pascal Case μ¬μ©
class Person {
// some code ...
}
μΈμ€ν΄μ€λ₯Ό μμ±ν λλ λ€μ μμΉμ λ°λ₯Έλ€.
1. new μ°μ°μ μ¬μ©
const me = new Person();
// new μ°μ°μ μμ κ²½μ°
const you = Person(); // TypeError: Class constructor Person cannot be invoked without 'new'
ν΄λμ€λ ννμμΌλ‘λ μ μλ μ μλλ°, μ΄ λ ν΄λμ€ μ΄λ¦μ μμ μλ μλ€.
const Person = class {}
const Person1 = class Test {}
ν΄λμ€λ μΌκΈ κ°μ²΄μ΄λ©°, λ€μ νΉμ§μ κ°λλ€.
- λ°νμμ μμ±μ΄ κ°λ₯νλ€.
- λ³μλ μλ£κ΅¬μ‘°μ μ μ₯ν μ μλ€.
- ν¨μμ 맀κ°λ³μμ μ λ¬ν μ μλ€.
- ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
π‘ μΌκΈ κ°μ²΄λ? (First-class object)
ν¨μμ 맀κ°λ³μλ‘ μ λ¬λκ±°λ, ν¨μμ κ²°κ³Όλ‘ λ°νλκ±°λ, λ³μμ ν λΉλ μ μλ λͺ¨λ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν μμ±μ ν¨μμ΄κΈ° λλ¬Έμ, ν΄λμ€λ κ²°κ΅ ν¨μμ νλ‘νΌν°λ₯Ό λͺ¨λ μμλ°λλ€.
ES11 κΈ°μ€μΌλ‘ ν΄λμ€μ λͺΈμ²΄μλ λ©μλλ§ μ μΈν μ μμΌλ©°, μ μΈν μ μλ λ©μλμ μ’ λ₯λ μΈ κ°μ§λ‘ ꡬλΆλλ€. (constructor(μμ±μ) / νλ‘ν νμ λ©μλ / μ μ λ©μλ)
πconstructor(μμ±μ)
μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμν λ©μλμ΄λ©°, μ΄λ¦μ λ³κ²½ν μ μλ€.
class Person {
constructor(name) {
this.name = name;
}
}
constructor λ ν΄λμ€ λ΄μ μ΅λ ν κ°λ§ μ‘΄μ¬ν μ μμΌλ©°, μλ΅λ κ°λ₯νλ€. λ§μ½ μλ΅ν κ²½μ°μλ λΉ constructor κ° μ묡μ μΌλ‘ μ μλμ΄, λΉ κ°μ²΄λ₯Ό μμ±νλ€.
class Person {
}
// μμ λμΌν¨
class Person {
constructor(){
}
}
constructor λ λ³λμ λ°νλ¬Έμ κ°μ§ μμμΌ νλλ° κ·Έ μ΄μ λ ν΄λμ€κ° new μ°μ°μμ ν¨κ» νΈμΆλλ μ¦μ μ묡μ μΌλ‘ this (μΈμ€ν΄μ€) κ°μ²΄λ₯Ό λ°ννκΈ° λλ¬Έμ΄λ€. this κ° μλ λ€λ₯Έ κ°μ²΄λ₯Ό λ°ννλ€λ©΄ this λ°νμ΄ λ¬΄μλκ³ λ°νκ°μ΄ λ°νλλ€. (νμ§λ§ μμκ°μ λ°ννλ κ²½μ°μλ λ°νμ΄ λ¬΄μλλ€.)
class Person {
constructor(name){
this.name = name;
return {}
}
}
const me = new Person('Ha');
console.log(me) // {}
// μμκ° λ°ν
class Person {
constructor(name){
this.name = name;
return 100
}
}
const me = new Person('Ha');
console.log(me) // {name: 'Ha'}
πνλ‘ν νμ λ©μλ
ν΄λμ€μ prototype μ λ©μλλ₯Ό μΆκ°νλ€λ©΄, κΈ°λ³Έμ μΌλ‘ νλ‘ν νμ λ©μλκ° λλ€.
class Person {
constructor(name){
this.name = name;
}
// νλ‘ν νμ
λ©μλ
sayHi() {
console.log('Hi, I am' + this.name);
}
}
μ΄λ, ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ ν¬λ‘ν νμ 체μΈμ μΌμμ΄ λλ©°, ν΄λμ€μμ μ μν λ©μλλ μΈμ€ν΄μ€μ νλ‘ν νμ μ μ‘΄μ¬νλ νλ‘ν νμ λ©μλκ° λλ κ²μ΄λ€. μΈμ€ν΄μ€λ μ΄λ¬ν λ©μλλ₯Ό "μμ"λ°μ μ¬μ©νλ κ²μ΄λ€.
const me = new Person('Ha');
Object.getPrototypeOf(me) === Person.prototype // true;
me.constructor === Person;
Object.getPrototypeOf(Person.prototype) === Object.prototype // true;
πμ μ (static) λ©μλ
μ μ λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ νΈμΆν μ μλ λ©μλμ΄λ€. μ μ λ©μλλ₯Ό λ§λλ λ°©λ²μ λ κ°μ§κ° μλλ°, νλλ νλ‘ν νμ μ μ§μ ν¨μλ₯Ό ν λΉν΄μ£Όλ κ²μ΄λ©°, λμ§Έλ ν΄λμ€ λ΄λΆμμ static ν€μλλ₯Ό λΆμ¬ λ©μλλ₯Ό μμ±νλ κ²μ΄λ€.
class Person {
constructor(name){
this.name = name;
}
}
// μ μ λ©μλ λ°©λ² 1
Person.sayHi = function () {
console.log('Hi')
}
class Person {
constructor(name){
this.name = name;
}
// μ μ λ©μλ λ°©λ² 2
static sayHi() {
console.log('Hi, I am' + this.name);
}
}
// μ μ λ©μλ νΈμΆ λ°©λ²
Person.sayHi();
μ μ λ©μλλ ν΄λμ€μ λ°μΈλ©λ λ©μλκ° λλ©°, ν΄λμ€λ ν΄λμ€κ° νκ°λλ μμ μ ν¨μ κ°μ²΄κ° λλ―λ‘, μ μ λ©μλλ ν΄λμ€ μ μ μ΄νμ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ νΈμΆν μ μλ€. (λ³λμ μμ± κ³Όμ νμ μμ) μ μ λ©μλλ ν΄λμ€λ‘ νΈμΆνλ©°, μΈμ€ν΄μ€λ‘ νΈμΆν μ μλ€. (μΈμ€ν΄μ€μ νλ‘ν νμ 체μΈμ μ‘΄μ¬νμ§ μκΈ° λλ¬Έ)
μ½κ² μλ₯Ό λ€κΈ° μν΄ μλμ κ·Έλ¦Όμ 보μ. C λ Child ν΄λμ€ (λλ μμ±μ ν¨μ) κ° μμ±νλ μΈμ€ν΄μ€μ΄λ©°, C μ [[Prototype]] λ Child.prototype μ΄λ€. μ΄ Child.prototype μμ contstructor μ prototype Method κ° λ€μ΄μλ κ²μ΄λ©°, Child μμ static Method κ° λ€μ΄μλ€. Child λ μμ±μ ν¨μ / ν΄λμ€μ΄κΈ°μ [[Prototype]] μΈ Parent λ‘ Function.prototype λ₯Ό κ°μ§λ©°, Child.prototype λ κ°μ²΄μ΄λ―λ‘ Parent λ‘ Object.prototype λ₯Ό κ°λλ€.
λ°λΌμ μ μ λ©μλμ νλ‘ν νμ λ©μλκ° κ°κ° μνλ νλ‘ν νμ 체μΈμ΄ λ€λ₯΄λ©°, νΈμΆνλ 주체λ λ€λ₯΄λ€. (this λ°μΈλ©μ λμλ λ€λ₯Έλ°, μ΄ λ΄μ©μ μ‘°κΈ λ μκΈ° μν΄μλ Javascript μ this ν¬μ€νΈλ₯Ό μ½μ΄λ΄λ μ’λ€.)
π‘ [[Prototype]]
- ν¨μλ₯Ό ν¬ν¨ν λͺ¨λ κ°μ²΄κ° κ°μ§κ³ μλ μΈν°λ μ¬λ‘―
- κ°μ²΄μ μ μ₯μμ μμ μ λΆλͺ¨ μν μ νλ νλ‘ν νμ κ°μ²΄
π‘ prototype νλ‘νΌν°
- ν¨μ κ°μ²΄λ§ κ°μ§κ³ μλ νλ‘νΌν°μ΄
- ν¨μ κ°μ²΄κ° μμ±μλ‘ μ¬μ©λ λ μ΄ ν¨μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄μ λΆλͺ¨ μν μ νλ κ°μ²΄(νλ‘ν νμ κ°μ²΄)
π‘ μ μ λ©μλ λ μμκ°κΈ°
μλ°μ€ν¬λ¦½νΈμλ μ¬λ¬ νμ€ λΉνΈμΈ κ°μ²΄ (μ μμ κΈ°λ₯μ μ 곡νλ κ°μ²΄) λ€μ΄ μ‘΄μ¬νλ€. Math, Number, JSON, Object λ±... μ΄λ€μκ²λ μ¬λ¬ κ°μ μ μ λ©μλλ€μ΄ μ‘΄μ¬νλ©°, μ ν리μΌμ΄μ μ μμμ μ¬μ©λλ μ νΈλ¦¬ν° ν¨μ (utility function) μΌλ‘ μ§μΉλκΈ°λ νλ€.
κ°λ Ή, Math κ°μ²΄μλ max() λΌλ μ μ λ©μλκ° μ‘΄μ¬νλλ°, μ΄ λλΆμ this λ°μΈλ©μ΄ μ΄λ£¨μ΄μ§μ§ μκ³ κ³ μ μ ν¨μ κΈ°λ₯μ μνν μ μκ² λλ€. λ§μ½ max() κ° μ μ λ©μλκ° μλμλ€λ©΄, Math ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λμμ λ ν΄λΉ μΈμ€ν΄μ€μ κ°μ λ°λΌ max() ν¨μμ κ²°κ³Όκ° λ¬λΌμ§ κ²μ΄λ€. JSON.stringify(), Object.is() λ±κ³Ό κ°μ λ©μλ λͺ¨λ λμΌν νΉμ§μ κ°μ§κ³ μλ€.
β¨ ν΄λμ€μ μΈμ€ν΄μ€
ν΄λμ€λ₯Ό ꡬμ±νκ³ λλ©΄, μ΄ ν΄λμ€μ μΈμ€ν΄μ€ (instance) λΌλ κ²μ λ§λ€ μ μλ€κ³ νλ€. μΈμ€ν΄μ€λ 무μμ΄λ©°, μ΄λ»κ² λ§λ€ μ μλ κ²μΌκΉ? ν΄λμ€κ° νλμ "κ°μ²΄κ΅°" μ κ°κΉλ€λ©΄, μΈμ€ν΄μ€λ ν΄λΉ κ΅°μ μμλ νλμ κ°λ³ "κ°μ²΄" μ κ°κΉλ€.
ν΄λμ€ μμ new μ°μ°μλ₯Ό λΆμ¬ νΈμΆνλ©΄ λ€μ μμλ‘ μΌλ€μ΄ μ§νλλ€.
1. ν΄λμ€μ λ΄λΆ λ©μλ [[Construct]] νΈμΆ
2. λΉ κ°μ²΄ (μΈμ€ν΄μ€) μμ±
- [[Prototype]] μΌλ‘ ν΄λμ€μ prototype κ° κ°λ¦¬ν€λ κ°μ²΄ μ€μ (μ κ·Έλ¦Όμ Child.prototype)
- λΉ κ°μ²΄λ this μ λ°μΈλ©
π‘ this λ°μΈλ©μ΄λ μλ³μμ κ°μ μ°κ²°νλ κ³Όμ μ΄λ€.
λ³μκ° μ μΈλ λ, λ³μ μ΄λ¦(μλ³μ)μ λ©λͺ¨λ¦¬ μ£Όμκ° μ°κ²°λλλ°, μ΄ κ³Όμ μμ λ°μΈλ©μ΄λ€.
this λ°μΈλ©μ this μλ³μμ this κ° κ°λ¦¬ν¬ κ°μ μ°κ²°νλ κ³Όμ μ΄λ©°, ν¨μ νΈμΆ λ°©μ λΏλ§ μλλΌ strict mode μλ μν₯μ λ°λλ€.
3. ν΄λμ€μ constructor λ΄λΆ μ½λ μ€ν
- this λ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΄ (λ°μΈλ©)
- μΈμ€ν΄μ€ μ΄κΈ°ν (νλ‘νΌν° μΆκ°, constructor μ λ¬λ°μ μ΄κΈ°κ°μΌλ‘ κ° μ΄κΈ°ν)
4. μΈμ€ν΄μ€ λ°ν
- μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ©λ this λ°ν (μ묡μ )
class Person {
constructor(name){
// μΈμ€ν΄μ€ μμ±, this λ°μΈλ©, {}
this.name = name; // this λ°μΈλ©λ μΈμ€ν΄μ€ μ΄κΈ°ν
// this λ°ν (μ묡μ ), {name = name}
}
}
β¨ ν΄λμ€μ νλ‘νΌν°
ν΄λμ€κ° κ°λ νλ‘νΌν°μ μ’ λ₯λ μΈμ€ν΄μ€ νλ‘νΌν°μ μ κ·Όμ νλ‘νΌν°λ‘ λλ μ μλ€.
π μΈμ€ν΄μ€ νλ‘νΌν°
μμ λ Όμν this λ°μΈλ©μ΄ μ΄λ£¨μ΄μ§ λμμ νλ‘νΌν°μ κ°μ κ°μ μλ―Ένλ©°, constructor λ΄λΆμμ μ μλμ΄μΌ νλ€. μ΄λ, μΈμ€ν΄μ€ νλ‘νΌν°λ μΈμ λ public ν μνλ₯Ό κ°λλ€. μ¦, λͺ¨λ μ½λμμ ν΄λΉ κ°μ μ κ·Όν μ μλ€.
π μ κ·Όμ νλ‘νΌν°
μ체μ μΌλ‘ κ°μ κ°μ§ μκ³ λ€λ₯Έ νλ‘νΌν°μ κ°μ μ½κ±°λ μ μ₯ν λ μ¬μ©νλ μ κ·Όμ ν¨μλ‘ κ΅¬μ±λ νλ‘νΌν°λ€.
const person = {
firstName: 'Haeun',
lastName: 'Kang',
// μ κ·Όμ ν¨μλ‘ κ΅¬μ±λ μ κ·Όμ νλ‘νΌν°
get fullName() {
return `${this.firstName} ${this.lastName}`
}
}
console.log(person.fullName); // Haeun Kang
μ΄λ¬ν μ κ·Όμ νλ‘νΌν°λ ν΄λμ€μμλ λ€μκ³Ό κ°μ΄ μ¬μ©λ μ μλ€.
class Person = {
constructor(first, last) {
this.firstName: first,
this.lastName: last,
}
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
set fullName(name) {
[this.firstName, this.lastName] = name.split(' ');
}
}
const me = new Person('Haeun', 'Kang');
me // {firstName: 'Haeun', lastName: 'Kang'}
me.fullName // 'Haeun Kang'
me.fullName = 'Haeun Kim'
me.fullName // 'Haeun Kim'
me // {firstName: 'Haeun', lastName: 'Kim'}
μμλ λμλ€μνΌ, μ κ·Όμ νλ‘νΌν°λ μ체μ μΌλ‘ κ°μ κ°μ§ μλλ€. νμ§λ§ μ κ·Όμ ν¨μ (getter, setter ν¨μ) λ‘ κ΅¬μ±λμ΄, λ€λ₯Έ λ°μ΄ν° νλ‘νΌν°μ κ°μ μ½κ±°λ μ μ₯νλ€. μ΄λ μ κ·Όμ ν¨μμ μ΄λ¦μ μΈμ€ν΄μ€ νλ‘νΌν°μ²λΌ μ¬μ©λμ΄, ν¨μμ²λΌ νΈμΆλλ κ²μ΄ μλλΌ νλ‘νΌν°μ²λΌ μ°Έμ‘°νλ νμμΌλ‘ μ¬μ©λλ€.
π‘ getter ν¨μ
- get ν€μλλ₯Ό μ¬μ©ν΄ μ μ
- νλ‘νΌν° κ°μ μ κ·Όνμ¬ κ°μ λν΄ λ¬΄μΈκ° μνν λ μ¬μ©
- λ°λμ λ°νκ° μμ΄μΌ ν¨
π‘ setter ν¨μ
- set ν€μλλ₯Ό μ¬μ©ν΄ μ μ
- νλ‘νΌν° κ°μ ν λΉν λ μ¬μ©
- λ°λμ 맀κ°λ³μ μμ΄μΌ ν¨
β¨ κ²°λ‘
ν΄λμ€λ₯Ό μ¬μ©νκΈ°μ μμ ν΄λμ€μ μΈμ€ν΄μ€μ κ΄κ³, κ·Έλ¦¬κ³ νλ‘ν νμ 체μΈμ μ΄ν΄νλ κ²μ μκ°λ³΄λ€ μ€μνλ€. μ΄λ€ λ©μλλ₯Ό μ μνλλ° λ©μλ μ νμ λ°λΌ λ€λ₯Έ νλ‘ν νμ 체μΈμ μν΄, μ¬μ©νμ§ λͺ»ν μ μκΈ°λ νκΈ° λλ¬Έμ΄λ€. λν ν΄λμ€μ νλ‘νΌν°μ λ©μλλ₯Ό μ μ΄ν΄ν΄ λμ΄μΌ μ°¨ν κ°μ²΄μ§ν₯μ κ°λ μ κΉκ² λ€μ΄κ°κ±°λ, μμ‘΄μ± μ£Όμ κ³Ό κ°μ μ€μ κ°λ μ λ€λ£° λ μ‘°κΈ λ λΉ λ₯΄κ² μ§μμ μ΅λν μ μλ€.
β¨ μ°Έκ³ μλ£
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive (μν€λΆμ€)
- Built-in Object | Poiema Web
- JAVA μ κ·Όμ νμ