πŸ’½κ°μ²΄λž€ 무엇인가?

Seunggyu JungΒ·2023λ…„ 5μ›” 2일
0
post-thumbnail

λͺ©μ°¨

  1. 주제 μ„ μ • 이유

  2. κ°μ²΄λž€ 무엇인가?
    2-1). 객체의 μ •μ˜ 및 ꡬ쑰
    2-2). 참쑰의 μ •μ˜

  3. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
    3-1). 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ νŠΉμ§•
    3-2). 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ μž₯점


    λ²ˆμ™Έ). ν•¨κ»˜ μ•Œμ•„λ‘λ©΄ 쒋은 μš©μ–΄

1. 주제 μ„ μ • 이유:

μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 객체 지ν–₯ μ–Έμ–΄λΌλŠ” 것은 λ‹€λ“€ μ•Œκ³  μžˆμ„ 것이닀. 그럼 μ—¬κΈ°μ„œ λ§ν•˜λŠ” κ°μ²΄λž€ κ³Όμ—° 무엇인가?
μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” κ°μ²΄λŠ” 킀와 κ°’μœΌλ‘œ 이루어진 μ€‘κ΄„ν˜Έ 라고 μ•Œκ³ μžˆλŠ”λ°, 이에 λŒ€ν•΄ μžμ„Ένžˆ νŒŒμ•…ν•˜μ—¬ μˆ˜μ—…μ„ ν•˜κ±°λ‚˜ ν˜‘μ—…μ„ ν•  λ•Œ, 보닀 더 μ›ν™œν•˜κ²Œ μ†Œν†΅ν•  수 μžˆλ„λ‘ λ•κ³ μž 쑰사해봀닀.


2. 객체

2-1). 객체의 μ •μ˜ 및 ꡬ쑰

  • 객체 : ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ°μ΄ν„°λ‚˜ ν•¨μˆ˜λ₯Ό λ‹΄μ•„λ‚΄λŠ” μ°Έμ‘° μžλ£Œν˜•μœΌλ‘œ, ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ‘œ 이루어져 μžˆλ‹€.

  • ν”„λ‘œνΌν‹° : 객체의 μƒνƒœ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’μœΌλ‘œ, ν‚€(key)와 κ°’(value)둜 이루어져 μžˆλ‹€. ν”„λ‘œνΌν‹°μ™€ μœ μ‚¬ν•œ μš©μ–΄λ‘œ, 속성(attribute)이 μžˆλ‹€.

  • λ©”μ„œλ“œ : ν”„λ‘œνΌν‹° 쀑, 값이 ν•¨μˆ˜μΈ 경우, λ‹€λ₯Έ ν•¨μˆ˜μ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή ν”„λ‘œνΌν‹°λ₯Ό λ©”μ„œλ“œλΌκ³  λΆ€λ₯Έλ‹€.

2-2). 참쑰의 μ •μ˜ 및 μ˜ˆμ‹œ

μ°Έμ‘° : 값이 λ‹΄κΈ΄ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€μ Έμ˜¨λ‹€λŠ” 것을 의미, κ²°κ΅­ κ°μ²΄λŠ” μ‹λ³„μž(λ³€μˆ˜)μ—κ²Œ 값이 μ•„λ‹Œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ§Œ μ•Œλ €μ£ΌκΈ°μ— μ°Έμ‘° μžλ£Œν˜• 이라고 ν•œλ‹€.
β€»κ°μ²΄μ˜ μ£Όμ†Œλ₯Ό λΉ„κ΅ν•˜λ©΄ λ‹€λ₯΄μ§€λ§Œ, 객체의 속성(ν”„λ‘œνΌν‹°)에 μ ‘κ·Όν•˜μ—¬ 값을 λΉ„κ΅ν•˜λ©΄ κ°™λ‹€!

// μ˜ˆμ‹œ 1. 객체의 μ£Όμ†Œ 비ꡐ와 속성 κ°’ 비ꡐ
let person1 = { age: 27,
	      name : Daniel};

let person2 = { age: 27,
	      name : Daniel};


person1 === person2 // 객체 person1κ³Ό person2의 μ£Όμ†ŒλŠ” λ‹€λ₯΄κΈ°μ— false

