What is OOP?

somedaycode·2021년 1월 18일
0
post-thumbnail

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나이다.

단순히 프로그램을 일련의 명령어로 보는 것이 아니라, 여러 개의 독립적인 객체들의 모임으로 보는 것 이다.

이러한 객체들은 서로서로 메시지를 주고 받으며 데이터를 처리하는 상호작용을 한다.

클래스 (Class)

클래스는 객체를 생성하기 위한 템플릿이다. - MDN
클래스는 연관되어 있는 변수와 메소드의 집합이다 - 생활코딩

우리는 클래스(class)라는 일종의 설계도를 통해 구체적인 실체(instance)를 만들어낸다.

// 아래의 User 클래스를 통해 name과 age를 가진 인스턴스를 만들 수 있다.
class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, ${this.name}`);
  }
}

객체 (Object)

객체는 포괄적인 의미를 담고 있다.

추상적으로 존재하는 모든 사물은 객체(Object)이다. 이러한 객체를 추상화하여 클래스가 만들어지고 이것을 구체화 한다면, 인스턴스가 만들어지는 것이다.

인스턴스 (Instance)

class를 통해 구현된 구체적 실체이다.

// user1의 이름은 디온, 나이는 8살이다.
const user1 = new User('Dion', 8);
console.log(user1.name); // Dion
console.log(user1.age); // 8

이렇게 실체화된 인스턴스는 메모리에 할당된다.


상속 (Inheritance)

두 개의 클래스가 부모와 자식 관계를 형성하게 된다.

`User` 클래스는 부모 클래스가 되고, 이를 상속한 `VipUser` 클래스는 자식 클래스가 된다.

class VipUser extends User {
  constructor(name, age, credit) {
    // super를 통해 부모 생성자를 호출할 수 있다.
    super(name, age);
    this.credit = credit;
  }
}

const vipUser1 = new VipUser('John', 28, 4700);
console.log(vipUser1.name); // John
console.log(vipUser1.age); // 28
console.log(vipUser1.credit); // 4700

또 하나의 새로운 클래스를 만드는 것보다 이미 만들어진 User라는 클래스 내의 속성들을 물려받아 쓰는 것이 프로그램의 유연성을 늘려준다.

다형성 (Polymorphism)

여러개의 형태를 갖는 것이다

class VipUser extends User {
  constructor(name, age, credit) {
    super(name, age);
    this.credit = credit;
  }

  /**
   * 앞서 만들었던 `User Class`내 `greet()` 메소드와는 달리 다른 메시지를 출력한다.
   * 같은 이름의 메소드지만 `override`를 통해 다른 기능을 수행한다.
   */
  greet() {
    console.log(`Wecome!!! ${this.name}`);
  }

  // 또, 추가적으로 새로운 메소드를 정의할 수 있다.
  showCredit() {
    console.log(`You have ${this.credit} remaining now`);
  }
}
  • 여러 타입의 객체를 하나의 클래스로 관리가 가능하며 직접 작성할 코드의 양이 줄어든다.
  • 재사용성이 높다.
profile
천천히 꾸준히

0개의 댓글