반응형
SMALL
클래스와 객체와 인스턴스의 차이
클래스
클래스(class)란 객체(object)를 만들어 내기 위한 틀이며 만들어 낼 객체의 속성과 메서드의 집합을 담아놓은 것
객체
객체(object)란 클래스로부터 만들어지는 실체, 클래스로 선언된 변수
인스턴스
인스턴스(instance)란 객체가 메모리에 할당이 된 상태이며 런타임에 구동되는 객체. 객체와 같은 의미로 쓰이기도 함. 인스턴스는 AWS의 클라우드의 가상서버라는 말로도 쓰임
예시
class Person {
constructor(name = "alanwalker", IQ = 100, str = 100) {
this.name = name;
this.IQ = IQ;
this.str = str;
}
levelup() {
this.IQ++;
this.str++;
console.log(this.name + "의 지능과 힘이 증가했습니다! " + this.IQ + " / " + this.str);
}
}
const a = new Person();
a.levelup(); //alanwalker의 지능과 힘이 증가했습니다! 101 / 101
const b = new Person("홍철", 1, 1000);
b.levelup(); //홍철의 지능과 힘이 증가했습니다! 2 / 1001
static 키워드 사용하는 이유 및 단점
static
static 키워드는 클래스의 인스턴스가 아닌 클래스에 속하며 클래스의 변수, 메서드 등을 공유하는데 사용
이를 통해 해당 클래스로 만들어지는 객체사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 쓰임
단순히 전역변수가 아니라 클래스내의 static 키워드로 선언하여 이 클래스의 객체들끼리 사용되는 메서드 또는 속성이다. 라는 것을 나타내주는 명시성이라는 장점이 생기기 때문에 씁니다.
예시
class Person {
constructor(name = 'alanwalker', IQ = 100, str = 100) {
this.name = name;
this.IQ = IQ;
this.str = str;
}
levelup() {
this.IQ += 1;
this.str += 1;
console.log(this.name + "의 지능과 힘이 증가했습니다! " + this.IQ + " / " + this.str);
}
static talk(a, b) {
console.log(a.name + " & " + b.name + "이 대화를시작했다!");
}
static GUDOC = "큰돌의 터전";
}
const a = new Person();
a.levelup();
const b = new Person("큰돌", 1000, 1); b.levelup();
Person.talk(a, b);
console.log(Person.GUDOC);
// alanwalker의 지능과 힘이 증가했습니다! 101 / 101
// 큰돌의 지능과 힘이 증가했습니다! 1001 / 2
// alanwalker & 큰돌이 대화를시작했다!
// 큰돌의 터전
static 단점
static 키워드로 선언된 변수, 블록, 메서드 등은 선언과 동시에 미리 heap 영역이 아닌 Method area 메모리 영역에 할당이 되며 프로그램이 종료 될 때까지 GC(Garbage Collector)에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있음
* 참고
반응형
LIST
'CS > 개발자필수지식' 카테고리의 다른 글
[CS] 추상화의 의미 (0) | 2023.08.27 |
---|---|
[CS] 오버로딩과 오버라이딩 (0) | 2023.08.26 |
[CS] CI/CD(Continuous Integration/Delivery & Deployment) (0) | 2023.08.24 |
[CS] 클라우드 - 컨테이너와 도커 (0) | 2023.08.23 |
[CS] 클라우드 - 가상머신 (0) | 2023.08.20 |
댓글