person1.age === person2.age // 객체 person1κ³Ό person2의 ageλŠ” 27둜 같기에 true

3. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : λ°μ΄ν„°λ‚˜ ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 객체 λ‹¨μœ„λ‘œ 묢은 λ…λ¦½λœ κ°μ²΄κ°„μ˜ μƒν˜Έμž‘μš©μ„ ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방식

  • 객체 지ν–₯ ν”„λ‘œκ·Έλž¨ μ–Έμ–΄ : C++, Java, JavaScript...

Q. λ„λŒ€μ²΄ μ™œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것인가?


3-1). 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ νŠΉμ§•

1). 상속

  • μ–΄λ–€ 객체의 ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ 객체가 κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” 것
  • 상속을 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ 높아지며, 클래슀 κ°„μ˜ 계측ꡬ쑰λ₯Ό λ§Œλ“€μ–΄ κ΄€λ¦¬ν•˜κΈ° μ‰¬μ›Œμ§

2). μΊ‘μŠν™”

  • μ€‘κ΄„ν˜Έ λΌλŠ” λ²”μœ„ μ•ˆμ—, 객체의 킀와 값을 μ§μ§€μ–΄μ„œ 타인이 ν•¨λΆ€λ‘œ 객체의 값을 μˆ˜μ •ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” 것을 λ°©μ§€ν•œλ‹€.

3). λ‹€ν˜•ν™”

  • μ—¬λŸ¬ 객체가 ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄λ„, μ‹€ν–‰ κ²°κ³Όκ°€ κ°μ²΄λ§ˆλ‹€ λ‹€λ₯΄κ²Œ λ‚˜νƒ€λ‚˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.
  • ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ₯Ό λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©μ„ 톡해 λ‹€μ–‘ν•œ κ²°κ³Όλ₯Ό λ§Œλ“€ 수 μžˆμ–΄, μ½”λ“œμ˜ μž¬μ‚¬μš©λ₯ μ„ 높인닀.

β€» λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”© : 상속 κ΄€κ³„μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것

class Animal {  // λΆ€λͺ¨ 클래슀
  constructor(name) {
    this.name = name;
  }

  speak() {  // 처음 μ„ μ–Έν•œ λ©”μ„œλ“œ
    console.log(`${this.name} makes a noise.`);
  }
}

class Dog extends Animal {  // μžμ‹ 클래슀
  speak() {  // 같은 λͺ…μ˜ 클래슀λ₯Ό μž¬μ •μ˜ -> λ‹€ν˜•ν™”
    console.log(`${this.name} barks.`);
  }
}

class Cat extends Animal {
  speak() { // 같은 λͺ…μ˜ 클래슀λ₯Ό μž¬μ •μ˜ -> λ‹€ν˜•ν™”
    console.log(`${this.name} meows.`);
  }
}

const animals = [new Dog('Rufus'), new Cat('Mittens')];

animals.forEach(animal => {
  animal.speak();
});

4). 좔상화

  • 객체의 핡심적인 νŠΉμ§•μ„ κ°•μ‘°ν•˜κ³ , λΆˆν•„μš”ν•œ 뢀뢄을 μƒλž΅ν•˜λŠ” 것
  • 객체λ₯Ό λ‹¨μˆœν™”μ‹œν‚€κ³ , 객체가 λ‚΄λΆ€μ μœΌλ‘œ μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€ 숨기기 λ•Œλ¬Έμ— μ½”λ“œμ˜ 가독성과 μ•ˆμ •μ„±μ΄ ν–₯상

3-2). 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ μž₯점

1). μž¬μ‚¬μš©μ„±

  • 객체간에 계측이 λΆ€μ—¬λ˜λ©΄ 상속을 ν•  수 있고, κ·Έ κ³Όμ •μ—μ„œ κ³΅ν†΅λœ μ½”λ“œλŠ” λ‹€μ‹œ μž‘μ„±ν•  ν•„μš”κ°€ μ—†μ–΄ ꡬ동 μ‹œκ°„μ΄λ‚˜ λ‘œλ”© μ‹œκ°„μ΄ μƒλ‹Ήνžˆ μ ˆμ•½λ¨

