[TIL] JavaScript : Object

AcidΒ·2021λ…„ 8μ›” 13일
1

πŸ“’ JavaScript

λͺ©λ‘ 보기
6/8
post-thumbnail

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체와 ꡬ성 μš”μ†Œ, μ ‘κ·Ό 방법 λ“±μ˜ λ‚΄μš©μ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 😊

πŸ‘₯ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체

ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 객체(Object)λŠ” 자주 μ‚¬μš©λ˜κ³  μ–ΈκΈ‰λ˜λŠ” μš”μ†Œ 쀑 ν•˜λ‚˜μΈλ°, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ” κ΄€λ ¨λœ ν•¨μˆ˜μ™€ λ°μ΄ν„°μ˜ μ§‘ν•©μœΌλ‘œ μ •μ˜ν•  수 μžˆλ‹€.

μ—¬κΈ°μ„œ μƒκ°λ‚˜λŠ” κ°€μž₯ κ°€κΉŒμš΄ 기얡은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)이 μ•„λ‹κΉŒ μ‹Άλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 언어이며 슀크립트 언어에 μ†ν•œλ‹€.

πŸ’‘ 절차적 ν”„λ‘œκ·Έλž˜λ°(Procedural Programming)κ³Ό 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)

ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 무엇을 지ν–₯ν•œλ‹€λŠ” 것은 νŠΉμ • 방식에 λŒ€ν•œ νŒ¨λŸ¬λ‹€μž„μ΄λΌκ³  해석할 수 μžˆλ‹€. 그리고 μ•žμœΌλ‘œ μ„€λͺ…ν•  두 가지 방식이 λ°˜λŒ€λ˜λŠ” 방식이 μ•„λ‹˜μ„ 인지해야 ν•œλ‹€.

μ•žμ—μ„œ μ˜λ―Έν•œ 지ν–₯의 의미둜 ν•΄μ„ν•˜λ©΄, 절차적 ν”„λ‘œκ·Έλž˜λ°(Procedural Programming)을 절차 지ν–₯적인 방법(순차적인 λͺ…λ Ή μˆ˜ν–‰)으둜 ν”„λ‘œκ·Έλž˜λ°μ„ ν•œλ‹€κ³  생각할 수 μžˆμ§€λ§Œ, 이 뢀뢄은 λ²ˆμ—­μƒμ˜ 였λ₯˜λ‘œ 닀뀄진닀. μ ˆμ°¨μ μ΄μ§€ μ•Šμ€ ν”„λ‘œκ·Έλž˜λ°μ„ 생각할 수 μ—†λŠ” λΆ€λΆ„μ—μ„œ 이λ₯Ό μ•Œ 수 μžˆλ‹€.

μ •ν™•νžˆ λ§ν•˜μžλ©΄, 절차적 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 절차적(procedural)μ΄λΌλŠ” λœ»μ€ ν”„λ‘œμ‹œμ €μ— λŒ€ν•œ 이야기닀. ν”„λ‘œμ‹œμ €μ— λŒ€ν•΄ κ°„λ‹¨νžˆ μ΄ν•΄ν•˜λ©΄ νŠΉμ • 업무λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ 과정라고 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€.

그런 μ˜λ―Έμ—μ„œ 절차적 ν”„λ‘œκ·Έλž˜λ°μ€ νŠΉμ • 업무 μˆ˜ν–‰μ„ μœ„ν•œ 과정에 따라 μ°¨λ‘€λŒ€λ‘œ μ½”λ“œλ₯Ό κΈ°μˆ ν•˜λŠ” 방식이라고 이해할 수 μžˆλ‹€. 그렇기에 Top-Down λ°©μ‹μœΌλ‘œ μ„€κ³„λ˜κ³ , μ»΄ν“¨ν„°μ˜ μ²˜λ¦¬κ΅¬μ‘°μ™€ μœ μ‚¬ν•˜μ—¬ λΉ λ₯Έ 처리 속도λ₯Ό κ°–κ³  μžˆλ‹€. λŒ€ν‘œμ μΈ μ–Έμ–΄λ‘œλŠ” Cκ°€ 이에 ν•΄λ‹Ήν•œλ‹€.

