Afaik

객체 지향 프로그래밍 (OOP)

중요도: ⭐⭐⭐⭐⭐

프로그래밍 패러다임의 핵심 개념입니다.

개념

객체지향프로그래밍(OOP, Object Oriented Programming)은 컴퓨터 프로그래밍 패러다임 중 하나로, 데이터를 추상화시켜 상태(attribute)와 행위(Method)를 가진 객체로 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.

장단점

장점

  • 코드 재사용 및 유지보수 용이
  • 대형 프로젝트에 적합
  • 직관적이고 이해하기 쉬운 구조

단점

  • 처리속도 느림
  • 설계 시 많은 시간이 필요
  • 객체가 많을 시 용량이 커짐

객체지향의 4가지 특성

1. 캡슐화 (Encapsulation)

변수와 함수를 하나의 단위로 묶는 것, 정보 은닉
  • 객체 내부의 구현을 숨기고 외부에서는 인터페이스만 접근
  • 데이터의 무결성 보장
  • 코드의 유연성과 유지보수성 향상
class Person {
  #name; // private field
  #age;

  constructor(name, age) {
    this.#name = name;
    this.#age = age;
  }

  getName() {
    return this.#name;
  }

  setName(name) {
    if (typeof name === "string") {
      this.#name = name;
    }
  }
}

2. 상속화 (Inheritance)

이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

  • 코드의 재사용성 증대
  • 계층적 구조를 통한 체계적 관리
  • 확장성 제공
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound`);
  }
}

class Dog extends Animal {
  speak() {
    console.log(`${this.name} barks`);
  }
}

3. 추상화 (Abstraction)

객체들의 공통적인 특징을 도출하는 것
  • 복잡한 시스템을 단순화
  • 핵심적인 개념만 추출
  • 인터페이스와 구현의 분리
// 추상 클래스 개념 (JavaScript에서는 관례적으로)
class Shape {
  constructor() {
    if (new.target === Shape) {
      throw new Error("추상 클래스는 직접 인스턴스화할 수 없습니다.");
    }
  }

  // 추상 메서드
  getArea() {
    throw new Error("하위 클래스에서 구현해야 합니다.");
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  getArea() {
    return Math.PI * this.radius ** 2;
  }
}

4. 다형성 (Polymorphism)

하나의 변수 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것

  • 같은 인터페이스로 다른 동작 수행
  • 코드의 유연성과 확장성 제공
  • 오버라이딩과 오버로딩
class Calculator {
  // 메서드 오버로딩 (JavaScript는 직접 지원하지 않음)
  add(...args) {
    if (args.length === 2) {
      return args[0] + args[1];
    } else if (args.length === 3) {
      return args[0] + args[1] + args[2];
    }
  }
}

// 다형성 예시
function makeSound(animal) {
  animal.speak(); // 각 동물 클래스의 구현에 따라 다른 소리
}

makeSound(new Dog("멍멍이")); // 멍멍이 barks
makeSound(new Cat("야옹이")); // 야옹이 meows

면접 팁

OOP의 개념을 설명할 때는 구체적인 예시와 함께 설명하는 것이 좋습니다. 특히 JavaScript의 프로토타입 기반 상속과 ES6+ 클래스 문법의 차이점도 이해해두세요.

Edit on GitHub

Last updated on