본문 바로가기
JavaScript 문법 시리즈

[JavaScript 문법] 18일차: 객체 지향 프로그래밍

by cogito21_js 2024. 8. 18.
반응형

객체 지향 프로그래밍이란?

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터를 객체라는 단위로 묶어 프로그래밍하는 패러다임입니다. OOP의 핵심 개념은 캡슐화, 상속, 다형성, 추상화입니다. 객체 지향 프로그래밍을 사용하면 코드의 재사용성, 유지보수성, 가독성을 높일 수 있습니다.

캡슐화

캡슐화(Encapsulation)는 객체의 데이터를 외부로부터 보호하고, 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 하는 것입니다. 이를 통해 데이터의 무결성을 유지하고, 객체의 내부 구현을 숨길 수 있습니다.

예제

class Person {
  constructor(name, age) {
    this._name = name; // _를 붙여서 프라이빗 속성임을 나타냄
    this._age = age;
  }

  get name() {
    return this._name;
  }

  set name(newName) {
    this._name = newName;
  }

  get age() {
    return this._age;
  }

  set age(newAge) {
    if (newAge > 0) {
      this._age = newAge;
    }
  }

  greet() {
    console.log(`Hello, my name is ${this._name} and I am ${this._age} years old.`);
  }
}

let person = new Person('Alice', 25);
person.greet(); // 'Hello, my name is Alice and I am 25 years old.'
person.name = 'Bob';
person.age = 30;
person.greet(); // 'Hello, my name is Bob and I am 30 years old.'

상속

상속(Inheritance)은 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)에서 물려받아 사용하는 것입니다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 할 수 있습니다.

예제

class Animal {
  constructor(type) {
    this.type = type;
  }

  makeSound() {
    console.log(`${this.type} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name) {
    super('Dog');
    this.name = name;
  }

  bark() {
    console.log(`${this.name} says Woof! Woof!`);
  }
}

let myDog = new Dog('Buddy');
myDog.makeSound(); // 'Dog makes a sound.'
myDog.bark(); // 'Buddy says Woof! Woof!'

다형성

다형성(Polymorphism)은 동일한 인터페이스를 통해 서로 다른 구현을 사용할 수 있도록 하는 것입니다. 이는 동일한 메서드가 다양한 객체에서 다르게 동작할 수 있게 합니다.

예제

class Animal {
  makeSound() {
    console.log('Some generic animal sound');
  }
}

class Dog extends Animal {
  makeSound() {
    console.log('Woof! Woof!');
  }
}

class Cat extends Animal {
  makeSound() {
    console.log('Meow! Meow!');
  }
}

let animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => animal.makeSound());
// 출력:
// Some generic animal sound
// Woof! Woof!
// Meow! Meow!

객체 지향 프로그래밍의 장점

  1. 코드 재사용성: 상속을 통해 코드를 재사용할 수 있습니다.
  2. 유지보수 용이성: 객체 단위로 코드를 분리하여 유지보수가 용이합니다.
  3. 가독성: 캡슐화를 통해 객체의 내부 구현을 숨기고, 인터페이스만 노출하여 코드를 더 읽기 쉽게 만듭니다.
  4. 유연성: 다형성을 통해 동일한 인터페이스로 다양한 객체를 처리할 수 있습니다.

객체 지향 프로그래밍의 단점

  1. 복잡성: OOP는 설계 단계에서 많은 시간을 요구하며, 코드가 복잡해질 수 있습니다.
  2. 성능: OOP의 추상화와 상속은 성능에 영향을 미칠 수 있습니다.
  3. 메모리 사용: 객체 생성과 관리에 많은 메모리를 사용할 수 있습니다.

결론

객체 지향 프로그래밍은 캡슐화, 상속, 다형성 등의 개념을 통해 코드를 구조화하고 재사용성을 높이는 프로그래밍 패러다임입니다. 이번 글에서는 객체 지향 프로그래밍의 기본 개념과 캡슐화, 상속, 다형성에 대해 배웠습니다. 다음 글에서는 객체 지향 프로그래밍 심화 주제에 대해 알아보겠습니다.

다음 글에서 만나요!

 

반응형