클래스와 인스턴스

ROCKBELL·2022년 11월 18일
0

자바스크립트

목록 보기
12/25

객체 지향 프로그래밍

객체지향 프로그래밍(OOP, Object-oriented-programming)은 데이터와 기능을 한 곳에서 묶어서 처리합니다.
속성과 메서드가 하나의 객체라는 개념에 포함되며 class 라는 이름으로 부릅니다

클래스

객체지향 프로그래밍에서 클래스는 하나의 설계도(템플릿)를 뜻합니다

클래스를 정의하는 방법

  • ES5
function Student (name, grade) {
	this.name = name;
    this.grade = grade;
}

Student.prototype.grade = function(){ // prototype : 원형이 되는 객체
	return this.grade + '점'
}
  • ES6
class Student {
	constructor(name, grade) { // constructor :인스턴스가 초기화 될때 실행
        // this : 함수가 실행 될때마다 생성되는 고유한 실행컨텍스트 
    	this.name = name;
        this.grade = grade; 
    }
    
    get grade() {
		return `${this.grade} 점`
	}
}

클래스의 특징

  • 함수 선언과는 다르게 클래스 선언은 정의한 후에 사용이 가능하다 (클래스가 호이스팅될 때 초기화는 되지 않기때문에)
  • 클래스 표현식에서 클래스 이름이 존재하는 경우 클래스 body local scope에 한해 유효합니다
  • 클래스의 constructor는 부모 클래스의 constructor를 super 키워드를 통해 호출 할 수 있습니다
  • 클래스 내부의 코드는 항상 stric mode로 실행됩니다

정적 메서드와 속성

  • 정적메서드는 클래스의 인스턴스화 없이 호출되며, 인스턴스에서는 호출할 수 없습니다
  • 종적속성은 캐시, 고정환경설정, 복제가 필요없는 기타 데이터등에 유용합니다
class Student {
	constrouctor(name, grade) {
    	this.name = name;
        this.grade = grade;
    }
    static category = "student"
}

필드 선언

필드를 먼저 선언함으로써 클래스의 정의는 self-ducumenting에 가까워졌고 필드는 언제나 존재하는 상태가 됩니다. 또한 필드 선언은 초기값(constructor)과 같이 설정 될 수도 있습니다

public 필드

class Student {
	grade = 0;
    constrouctor(name, grade) {
    	this.name = name;
        this.grade = grade;
    }
}

private 필드

 class Student {
 	#grade = 0;
    constrouctor(name, grade) {
    	this.name = name;
        this.#grade = grade;
    }
 }
  • # prefix를 추가하면 private 필드를 선언할 수 있습니다
  • private 필드는 외부에서 접근할 수 없으며 클래스 내부에서만 읽고 쓰기가 가능합니다
  • private 필드는 사용 전에 선언되어야합니다

인스턴스

인스턴스는 클래스라는 설계도를 바탕으로 만들어진 객체를 인스턴스 라고 합니다
new 키워드를 통해 새로운 인스턴스를 생성합니다

인스턴스의 특징

  • 인스턴스는 객체에 포함됩니다
  • 클래스로 선언된 객체가 메모리에 할당되어 실제 사용될 때 객체라고 부른다
  • 객체는 실체 , 인스턴스는 관계 에 초첨을 맞춥니다
profile
luv it

0개의 댓글