2). 가독성

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 객체의 속성과 λ©”μ„œλ“œλ₯Ό λͺ…ν™•ν•˜κ²Œ μ •μ˜ν•˜κ³ , 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ κ°€λŠ₯
  • 이λ₯Ό 톡해 μ½”λ“œμ˜ 가독성이 높아지며, μ½”λ“œμ˜ 이해 및 μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§

3). μœ μ§€λ³΄μˆ˜μ„±

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μ½”λ“œλ₯Ό 객체 λ‹¨μœ„λ‘œ λͺ¨λ“ˆν™”ν•˜μ—¬ μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ—, μˆ˜μ •μ΄λ‚˜ μΆ”κ°€λ₯Ό ν•  λ•Œ ν•΄λ‹Ή 객체만 μˆ˜μ •ν•˜λ©΄ λ˜κΈ°μ— 관리에 용이

β€» λͺ¨λ“ˆν™” : μ½”λ“œλ₯Ό ν•˜λ‚˜μ˜ νŒŒμΌμ— μž‘μ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ‚˜λˆ„μ–΄ 마치 μ‘°λ¦½ν•˜λ“―μ΄ κ΅¬μ‘°ν™”μ‹œν‚€λŠ” 것을 의미

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 경우, ES6(ES2015)의 λͺ¨λ“ˆ 방식을 주둜 μ‚¬μš©ν•˜λŠ”λ°, μ΄λŠ” import와 exportλ₯Ό μ‚¬μš©ν•˜λŠ” 방식이며, 이λ₯Ό μœ„ν•΄ babelκ³Ό 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•΄μ•Ό 함
// myModule.js // λ³΄λ‚΄λŠ” λͺ¨λ“ˆ
export const foo = function() {
  console.log("Hello, World!");
};
export const bar = function() {
  console.log("Bye, World!");
};

// app.js  // λ°›λŠ” λͺ¨λ“ˆ
import { foo, bar } from './myModule';
foo(); // "Hello, World!" 좜λ ₯
bar(); // "Bye, World!" 좜λ ₯

λ²ˆμ™Έ). ν•¨κ»˜ μ•Œμ•„λ‘λ©΄ 쒋은 μš©μ–΄

1. Babel

  • μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό 컴파일러둜 λ³€ν™˜ν•΄μ£ΌλŠ” μ˜€ν”ˆμ†ŒμŠ€ 도ꡬ
  • 주둜 μ΅œμ‹  λ²„μ „μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ˜ˆμ „ λ²„μ „μœΌλ‘œ λ³€ν™˜ν•˜μ—¬, κ΅¬ν˜• λΈŒλΌμš°μ €μ—μ„œλ„ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ‘œ λ³€ν™˜ν•˜λŠ”λ° μ‚¬μš©

2. 컴파일러(Compiler)

  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ μž‘μ„±λœ μ†ŒμŠ€ μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ£ΌλŠ” μ†Œν”„νŠΈμ›¨μ–΄
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 경우, 인터프리터 μ–Έμ–΄λΌμ„œ λ³„λ„μ˜ μ»΄νŒŒμΌλŸ¬κ°€ ν•„μš”

3. 인터프리터 μ–Έμ–΄

  • ν”„λ‘œκ·Έλž¨μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό 직접 μ‹€ν–‰ν•˜λŠ” μ–Έμ–΄λ‘œ, μ»΄νŒŒμΌλŸ¬μ™€λŠ” 달리 컴파일 κ³Όμ • 없이 μ†ŒμŠ€ μ½”λ“œλ₯Ό λ°”λ‘œ μ‹€ν–‰
  • λŒ€ν‘œμ μΈ 인터프리터 μ–Έμ–΄ : JavaScript, Ruby, PHP...
  • μ½”λ“œλ₯Ό ν•œ 쀄 ν•œ 쀄씩 읽어 듀이며 μ‹€ν–‰ν•˜κΈ°μ— λͺ…λ Ή 자체의 μ†λ„λŠ” 컴파일러 언어에 λΉ„ν•΄ λŠλ¦¬λ‹€λŠ” 단점이 있음
  • 였λ₯˜ 발견 μ¦‰μ‹œ ν•΄κ²°ν•  수 μžˆλ‹€λŠ” μž₯점이 있음
profile
감동을 μ£Όκ³ ν”ˆ 개발자(쀀비생)

0개의 λŒ“κΈ€