본문 바로가기
CS/개발자필수지식

[CS] 클래스와 객체와 인스턴스의 차이, static 키워드 사용하는 이유 및 단점

by Johnny's 2023. 8. 25.

클래스와 객체와 인스턴스의 차이

클래스

클래스(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)에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있음

 

* 참고

- CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 -인프런

댓글