OOP 객체 지향 프로그래밍

Taeseon Kim·2021년 4월 9일
0
post-thumbnail

아침부터 뒷목 뻐근하게 만드는 새로운 주제, 객체 지향 프로그래밍 a.k.a. OOP다.

내가 이해한 OOP는 비슷한 속성을 가진 객체들을 만들기 위한 원형 함수를 토대로 각각의 객체를 만들기 위한 설계 방식이다. 다시 말해 비슷한 스타일의 객체들을 생성하기 위한 템플릿을 구성한다는 것이다.

이 방식에는 크게 두 가지 요소로 나눌 수 있다.

1. 클래스

클래스는 앞서 말한 객체를 만들기 위한 원형 함수라는 방식으로 생각한다.

청바지와 슬랙스를 OOP방식의 코드로 만들어 본다고 가정하자.
청바지와 슬랙스는 둘 다 바지이다. 물론 바지마다 갖고 있는 정확한 길이, 넓이는 각각 다르겠지만, 분명히 무슨 색이 있을 것이고, 어떤 길이를 가질 것이고, 어떠한 재질로 만들어졌을 것이다.

말로 풀어내려니 좀 어려운데, 코드로 적어보려 한다.

class pants{
  constructor(color, length, material){
    this.color = color;
    this.length = length;
    this.material = material;
    this.durability = 20;
  }
  washing(){
    console.log('빨래하기');
    this.durability--;
  }
  putOnPants(){
    console.log('아 오늘은 이거 입어야지');
    this.durability--;
  }
}

밖을 나간다면 꼭 입어야 할 의류, 바지다.
안입는다면 어떻게 할지는 여기서 다루지는 않겠다. 아무튼,

이 코드는 바지의 원형을 내 멋대로 구현해보았다. 물론 진짜 만들기엔 한계가 있고, 입거나 세탁을 20번 밖에 못하는 아주 멋진 바지이지만, 나름 색, 길이, 재질을 나타내어 청바지와 슬랙스를 구분하기엔 충분한 것 같다.

constructor가 가진 속성은 객체에 부여되는 속성이다. 그리고 그 안에서 this라는 키워드를 통해 각각의 객체에 부여되는데,
여기서 this는 새로 만들어진 객체를 의미한다.

2. 인스턴스

앞서 말한 청바지와 슬랙스는 이 바지의 원형을 통해 구현할 수 있다.
그리고 입거나 세탁할 수도 있다.
원형(클래스)이 가진 공란의 속성을 자신의 속성에 맞게 채울 수 있고, 원형이 가진 메서드(입고, 세탁하는 것 등)를 사용할 수 있는 객체가 바로 인스턴스다.

let jean = new pants('blue', 100, 'denim');
let slacks = new pants('black', 90, 'polyester');
jean.washing();

의류 관련 전공이 아니라 재질이 뭔지 찾는데 한참 걸렸는데, 알고 있으면 언젠간 써먹을 수도 있,,
아무튼, 새로운 청바지와 슬랙스를 만들었다.
청바지는 파란색에, 100의 길이를 가지며, 데님이라는 소재로 만들어진 바지이다. 그리고 만드는 과정에 오염이 생겨 한번 세탁하게 되었다.
슬랙스는 검은색에, 90의 길이를 가지며, 폴리에스테르로 만들어진 바지이다.
각각 두가지의 바지는 색과 재질, 길이도 다르지만, 바지라는 종류에 속하기에 pants라는 클래스를 통해 쉽게 만들 수 있었고, pants가 할 수 있는 바지 입기, 세탁하기를 할 수 있었다.

청바지는 이제 봄이니 좀 찢어보고 싶다. 찢으면 먼지가 발생할 수 있으니 찢은 후엔 세탁을 한번 하려고 한다.

jean.tearing = '5%';
jean.washing();

청바지의 무릎 부분을 좀 찢고, 세탁을 한번 해보았다.
이 상황에서 청바지와 슬랙스의 상태를 한번 확인해보자.

console.log(jean);//pants{color: "blue", durability: 19, length: 100, material: "denim", tearing: "5%"}
console.log(slacks);//pants{color: "black", durability: 20, length: 90, material: "polyester"}

이렇게 OOP에서는 class를 통해 instance객체를 편하게 만들 수 있고, instance 객체는 class의 속성을 지니며 새로운 속성을 추가할 수도 있다.

이 짧은 코드에서 OOP의 네 가지 속성을 알아 볼 수 있었는데, 바로

  1. 캡슐화 Encapsulation
  2. 상속 Inheritance
  3. 추상화 Abstraction
  4. 다형성 Polymorphism

이다. 짧게 이야기 하고 마치려 한다.

캡슐화는 속성과 기능을 한 객체에 정리하는 것이다. pants라는 클래스에 색과 길이, 세탁 등의 기능을 넣어 둔 것처럼 하나의 객체에 묶어두는 것이다. 이는 모듈링과 같은 방법으로 은닉도 가능한 방식이다.

상속은 클래스의 속성과 기능을 인스턴스에서 물려 받는 개념을 의미한다.

사실 추상화캡슐화의 개념과 비슷하다. 하지만 캡슐화는 기술적인 측면에서 데이터의 은닉이 가능하다는 것에 초점이 맞추어져 있다.
추상화는 복잡한 기능의 이해 없이 사용자가 편리하게 사용할 수 있다는 것에 초점을 둔다.

다형성은 하나의 다양한 형태로 구현될 수 있음을 의미한다. pants라는 원형을 가진 jean이라고 해도, 찢어진 청바지를 만드는 기능은 jean만이 가지고 있는 기능이기 때문이다.

profile
공부하여 이해가 된 것만 정리합니다.

0개의 댓글