κ³Όκ±°μ—λŠ” 비ꡐ적 큰 규λͺ¨μ˜ ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄κ°€ ν•„μš”ν•˜μ§€ μ•Šμ•„ 절차적 μ–Έμ–΄κ°€ λŒ€ν‘œμ μΈ μ–Έμ–΄μ˜€μ§€λ§Œ, μ½”λ“œμ˜ 규λͺ¨κ°€ 컀지고 λ³΅μž‘ν•΄μ Έ λ™μž‘μ„ μ΄ν•΄ν•˜κΈ°μ— μ–΄λ €μš΄ μƒνƒœμ˜ 'μŠ€νŒŒκ²Œν‹° μ½”λ“œ'κ°€ λ˜μ–΄λ²„λ¦¬λŠ” 단점이 생겨났닀. μ΄λŸ¬ν•œ 문제 극볡을 μœ„ν•΄ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ λ“±μž₯ν•œ 것이닀.

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming)은 객체λ₯Ό μƒμ„±ν•˜κ³ , ν•΄λ‹Ή 객체 λ‹¨μœ„μ˜ μƒν˜Έ μž‘μš©μ„ μ„œμˆ ν•˜λŠ” 방식을 μ˜λ―Έν•œλ‹€. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ 처리 속도가 μƒλŒ€μ μœΌλ‘œ λŠλ¦¬μ§€λ§Œ, μΊ‘μŠν™”(Encapsulation)와 상속(inheritance), λ‹€ν˜•μ„±(polymorphism)μ΄λΌλŠ” ν‚€μ›Œλ“œμ™€ μž₯점을 μ„€λͺ…ν•  수 μžˆλ‹€.

μš°μ„ , μΊ‘μŠν™”(Encapsulation)λŠ” 객체의 속성과 ν–‰μœ„λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³ , μ‹€μ œ κ΅¬ν˜„ λ‚΄μš©μ„ μ€λ‹‰ν•œλ‹€λŠ” 의미λ₯Ό κ°–λŠ”λ‹€. μ—¬κΈ°μ„œ 은닉은 μ ‘κ·Ό μ œν•œμžλ₯Ό 톡해 μ΄λ£¨μ–΄μ§ˆ 수 μžˆλ‹€. 그리고 상속(inheritance)은 μƒμœ„ 객체와 ν•˜μœ„ 객체의 κ΄€κ³„μ—μ„œ ν•˜μœ„ 객체가 μƒμœ„ 객체의 ν•„λ“œ 및 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 있게 λ¬Όλ €μ€€λ‹€λŠ” μ˜λ―Έμ΄λ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, λ‹€ν˜•μ„±(polymorphism)은 ν•˜λ‚˜μ˜ λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… 등이 상황에 따라 λ‹€λ₯Έ 의미둜 해석될 수 μžˆλ‹€λŠ” 것이닀. μ΄λŠ” μ˜€λ²„λΌμ΄λ”©(Overriding)κ³Ό μ˜€λ²„λ‘œλ”©(Overloading)이 κ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 이 쀑 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ— ν•΄λ‹Ήν•œλ‹€.

πŸ”– 좜처

절차적 ν”„λ‘œκ·Έλž˜λ° : λ§ˆλ…€ν‘œμ •λ‹˜ Tistory : 1. 절차적 ν”„λ‘œκ·Έλž˜λ° : Procedural Programming
절차적 ν”„λ‘œκ·Έλž˜λ° & 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : Young Developer's Note : 절차적 ν”„λ‘œκ·Έλž˜λ°κ³Ό 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
절차적 ν”„λ‘œκ·Έλž˜λ° & 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : μ½”λ”©κ³Ό ν”„λ‘œκ·Έλž˜λ° κ·Έ 사이 μ–΄λ”˜κ°€... : 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP) 절차적 ν”„λ‘œκ·Έλž˜λ°(PP)
절차적 ν”„λ‘œκ·Έλž˜λ° & 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : Stranger's Lab : 객체지ν–₯(OOP)κ³Ό 절차적 ν”„λ‘œκ·Έλž˜λ°(PP)
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : κΈ°λ³ΈκΈ°λ₯Ό μŒ“λŠ” μ •μ•„λ§ˆμΆ”μ–΄ μ½”λ”©λΈ”λ‘œκ·Έ : 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ λ­”κ°€μš”? (꼬리에 꼬리λ₯Ό λ¬΄λŠ” 질문 1μˆœμœ„, κ·Έλ†ˆμ˜ OOP)
ν”„λ‘œμ‹œμ €(Procedure) : μ• μ†‘μ΄μ˜ 코딩이야기 : [ Oracle ] ν”„λ‘œμ‹œμ €μ™€ ν•¨μˆ˜μ˜ 차이

