본문 바로가기
정리/Javascript

[Javascript]객체지향 프로그래밍 - OOP

by 꾸준한 개발 2022. 3. 23.
반응형

OOP 란?

 


OOP란 풀어서 정리하자면, object-oriented programming입니다. 많은 언어가 객체 지향 프로그래밍을 지원하는데요. 예시로는 Java, C++, python, PHP, rust..)등 많은 객체 지향 프로그램이 존재합니다. 이전까지는 많이 사용하던 절차지향 프로그래밍을 사용했는데요. 순서대로 결과를 처리하기에 그쳤다면, 프로젝트가 커지고 복잡해지면서, 스파게티 코드가 양산하게 되었습니다. 이러한 문제들을 해결하기 위해 구조적 프로그래밍이 나왔고 작은 함수로 쪼개는 방식으로 지원했지만 결국 데이터 자체를 구조화 하지는 못했습니다. 그래서 나온 것이 객체지향 프로그래밍, oop인것이죠. 일단 해결할 수 있는, 우리 사람이 보기에 편히 볼 수 있는 최소한의 단위인 객체로 쪼개고 그 객체들로 큰 문제를 해결하는 해결법입니다. 또한 독립성과 신뢰성보장이 가능해 재사용에서도 높아 시간과 비용을 절약했습니다.

 

객체지향 프로그래밍 4가지 핵심요소


1. 캡슐화(Encapsulation)

객체 내부에서 프라이빗하게 숨기고 싶으면 외부에서 접근이 불가능합니다.

그렇다면 객체 내부에 변수는 어떻게 접근할까? 객체 내에 있는 함수로만 접근하여 정보를 은닉할 수 있습니다.

또한 외부에 노출을 줄이면서 모듈간의 응집력을 떨어뜨려서 유지보수에도 유용합니다.

function counter() {
    var count = 0;
    function changeCount(num) {
      count += num;
    }
    return {
      up: function() {
        changeCount(1);
      },
      down: function() {
        changeCount(-1);
      },
      getCount: function() {
        return count;
      }
    };
}

const counter1 = counter();
console.log(counter1.getCount()); // 0
counter1.up();
console.log(counter1.getCount()); // 1
counter1.down();
console.log(counter1.getCount()); // 0

위 예제를 보면 클로저 함수를 이용해서 값을 변경할 수 있지만 직접적으로 count를 변경할 수 없기 때문에 count변수는 은닉할 수 있습니다.

2.상속(inheritance)

객체 지향의 상속의 개념은 클래스가 대상이고 클래스에서 클래스로 물려준다. 또한 아래로 내려갈 수록 객체는 구체화 됩니다.

더 구체화 되어지면서 확장성, 이해도, 재사용성, 유지보수가 향상 됩니다.

function Phone(h, w) {
	this.height = h;
    this.weight = w;
}

//자식 클랙스
function IPhone() {};

// 상속받기
IPhone.prototype = new Phone(10, 10);

//오버라이딩
IPhone.prototype.lightOn = function() {
	console.log('light on!');
};

//생성
const myIPhone = new IPhone(10, 10);

 

 

new 생성자

new 연산자는 사용자 정의 객체 타입 또는 내장 객체 타입의 인스턴스를 생성한다.

3. 추상화

객체지향에서는 추상화는 모델링입니다. 즉, 객체 안에 내가 무엇을 구형할지 몰라도 추상화되어 있는 내부 메서드로 쉽게 만들 수 있습니다.

4. 다향성

다향성은 하나의 개체가 여러 자료형으로 구현되고 실행되는 것을 의미합니다. 객체지향에서는 다향성을 오버라이딩으로 가능하게 합니다.

그러므로 객체간 관계를 유연하게 해주는 특징이 있습니다.

 

 

 

 

 

반응형

댓글