[개발자되기:객체 지향 프로그래밍] Day- 20

Kyoorim LEE·2022년 5월 25일
0

클래스와 인스턴스

객체는 일반적인 함수를 정의하듯 만드는데,
그냥 실행하는 것이 아니고 new키워드를 써서 만듦

클래스는 일반적인 다른 함수와 구분하기 위해 부통 대문자로 시작하며 일반명사로 만듦

classinstances
function Pâtisserie(type) {}let madelaine = new Pâtisserie('citron');
let fiancier = new Pâtisserie('chocolat');

함수로 정의하는 방법

function Pâtisserie(couleur, taille, parfum) {
	// 인스턴스가 만들어질 때 실행되는 코드
}

클래스라는 키워드로 정의하는 방법 (최근에는 이 방법 주로 사용)

class Pâtisserie {
	boulangerie(couleur, taille, parfum) {
    //인스턴스가 만들어질 때 실행되는 코드
   }
 }

new 키워드를 통해 클래스의 인스턴스 만들기

let madelaine = new Pâtisserie ('jaune', 'petit', 'citron')
le financier = new Pâtisserie ('brunâtre', 'petit', 'chocolat')

this
인스턴스 객체 의미
this에 할당하는 것은 만들어진 인스턴스에 해당 브랜드 이름, 색상을 부여하겠다는 의미

class Pâtisserie {
	constructor(couleur, taille, parfum) {
    	this.couleur = couleur;
        this.taille = taille;
        this.parfum = parfum;
    }
  }
  // constructor 생성자

클래스: 메소드의 정의

class Pâtisserie {
	constructor(couleur, taille, parfum) {/*생략*/}
    
    fermenter() {
    }
    
    cuire () {
    }

인스턴스에서의 사용

let madelaine = new Pâtisserie ('jaune', 'petit', 'citron');
madelaine.couleur; // 'jaune'
madelaine.cuire(); // 'cela prend 20 minutes'

le financier = new Pâtisserie ('brunâtre', 'petit', 'chocolat');
financier.taille; // 'petit'
financier.fermenter(); // pas besoin de fermenter

개념 정리하기

개념설명
prototype모델의 청사진을 만들 때 쓰는 원형 객체(original form)
construnctor인스턴스가 초기화될 때 실행하는 생성자 함수
this함수가 실행될 떄 해당 스코프마다 생성되는 고유한 실행 context. new키워드로 인스턴스 생성했을 때는 해당 인스턴스가 바로 this의 값이 됨

객체 지향 프로그래밍(OOP, Object-oriented programming)

하나의 모델(틀)을 만들고 그 틀을 바탕으로 한 객체를 만드는 프로그래밍 패턴
ex) 마들렌 틀 -> 그 틀로 마들렌 계속 찍어내기

  • 마들렌 틀 -> 클래스
  • 그 틀로 만든 마들렌 -> 인스턴스 객체(instance object) 줄여서 인스턴스

절차적 언어

객체 지향 프로그래밍 패러다임 등장 전에 있었던 절차 지향 프로그래밍
ex) C, 포트 => 순차적인 명령의 조합

객체 지향 프로그래밍 구성

클래스

원형(original form), 객체를 생성하기 위한 아이디어나 청사진

인스턴스

클래스의 사례(instance object)

생성자 함수(constructor)

클래스를 통해 만들어진 인스턴스(객체)에 생성자를 통해 세부사항을 넣어줌

OOP Basic Concepts

Encapsulation(캡슐화)

데이터(속성, property)와 기능(메서드)를 따로 정의하지 않고 하나의 객체 안에 넣어서 묶는 것

  • 느슨한 결합(loose coupling):
    코드 실행 순서에 따라 절차적으로 코드작성하지 않고 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합함
  • 은닉화(hiding):
    내부 데이터나 내부 구현이 외부로 노출되지 않도록 만듦
    객체 외부에서 필요한 동작(메서드)만 노출시킴

=> 장점: 복잡하지 않은 코드, 재사용성 증가

Inheritance(상속)

부모 클래스의 특징을 자식 클래스가 물려받는 것
기본 클래스(base class)의 특징을 파생 클래스(derived class)가 상속받음
ex) 사람이라는 클래스가 있을때 기본적으로 성별, 나이와 같은 속성과 먹다,자다와 같은 메서드가 들어간다. 여기서 학생이라는 클래스를 작성한다고 가정할 때 아예 새로 작성할 필요 없이 사람의 클래스를 상속받을 수 있음

=> 장점: 불필요한 코드 줄여 재사용성 높임

Abstraction(추상화)

내부 구현은 복잡하지만 실제 노출되는 부분은 단순하게 만든다는 개념
ex) 컴퓨터에서 마우스 또는 단축키를 통해 간단하게 실행시키는 것들이 실제 그 뒤에서는 복잡한 실행과정을 내포하고 있음
=> 클래스를 사용하는 사람에게 필요하지 않은 메서드를 노출시키지 않고 단순한 이름으로 정의함

인터페이스: 클래스 정의 시 메서드와 속성만 정의한 것. 추상화의 본질!

=> 장점: 복잡하지 않은 코드. 단순화된 사용으로 변화에 대한 영향 최소화

Polymorphism(다형성)

같은 이름을 가진 메서드라도 작동이 다른 경우
ex) Textarea(TextBox), Select, Checkbox

=> 장점: 동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해짐

profile
oneThing

0개의 댓글