πŸ’‘ 슀크립트 μ–Έμ–΄?(Script Language)

슀크립트 μ–Έμ–΄(Script Language)λž€ μ‘μš© μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ œμ–΄ν•˜λŠ” 컴퓨터 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό κ°€λ₯΄ν‚¨λ‹€. μ΄λŠ” 이미 μ‘΄μž¬ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•œ μ–Έμ–΄λΌλŠ” λœ»μ΄λ‹€.

슀크립트 언어에 λŒ€ν•΄ 찾닀보면 μ—°κ΄€λœ λ‚΄μš©μœΌλ‘œ 컴파일 언어와 인터프리터 언어에 λŒ€ν•œ λ‚΄μš©μ„ 많이 찾게 λœλ‹€.

컴파일 언어와 인터프리터 μ–Έμ–΄λ₯Ό κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•˜μžλ©΄, μ»΄νŒŒμΌλŸ¬λŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό λͺ¨λ‘ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•œ λ’€ μ‹€ν–‰ν•˜λŠ” μ–Έμ–΄λ₯Ό μ˜λ―Έν•˜κ³ , μΈν„°ν”„λ¦¬ν„°λŠ” μ†ŒμŠ€μ½”λ“œ ν•œ 쀄씩 ν•΄μ„ν•˜μ—¬ λ°”λ‘œ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” μ–Έμ–΄λ₯Ό μ˜λ―Έν•œλ‹€.

μ •μ˜μ— λ”°λ₯΄λ©΄, 슀크립트 μ–Έμ–΄λŠ” 인터프리터 언어에 ν•΄λ‹Ήν•˜λŠ” κ²ƒμœΌλ‘œ μ΄ν•΄λ˜μ§€λ§Œ, λͺ¨λ“  슀크립트 μ–Έμ–΄λŠ” 인터프리터 언어에 ν•΄λ‹Ήν•˜λŠ”μ§€μ— λŒ€ν•œ μ§ˆλ¬Έμ„ 보면 컴파일 λ˜μ§€λ§Œ, μŠ€ν¬λ¦½νŠΈλ‘œλ„ μ‹€ν–‰ κ°€λŠ₯ν•œ 뢀뢄도 μžˆλ‹€κ³  μƒκ°λœλ‹€.

πŸ”– 좜처

슀크립트 μ–Έμ–΄ : μœ„ν‚€λ°±κ³Ό
슀크립트 μ–Έμ–΄ & 인터프리터 & 컴파일러 : λŸ°μ½”λ”© : [μžλ°”μŠ€ν¬λ¦½νŠΈ] μŠ€ν¬λ¦½νŠΈμ–Έμ–΄ / 인터프리터와 컴파일러 차이점
슀크립트 μ–Έμ–΄ & 컴파일 μ–Έμ–΄ : damiano1027λ‹˜ 벨둜그 : [CS] 슀크립트 μ–Έμ–΄ vs 컴파일 μ–Έμ–΄


μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 언어에 μ†ν•˜κΈ°μ— 객체에 λŒ€ν•œ μ΄ν•΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ κ³Όμ •μœΌλ‘œ μƒκ°λœλ‹€.

이전 μžλ°”μŠ€ν¬λ¦½νŠΈ κΈ°μ΄ˆμ— λŒ€ν•œ ν¬μŠ€νŒ…μ—μ„œ κΈ°λ³Έ νƒ€μž…μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 데이터가 λͺ¨λ‘ 객체에 ν•΄λ‹Ήν•œλ‹€.

객체의 ν”„λ‘œνΌν‹°(Property)

κ°μ²΄λŠ” ν”„λ‘œνΌν‹°μ˜ 집합이닀.

