블로깅 과제

클래스(class)와 인스턴스 객체(instance object)

lap_mu 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']