상세 컨텐츠

본문 제목

[OOP] 클래스/객체/인스턴스 그리고 static 키워드

Information Technology/Computer Science

by Developer, Jiyong Kim 2024. 7. 18. 15:41

본문

객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 주요 키워드에 대해 살펴보자. OOP에 대한 내용은 이전에 포스팅하여 간단하게 다룬 적이 있다.

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)

객체 지향 프로그래밍이란 독립적으로 기능하는 각각의 객체들을 통해 프로그래밍하는 방식을 말한다. 다양한 레고 블록을 모아서 하나의 레고 완성품을 조립하는 것을 생각하면 된다. 예를

jiyongkim.tistory.com

 

클래스(Class)란 객체를 만들어 내기 위한 혹은 껍데기라고 생각하면 된다. 즉, 만들고자 하는 객체들의 공통점(특성이나 동작 등)을 모아서 추상화하여 클래스로 정의하고, 각 객체들을 생성하는 것이다.

 

객체(Object)란 클래스를 통해 만들어진 실체를 말하며, 메모리에 할당되어 있는지 여부를 따지지 않는다.

 

인스턴스(Instance)객체가 메모리에 할당 된 상태이며, 런타임에 구동되는 객체를 말한다. 즉, 객체 안에 포함되는 개념인 것이다.(다른 의미로, 인스턴스는 AWS 클라우드의 가상서버라는 말로도 쓰인다.)

 

아래의 예시를 보면 이해하기가 훨씬 수월하다.

// 클래스 정의
class Car {
  // 생성자 메서드
  constructor(make, model, year) {
    this.make = make;
    this.model = model;
    this.year = year;
  }

  // 메서드 정의
  displayInfo() {
    console.log(`Car: ${this.year} ${this.make} ${this.model}`);
  }
}

// 객체 생성 후 인스턴스화 하는 과정
let myCar1; // 객체 선언
myCar1 = new Car('Hyundai', 'Sonata', 2022); // 객체를 인스턴스화하여 할당

// 객체 생성과 동시에 인스턴스화
let myCar2 = new Car('Kia', 'Ray', 2023); // 객체를 생성하면서 바로 인스턴스화

myCar1.displayInfo();
myCar2.displayInfo();

 

마지막으로 static 키워드는 객체와는 관계없이 클래스 자체에 속하는 메서드 혹은 모든 인스턴스가 공유하는 속성 값을 말한다. 이를 통해 해당 클래스로 만들어지는 객체 사이에서 중복되는 메서드, 속성을 효율적으로 정의한다. 예컨대 속성을 static으로 정의하면 각 인스턴스가 생성될 때마다 초기화되지 않고 유지되며, static 메서드는 클래스 자체에 정의되어 객체 생성 없이도 작동하며, 비슷한 기능을 가진 메서드를 각 인스턴스마다 반복 정의할 필요가 없다.

class Car {
  // static 속성
  static driveCount = 0;
  
  drive() {
    Car.driveCount++;
  }
  
  // static 메서드
  static getDriveCount() {
    return Car.driveCount;
  }
}

let sonata = new Car();
let ray = new Car();

sonata.drive();
sonata.drive();
ray.drive();

console.log(Car.getDriveCount()); // 출력: 3

static을 활용해보자구요

관련글 더보기