ν”„λ‘œνΌν‹°(Property)λž€ 객체λ₯Ό μ΄λ£¨λŠ” λ‹¨μœ„μ΄λ‹€. ν”„λ‘œνΌν‹°λŠ” ν‚€(key)와 κ°’(value)둜 κ΅¬μ„±λ˜μ–΄ 있고, ν”„λ‘œνΌν‹° ν‚€λ₯Ό 톡해 각 ν”„λ‘œνΌν‹°λ₯Ό 식별할 수 μžˆλ‹€.

μœ„ λ‚΄μš©λ“€μ„ μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄μž.

let obj = {
  firstName : 'Acid',
  lastName : 'Park',
  age : 24
}


μœ„ μ˜ˆμ‹œλŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ” 객체 λ¦¬ν„°λŸ΄ 문법이닀. μœ„μ™€ 같이 μ€‘κ΄„ν˜Έ({})λ₯Ό μ—΄κ³  μ•ˆμ— 킀와 값을 콜둠(:)을 κΈ°μ€€μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ μž‘μ„±ν•˜λ©°, ν”„λ‘œνΌν‹° κ°„μ˜ ꡬ뢄은 콀마(,)λ₯Ό 톡해 κ΅¬λΆ„ν•œλ‹€.

μœ„ μ˜ˆμ‹œμ—μ„œ ν‚€λŠ” firstName κ³Ό lastName, age κ°€ 이에 ν•΄λ‹Ήν•˜κ³ , 값은 'Acid', 'Park' 그리고 24 등이 이에 ν•΄λ‹Ήν•œλ‹€.

ν”„λ‘œνΌν‹° κ°’μ—λŠ” λͺ¨λ“  μžλ£Œν˜•μ΄ λ“€μ–΄μ˜¬ 수 있고 λ°°μ—΄κ³Ό ν•¨μˆ˜λ„ κ°€λŠ₯ν•œλ°, 값이 ν•¨μˆ˜μΌ 경우 이λ₯Ό λ©”μ†Œλ“œ(Method)라고 μ •μ˜ν•œλ‹€.

πŸ’‘ λ©”μ†Œλ“œ(Method)와 ν•¨μˆ˜(Function)의 차이

ν•¨μˆ˜μ™€ λ©”μ†Œλ“œμ˜ κ΄€κ³„λŠ” ν•¨μˆ˜κ°€ 더 포괄적인 의미λ₯Ό κ°–λŠ”λ‹€κ³  이해할 수 μžˆλ‹€.

λ‘˜μ˜ 차이λ₯Ό κ°„λ‹¨νžˆ μ„€λͺ…ν•˜λ©΄, ν•¨μˆ˜μ˜ κ²½μš°μ—λŠ” 독립적이고, λ©”μ†Œλ“œμ˜ 경우 객체에 쒅속적이닀.

이λ₯Ό κ°„λ‹¨ν•œ μ˜ˆμ‹œλ‘œ μ΄ν•΄ν•΄λ³΄μž.

// ν•¨μˆ˜
function func() {
  console.log('Hello, World!')
}
// λ©”μ†Œλ“œ
let obj = {
  method : function () {
    console.log('Hello, World!')
  }
}
func() // ν•¨μˆ˜ 호좜
obj.method() // λ©”μ†Œλ“œ 호좜


μœ„ 두 가지 κ²½μš°λŠ” 같은 값을 좜λ ₯ν•œλ‹€. ν•˜μ§€λ§Œ, ν•¨μˆ˜λŠ” λ…λ¦½μ μœΌλ‘œ μžμ‹ μ˜ ν•¨μˆ˜λͺ…(func())만으둜 싀행이 λ˜μ§€λ§Œ, 객체(obj)에 μ’…μ†λœ λ©”μ†Œλ“œ(method)의 경우 obj λ₯Ό 톡해 μ‹€ν–‰λœλ‹€.

μ΄λŸ¬ν•œ 뢀뢄이 λ©”μ†Œλ“œκ°€ 객체에 μ’…μ†λœλ‹€λŠ” 점을 μ˜λ―Έν•œλ‹€.

πŸ”– 좜처

λ©”μ†Œλ“œμ™€ ν•¨μˆ˜ : 지속가λŠ₯ν•œ 개발 λΈ”λ‘œκ·Έ : λ©”μ†Œλ“œμ™€ ν•¨μˆ˜ (Method and Function)의 차이점


