728x90
반응형
728x90
반응형

상속(Inheritance)

객체지향에서 중요한 개념입니다. 객체라는 것은 하나의 컨테이너이고 객체는 변수, 메소드로 모아져있습니다. 객체의 특성을 물려받아 새로운 객체를 만들수 있습니다. 새로운 객체는 부모 객체와 동일한 기능을 가질 수 있습니다. 부모의 기능을 그대로 사용하거나 추가할 수 있습니다. 이것이 바로 상속의 기본적인 동작 방식입니다. 이를 통해 로직을 재활용 할 수 있습니다.

부모의 재산을 자식이 상속받듯이 오리지널 객체의 기능을 동일하게 받을 수 있습니다.

function Person(name){

    this.name = name;

    this.introduce = function(){

        return 'My name is '+this.name;

    }  

}

var p1 = new Person('egoing');

document.write(p1.introduce()+"<br />"); // My name is egoing

 

function Person(name){ //생성자를 만들어서

    this.name = name;

}

Person.prototype.name=null; //객체의 prototype이라는 프로퍼티가 있는데 .name시 이름을 준다.

Person.prototype.introduce = function(){

    return 'My name is '+this.name;

}

var p1 = new Person('egoing');

document.write(p1.introduce()+"<br />");

자바스크립트의 상속 구현에 대해 알아보겠습니다.

function Person(name){

    this.name = name;

}

Person.prototype.name=null;

Person.prototype.introduce = function(){

    return 'My name is '+this.name;

}

 

function Programmer(name){

    this.name = name;

}

Programmer.prototype = new Person(); //상속받음

 

var p1 = new Programmer('egoing'); //Programmer생성자 호출

document.write(p1.introduce()+"<br />");

 

객체가 기능을 물려받았으니 새로운 기능을 추가하는 방법에 대해 알아보겠습니다.

Programmer.prototype.coding = function(){

    return "hello world";

}

document.write(p1.coding()+"<br />"); // hello world가 출력

 

function Designer(name){

    this.name = name;

}

Designer prototype = new Person();

Designer.prototype.design = function(){

    return "beautiful!";

}

var p2 = new Designer('leezche');

document.write(p1.introduce()+"<br />");

document.write(p1.design()+"<br />"); //beautiful!을 출력

 

prototype 원형(원래 형태)

객체지향 언어와 자바스크립트를 구분하는 개념

생성자는 기본적으로 함수입니다. 함수를 호출할 때 new로 인해 단순한 함수가 아닌 생성자로 변합니다. 새로운 객체를 만들어 리턴합니다. 어떤 객체를 만들 때 객체가 가져야 하는 메소드, 데이터가 주어지길 바라기 때문에 생성자를 사용합니다.

function Ultra(){}

Ultra.prototype.ultraProp = true;

 

function Super(){}

Super.prototype = new Ultra();

 

function Sub(){}

Sub.prototype = new Super();

Sub.prototype.ultraProp = 2;

var o = new Sub();

console.log(o.ultraProp); //true를 출력

sub객체는 ultraProp을 갖고 있지 않습니다. Sub의 부모인 super, super의 부모인 Ultra가 갖고 있습니다.

생성자는 기본적으로 함수입니다. 함수를 호출할 때 new를 붙이면 단순한 함수가 아닌 생성자 함수가 됩니다. 새로운 객체를 만들어 리턴합니다. o라는 변수는 sub()라는 생성자 함수에 의해 만들어진 객체입니다. 빈 객체를 만드는 것이 생성자라면 의미가 없습니다. 어떠한 객체를 만들 때 객체가 갖고 있어야하는 메소드, property값을 가져야합니다.

var o = new Sub();

//o.ultraProp = 1;

console.log(o.ultraProp); //2를 출력

1. 객체 o에서 ultraProp를 찾습니다..

2. 없다면 Sub.prototype.ultraProp를 찾습니다.

3. 없다면 Super.prototype.ultraProp를 찾습니다.

4. 없다면 Ultra.prototype.ultraProp를 찾습니다.

이는 객체와 객체를 연결하는 체인의 역할을 하는 것입니다. 이러한 관계를 prototype chain이라고 합니다.


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

자바의 특징인 객체지향프로그래밍(OOP : Oriented Object Programming)의 특성에는

캡슐화(Encapsulation), 상속성(Inheritance), 다형성(Polymorphism)이 있습니다.


1) 캡슐화  

 -데이터와 데이터를 다루는 방법(조작)을 묶는 것입니다.

 -클래스 내부 정의에 대해 외부에서 볼 수 없는 것이 특징입니다.

  클래스의 접근 권한을 결정하는 접근 지정자를 사용하여 구현합니다.

  접근 지정자에는 (public > protected > default > private ) 접근 허용 순입니다.

 -캡슐화의 예를 들자면 알약은 캡슐로 되어있기에 약의 내용물을 알 수 없습니다.


2) 상속성 

 -하나의 클래스(부모 클래스)가 갖는 특징(데이터+ 조작)들을 다른 클래스(자식 클래스)가 물려받는 것입니다.

 -상위 클래스에서 정의한 속성을 재사용하여 개발 속도를 높이기 위해 만들었습니다.

 -상속을 이용하면 하위 클래스는 상위 클래스의 모든 연산과 메소드를 자신의 클래스에 다시 정의하지 않고도

  자신만의 메소드로 구현가능합니다.


3) 다형성 

 -상속성의 계층을 따라 각각의 클래스에 동일한 이름의 메소드를 사용할 수 있는 것입니다.

 -하나의 인터페이스를 이용하여 다양한 구현을 제공하여 개발의 효율성을 높입니다.


Human human;
human = new Singer();
human.eat();

human = new Programmer();
human.eat();

human = new Dancer();
human.eat();

-사람의 직업은 다양하지만 모든 사람은 먹는 행동을 하기에 동일한 eat()메소드를 사용할 수 있다는 뜻입니다.

728x90
반응형
728x90
반응형

+ Recent posts