-
클래스(class)와 인스턴스 객체(instance object)블로깅 과제 2022. 11. 18. 13:21
1. 객체지향프로그래밍
- 기본 골격이 되는 뼈대를 만들고 여러 부품을 붙여 각기 다른 객체를 만드는 프로그래밍 패턴
- 기본 골격이 되는 뼈대를 클래스(class)라고하며 만든 객체를 인스턴스 객체(instance object) 줄여서 인스턴스(instance)라고 한다.
1) class와 instance 정의하기
- class의 정의는 일반함수와 비슷하다. 다른 점은 일반함수와 구분하기 위해 대문자로 시작하며 이름을 일반 명사로만 작성한다. 일반함수의 경우 소문자로 시작하며 이름에 적절한 동사를 포함시킨다.
- 새로운 instance를 정의하기 위해선 new 키워드를 사용해야한다.
// 일반함수 function numAdd() { // 생략 } // class function Computer() { // 생략 } // instance let bpple = new Computer(//생략)
class를 정의하는 방법
- ES5에서는 class를 함수로 정의했다.
function Computer(brand, CPU, memory, GPU) { //instance가 생성될 때 실행되는 코드 }
- ES6이후는 class를 class라는 키워드로 정의할 수 있다.
class Computer{ constructor(brand, CPU, memory, GPU) { // instance가 생성될 때 실행되는 코드 } }
- 최근에는 주로 ES6방법이 쓰이며 둘 다 생성자(constructor)함수라고 불린다.
instance를 생성하는 방법
- new 키워드를 사용한다.
- 사용하게되면 생성자 함수가 실행되며 instance가 할당된다.
- 생성된 instance는 class의 속성과 메소드를 갖게 된다.
let myCom = new Computer('DIY', 'i5', '16GB', 'GTX1060'); let broCom = new Computer('DIY', 'i7', '32GB', 'GTX1070');
2) 속성과 메소드의 정의
- 속성은 값을 할당하는 요소이고 메소드는 객체 안에 있는 함수를 말한다.
클래스의 속성을 정의하는 방법
- ES5의 경우 함수 안에 정의
function Computer(brand, CPU, memory, GPU) { this.brand = brand; this.CPU = CPU; this.memory = memory; this.GPU = GPU; }
- ES6의 경우 class 키워드 안에 있는 생성자(constructor)안에 정의
class Computer{ constructor (brand, CPU, memory, GPU) { this.brand = brand; this.CPU = CPU; this.memory = memory; this.GPU = GPU; } }
- parameter는 instance 생성시 지정하는 값이다.
- this에 할당을 하겠다는 것은 instance에 부여하겠다는 뜻이다. (객체에 key와 value를 추가하는 것과 같아보인다.)
클래스의 메소드를 정의하는 방법
- ES5의 경우 prototype 키워드를 사용해야 메소드를 정의할 수 있다.
function Computer(brand, CPU, memory, GPU) { this.brand = brand; this.CPU = CPU; this.memory = memory; this.GPU = GPU; } Computer.prototype.run = function() { // 컴퓨터 전원 ON을 구현하는 코드 } Computer.prototype.login = function() { // 로그인을 구현하는 코드 }
- ES6의 경우 생성자함수와 함께 class 키워드 안에 묶어서 정의한다. (function을 사용하지 않으며 이름만으로 정의)
class Computer{ constructor (brand, CPU, memory, GPU) { this.brand = brand; this.CPU = CPU; this.memory = memory; this.GPU = GPU; } run() { } login() { } }
3) 속성과 메소드의 instance 안에서 사용
let myCom = new Computer('DIY', 'i5', '16GB', 'GTX1060'); myCom.brand; // 'DTY' myCom.run(); // 'myCom의 전원이 켜졌습니다.' let broCom = new Computer('DIY', 'i7', '32GB', 'GTX1070'); broCom.brand; // 'DTY' broCom.run(); // 'broCom의 전원이 켜졌습니다.'
4) 배열과 클래스의 관계
- 이제까지 만들었던 배열은 Array의 instance였다. (속성과 메소드의 사용법이 동일하다.)
// instance let myCom = new Computer('DIY', 'i5', '16GB', 'GTX1060'); myCom.brand; // 'DTY' myCom.run(); // 'myCom의 전원이 켜졌습니다.' // array let arr = new Array('code', 'states'); arr.length // 2 arr.push(Good); // ['code', 'states', 'Good']
'블로깅 과제' 카테고리의 다른 글
프로토 타입(object prototype) (0) 2022.11.18 객체 지향 프로그래밍 (0) 2022.11.18 이제까지 배운것 복습! (JavaScript Koans) (1) 2022.11.09 원시자료형과 참조자료형 (0) 2022.11.07 Unit2 - Chapter2. 타입 (typeof 사용하기) (0) 2022.10.21