객체λ₯Ό κ΅¬μ„±ν•˜λŠ” ν”„λ‘œνΌν‹°λŠ” λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.

ν”„λ‘œνΌν‹° 접근법

ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ” 것은 점 ν‘œκΈ°λ²•(Dot notation)κ³Ό κ΄„ν˜Έ ν‘œκΈ°λ²•(Bracket notation)을 톡해 κ°€λŠ₯ν•˜λ‹€.

두 가지 방식을 톡해, λ‹€μŒκ³Ό 같이 ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•  수 μžˆλ‹€.

let obj = {
  firstName : 'Acid',
  lastName : 'Park',
  age : 24
}

console.log(obj.firstName) // 점 ν‘œκΈ°λ²•
console.log(obj['firstName']) // κ΄„ν˜Έ ν‘œκΈ°λ²•


μœ„ 두 가지 방식은 같은 κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€. ν•˜μ§€λ§Œ ν”„λ‘œνΌν‹° μ‹λ³„μžμ—μ„œ 차이λ₯Ό 보인닀.

점 ν‘œκΈ°λ²•μ˜ 경우 μ•ŒνŒŒλ²³μœΌλ‘œ μ‹œμž‘ν•˜λ©°, 곡백을 ν¬ν•¨ν•˜μ§€ λͺ»ν•˜κ³ , μˆ«μžλ‘œλ„ μ‹œμž‘ν•  수 μ—†λ‹€. ν•˜μ§€λ§Œ κ΄„ν˜Έ ν‘œκΈ°λ²•μ˜ 경우 λ¬Έμžμ—΄ ν˜•νƒœλ₯Ό 가지며, 곡백을 포함할 수 있고, λ³€μˆ˜ λ˜ν•œ λ¬Έμžμ—΄λ‘œ ν•΄μ„λœλ‹€λ©΄ μ‚¬μš©ν•  수 μžˆλ‹€.

점 ν‘œκΈ°λ²•μ΄ 비ꡐ적 읽기 쉽고, μž‘μ„±ν•˜κΈ° 더 νŽΈν•˜κΈ° λ•Œλ¬Έμ— 자주 μ‚¬μš©ν•˜μ§€λ§Œ, νŠΉμˆ˜ν•œ κ²½μš°μ—λŠ” κ΄„ν˜Έ ν‘œκΈ°λ²•μ΄ 더 μš©μ΄ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄, 쑰건에 따라 λ‹€λ₯Έ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€.

let obj = {
  name1 : 'David',
  name2 : 'Robert'
}

function func(n) {
  let result = n === 0 ? 'name1' : 'name2'
  return result
}

console.log(obj[func(1)])


ν•΄λ‹Ή 경우 'Robert' λΌλŠ” 값이 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆλ‹€. μ΄λ ‡κ²Œ κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ 인자 값에 따라 μœ λ™μ μœΌλ‘œ λ‹€λ₯Έ ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•  수 μžˆλ‹€.

ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•˜λŠ” 방법을 μ•Œμ•„λ³΄μ•˜μœΌλ‹ˆ, μ΄μ–΄μ„œ ν”„λ‘œνΌν‹° 좔가와 λ³€κ²½ 및 μ œκ±°μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.

ν”„λ‘œνΌν‹° μΆ”κ°€, λ³€κ²½, μ‚­μ œ

ν”„λ‘œνΌν‹°μ˜ 좔가와 변경은 μœ„ 두 가지 접근법을 톡해 κ°€λŠ₯ν•˜λ‹€.

let obj = {
  name1 : 'David',
  name2 : 'Robert'
}

obj.name3 = 'Tom' // 점 ν‘œκΈ°λ²• μΆ”κ°€
obj['name4'] = 'Duke' // κ΄„ν˜Έ ν‘œκΈ°λ²• μΆ”κ°€

console.log(obj.name3, obj.name4) // output : 'Tom' 'Duke'

obj.name3 = 'Kim' // 점 ν‘œκΈ°λ²• μˆ˜μ •
obj['name4'] = 'Park' // κ΄„ν˜Έ ν‘œκΈ°λ²• μˆ˜μ •

console.log(obj.name3, obj.name4) // output : 'Kim' 'Park'


