[DAY15] 객체 지향 2

m1njae·2022년 1월 17일
0

22 Basic Challenge

목록 보기
15/25
post-thumbnail

캡슐화(Encapsulation)

캡슐화는 객체가 데이터를 속성에 저장하거나, 저장한 데이터를 이용하여 무엇인가를 수행하는 메소드를 포함하는 것을 말한다. 캡슐화의 다른 표현으로 정보 은닉(Information Hiding)이라는 용어를 쓰기도 한다. 정보 은닉은 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다.

캡슐화의 목적

  • 코드를 재수정없이 재활용하는 것이다.
  • 접근제어자를 통한 정보 은닉이다.

정리하자면, 캡슐화는 객체의 속성과 동작을 하나로 묶고, 구현 내용을 외부로부터 은닉한다는 것이다. 그렇다면 캡슐화는 왜 중요한가? 캡슐화를 표현하는 두 개념은 객체의 모듈화를 지향한다. 객체의 모듈화가 잘 이루어져있을 경우, 모듈 단위의 재활용이 매우 용이하며, 중복되는 코드를 모듈로 대체하게 되면 수정사항이 있을 시 모듈 내부 코드만 변경해주면 된다. 이는 간편한 유지보수와 직결된다.

상속(Inheritance)

상속이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.상속을 이용하면 기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있습니다.

이때 기존에 정의되어 있던 클래스를 부모 클래스(parent class) 또는 상위 클래스(super class), 기초 클래스(base class)라고도 한다.

그리고 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class) 또는 하위 클래스(sub class), 파생 클래스(derived class)라고도 한다.

function Man() {
	this.name = "Anonymous";
	this.gender = "Man";
        this.introduce = function(){
           return `저는 ${this.name}이고${this.gender}입니다.`;
	}
}

function Students () { 
	this.base = new Man();
	this.name = "Anonymous name"; 
        this.age = "Anonymous age";
        this.school = "Anonymous school";
        this.schoolcode =" Anonymous code";
        this.introduce = function(){
      return `저는 ${this.name}이고 ${this.gender}입니다. 학교는 ${this.school}을 다니며 학번은 ${this.schoolcode}입니다. 잘 부탁드립니다!`;
	}
} 

Students.prototype = new Man();
var student = new Students ();

console.log(student.name);
// "Anonymous name"

console.log(student. gender);
// "Man"

console.log(student.age);
// "Anonymous age"

console.log(student.school);
// "Anonymous School"

console.log(student.schoolcode);
// "Anonymous code"

console.log(student.introduce());
//저는 Anonymous name이고 Man입니다. 학교는 Anonymous school을 다니며 학번은  Anonymous code입니다. 잘 부탁드립니다!

위 예제 코드를 보면 'StudentsMan으로부터 상속받아 생성되었다 ' 라고 말할 수 있다. 이때, Man은 부모 클래스이며, Students는 자식 클래스이다.

다형성(Polymorphism)

다형성이란 프로그램 언어 각 요소들(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.

또는 여러 형태를 받아들일 수 있는 성질, 상황에 따라 의미를 다르게 부여할 수 있는 특성 등으로 정의를 하기도 한다. 다시 말하면 하나의 타입에 여러 객체를 대입할 수 있는 성질로 이해할 수 있다.

오버라이딩(Overriding)

오버라이딩은 상위 클래스의 메소드를 하위 클래스에서 재정의하는 것을 말하며 다형성과 밀접한 관련이 있다. 상위 클래스로부터 물려받은 동일한 함수를 사용하였지만, 하위 클래스에서 변형하여 새로 정의한 것이 더 중요시 된다. 위 예제 코드에서도 overriding이 되었음을 확인할 수 있다.

참고

profile
할 수 있는 것부터 차근차근, 항해자의 공부 기록공간

0개의 댓글