OOP란( Object Oriented Programing )

gun·2020년 7월 31일
0

객체 지향 프로그래밍의 이전의 프로그래밍 패러다임은 중심에 컴퓨터가 있었다. 컴퓨터가 사고하는대로 프로그래밍을 하는것이다. 하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있다. 즉 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다.

OOP를 본격적으로 공부하기전 클래스의 개념부터 잡고가야 한다.

클래스

  • 실 생활에서 자주 보이는 차로 비교하자면 자동차는 공통된 부품(특징)을 지니고 있다.
    같은 부품 이란 바퀴, 의자..등 차량의 부품을 의미한다.
  • 이렇게 공통된 특징을 모아 정의내린 것이 클래스라고 하고, 객체는 차량의 옵션에 따라 변하기 때문에 객체로 분류된다.

OOP의 특징

1) 추상화

추상화란 해당 존재가 가지고 있는 가장 특징적인 속성들을 파악해 나가는 것을 의미한다.

자동차로 추상화를 표현하자면 산타페TM -> 산타페 -> SUV -> 자동차 -> 이동수단

많은 버전의 산타페 차량을 객체라고 한다면 이 객체를 하나로 묶으려 할때 이동수단 이라는 추상적인 객체로 정의할수 있다.
위 예시처럼 객체지향에서는 객체에서 공통된 속성과 행위를 추출하는 것을 추상화라고 한다.

2) 캡슐화

캡슐화는 어떠한 클래스를 사용할 때 내부 동작이 어떻게 돌아가는지 모르더라도 사용법만 알면 쓸 수 있도록 클래스 내부를 감추는 기법이다.

캡슐화를 사용하는 가장 중요한 이유는 정보은닉 때문입니다. 사용자에게 보여줘서 안되는 구체적인 정보를 노출시키지 않도록 하기 위한 기법입니다
예를 들어보면 회사에 사원과 월급이 있다. 사원의 이름은 개명을 할수 있다. 허나 월급은 변경을 해선 안된다. 또 월급을 보여주고 싶지 않을땐 getPay Methode를 지우면 사원의 월급도 알아볼수 없다.

var Person = function(arg) {
    var name = arg ? arg : "gunwoo";
    var pay = 10000000;

    this.getName = function() {
    	return name;
    }
    this.setName = function(arg) {
    	name = arg;
    }
    //지우면 사원의 월급을 캡슐화 할수 있음
    this.getPay = function() {
    	return pay;
    }
};

var me = new Person();
console.log(me.getName());
me.setName("gunwoo won");
console.log(me.getName());
console.log(me.getPay());
console.log(me.name); // undefined
console.log(me.pay); // undefined

3) 상속

말그대로 상속은 상위의 부모 객체의 속성을 하위 객체가 물려받는 것이다.
객체지향의 가장 큰 특징으로 부모 클래스가 갖고 있는 속성(property, methode)등을 그대로 자식 클래스가 물려 받아 재사용이 가능하고, 프로퍼티 메소드를 자식 클래스에서 재 정의 할수 있다.

var Bee = function() {
  this.age = 2;
  this.color = 'yellow';
  this.fly = 'true';
};

Grub.prototype.eat = function() {
  return 'Mmmmmmmmm jelly';
};

var OldBee = function() {
  this.age = 10;
  this.color = 'gray';
  this.fly = false;
}

OldBee.prototype = Object.create(Bee.prototype);
OldBee.prototype.constructor = OldBee;

//실행
var newBee = new Bee();
console.log(newBee.age) //2
console.log(newBee.eat())//Mmmmmmmmm jelly
//OldBee에 Bee 상속
var newOldBee = new OldBee();
//OldBee에서 상속받은 값을 자유롭게 변경할수 있다.
console.log(newOldBee.age) //10
//변경하지 않고 메소드를 그대로 받아올수도 있다
console.log(newOldBee.eat()) //Mmmmmmmmm jelly

4) 다형성

  • 다형성은 상속을 받은 기능을 변경하거나 확장하는 것이다.
  • 코드의 재사용성이 높아져 코드의 길이가 짧아지고 길이가 감소하여 유지보수에 유리하다.

0개의 댓글