μœ„μ™€ 같이 점 ν‘œκΈ°λ²•κ³Ό κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ ν™œμš©ν•˜μ—¬ ν”„λ‘œνΌν‹°μ˜ 좔가와 변경이 κ°€λŠ₯ν•˜λ‹€.

κ΄„ν˜Έ ν‘œκΈ°λ²•μ˜ κ²½μš°μ—λŠ” λ™μ μœΌλ‘œ ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

const obj = {

};

['red', 'green', 'blue'].forEach((color) => {
  obj[color] = color.substring(0, 1);
});

console.log(obj)
/* output : [object Object] {
  blue: "b",
  green: "g",
  red: "r"
} */


ν•΄λ‹Ή μ˜ˆμ‹œμ˜ 경우 λ°°μ—΄ λ‚΄ μš”μ†Œλ“€μ„ forEach() λ©”μ„œλ“œλ₯Ό 톡해 μˆœν™˜ν•˜λ©΄μ„œ, λ°°μ—΄ λ‚΄ μš”μ†Œλ“€μ„ 각각 ν”„λ‘œνΌν‹° ν‚€λ‘œ κ°€μ Έμ˜€κ³ , substring() λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ μš”μ†Œμ˜ μ•ž κΈ€μžλ§Œ μΆ”μΆœν•˜μ—¬ ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ €μž₯ν•˜λŠ” μ˜ˆμ‹œμ΄λ‹€.

μœ„μ™€ 같이 νŒŒλΌλ―Έν„° 값을 ν™œμš©ν•˜μ—¬ λ™μ μœΌλ‘œ ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

ν”„λ‘œνΌν‹°μ˜ μ‚­μ œλŠ” λ°°μ—΄ μš”μ†Œμ˜ μ‚­μ œμ™€ 같이 delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€λŠ₯ν•˜λ‹€.

let obj = {
  name1 : 'David',
  name2 : 'Robert'
}

delete obj.name1

console.log(obj) // output : [object Object] { name2: "Robert" }


μœ„ μ˜ˆμ‹œμ™€ 같이 delete μ—°μ‚°μžλ₯Ό 톡해 ν”„λ‘œνΌν‹°μ˜ μ‚­μ œλ₯Ό 진행할 수 μžˆλ‹€.

객체와 for...in λ¬Έ

μ•žμ˜ λ°˜λ³΅λ¬Έμ— λŒ€ν•œ ν¬μŠ€νŒ…μ—μ„œλ„ 닀룬 λ‚΄μš©μ΄μ§€λ§Œ 객체에 λŒ€ν•΄ μ•Œμ•˜μœΌλ‹ˆ, λ‹€μ‹œ ν•œ 번 짚고 λ„˜μ–΄κ°€μž.

for...in 문은 객체 λ‚΄λΆ€μ—μ„œ ν”„λ‘œνΌν‹° ν‚€λ₯Ό λŒ€μƒμœΌλ‘œ μˆœν™˜ν•œλ‹€.

let obj = {
    a: 1,
    b: 2,
    c: 3
};
for (let i in obj) { // i = key κ°’
    console.log(i + ': ' +obj[i]);
};
// output : a: 1, b: 2, c: 3


ν•΄λ‹Ή μ˜ˆμ‹œμ—μ„œ i λŠ” 객체 obj λ‚΄λΆ€μ˜ ν”„λ‘œνΌν‹° 킀인 a, b, c 에 ν•΄λ‹Ήν•œλ‹€. 이처럼 ν”„λ‘œνΌν‹° ν‚€λ‘œ μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, κ°’(value)에 μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 μ—†λ‹€. κ·Έλž˜μ„œ μ˜ˆμ‹œμ™€ 같이 obj[i] 와 같은 ν˜•μ‹μœΌλ‘œ 값에도 μ ‘κ·Όν•  수 μžˆλ‹€.

객체와 λ©”μ†Œλ“œ(Method)

객체의 μ €μž₯된 값이, 즉 ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜μΌ λ•Œ, 이λ₯Ό λ©”μ†Œλ“œ(method)라고 ν•œλ‹€. console.log() 의 κ²½μš°μ—λ„ λ©”μ†Œλ“œμ˜ ν˜•νƒœλ₯Ό κ°–κ³  μžˆλŠ”λ°, μ—¬κΈ°μ„œ console μ΄λΌλŠ” 객체의 λ©”μ†Œλ“œμΈ log() 의 ν”„λ‘œνΌν‹° 값이 ν•¨μˆ˜λΌλŠ” 것을 μ•Œ 수 μžˆλ‹€.

let obj = {
  sayHello : () => {
    console.log('Hello')
  }
}

obj.sayHello() // output : 'Hello'


μœ„ μ˜ˆμ‹œλŠ” console 에 Hello λΌλŠ” 값을 좜λ ₯ν•˜λŠ” obj 의 λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•œ 것이닀. ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 경우 객체 obj μ—λ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

λ˜ν•œ, λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜λ©΄μ„œ 객체 λ‚΄λΆ€μ˜ ν”„λ‘œνΌν‹° 값을 ν™œμš©ν•  수 μžˆλŠ”λ°, 이와 κ΄€λ ¨λ˜μ–΄ this에 λŒ€ν•œ κ°œλ…μ΄ μžˆλ‹€.

λ©”μ†Œλ“œμ™€ this

λ©”μ„œλ“œλ₯Ό 톡해 객체 λ‚΄λΆ€ 정보에 μ ‘κ·Όν•  수 μžˆμ„ λ•Œ, λ©”μ†Œλ“œλŠ” 제 역할을 ν•  수 μžˆλ‹€. 이와 κ΄€λ ¨λ˜μ–΄ thisλΌλŠ” ν‚€μ›Œλ“œκ°€ μžˆλ‹€. this λŠ” ν•΄λ‹Ή 객체λ₯Ό 가리킀며, μ΄λ•Œ ν•΄λ‹Ή κ°μ²΄λŠ” λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λœ 객체λ₯Ό μ˜λ―Έν•œλ‹€.

λ‹€μŒμ˜ μ˜ˆμ‹œλ₯Ό λ³΄λ©΄μ„œ μ•Œμ•„λ³΄μž.

let user = { name: "John" };
let admin = { name: "Admin" };

function sayHi() {
  alert( this.name );
}

// λ³„κ°œμ˜ κ°μ²΄μ—μ„œ λ™μΌν•œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•¨
user.f = sayHi;
admin.f = sayHi;

// 'this'λŠ” '점(.) μ•žμ˜' 객체λ₯Ό μ°Έμ‘°ν•˜κΈ° λ•Œλ¬Έμ—
// this 값이 달라짐
user.f(); // John  (this == user)
admin.f(); // Admin  (this == admin)


ν•΄λ‹Ή μ˜ˆμ‹œλ₯Ό 보면 λ™μΌν•œ sayHi() λΌλŠ” ν•¨μˆ˜λ₯Ό 각각의 객체 user 와 admin 에 λ©”μ†Œλ“œλ‘œ μΆ”κ°€ν•œ 뒀에 이λ₯Ό μ‹€ν–‰ν•˜λ‹ˆ, κ²°κ³Ό 값이 John κ³Ό Admin 으둜 λ‹€λ₯΄κ²Œ λ‚˜νƒ€λ‚¬λ‹€.

이λ₯Ό 톡해, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ this 값은 λŸ°νƒ€μž„μ— μ˜ν•΄ κ²°μ •λœλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ this κ°€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ μ§€λ‚œ ν•¨μˆ˜ ν¬μŠ€νŒ…μ—μ„œ λ‹€λ€˜μœΌλ‹ˆ, 일반 ν•¨μˆ˜μ™€ ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ this 차이, scope 의 ꡬ뢄에 λŒ€ν•΄ λ„˜μ–΄κ°€ λ‹€μ‹œ μ•Œμ•„λ³΄μž! 😊

πŸ”– 좜처

λ©”μ†Œλ“œ : νƒœκΈ°μ˜ 개발 Blog : μžλ°”μŠ€ν¬λ¦½νŠΈ - 객체 λ©”μ†Œλ“œ 정리
λ©”μ†Œλ“œμ™€ this : javascript.info : λ©”μ„œλ“œμ™€ this

πŸ”– 전체적인 μ°Έκ³ 

MDN Web Docs : JavaScript 객체 기본

profile
μ΄μœ μ— μ§‘μ°©ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ§€λ§μƒμž…λ‹ˆλ‹€ 🧐

0개의 λŒ“κΈ€