。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

CS

[면접] static 변수

quarrrter 2023. 12. 23. 16:14
 

=> 보통 프로그램 전반에 걸친 전역변수나 공용으로 사용해야 할 변수를 필요로 할 때 사용됨

 

 

static 변수, 메서드 특징

  1. 클래스가 메모리에 로드될 때, 스태틱(static) 메모리 영역에 생성
  2. 인스턴스를 생성하지 않고도 사용할 수 있음.
  3. 클래스당 하나만 생성되며, 클래스 멤버라고도 부름. (static 메서드가 해당 클래스로부터 생성된 여러 인스턴스들 간에 공유되며, 클래스 자체에 속하는 멤버라는 의미)
  4. static 메소드 안에서는 static 멤버들만 사용할수 있고, 인스턴스 멤버는 사용할 수 없음. 
 

*인스턴스

"인스턴스"는 객체지향 프로그래밍(OOP)에서 클래스의 구조를 기반으로 실제로 메모리에 할당된 것을 가리킵니다. 클래스는 객체를 만들기 위한 템플릿 또는 설계도로 볼 수 있고, 이 클래스를 기반으로 실제 데이터를 담고 있는 메모리 공간이 할당되면 그것을 "인스턴스"라고 합니다.

 

클래스는 설계도이고, 그 설계도를 기반으로 만들어진 실체가 인스턴스입니다.

객체지향 프로그래밍에서는 이러한 클래스와 인스턴스를 사용하여 코드를 구조화하고, 관련된 데이터와 동작을 논리적으로 그룹화합니다.

// 클래스 정의
public class Car {
    // 인스턴스 변수
    String model;
    int year;

    // 인스턴스 메서드
    void drive() {
        System.out.println("Driving the car");
    }
}

// 인스턴스 생성
Car myCar = new Car();

// 인스턴스 변수 설정
myCar.model = "Toyota";
myCar.year = 2022;

// 인스턴스 메서드 호출
myCar.drive();

 

동일 클래스의 모든 인스턴스에서 공유 사용

public class MyClass {
    // static 변수
    public static int sharedVariable = 0;

    // static 메서드
    public static void updateSharedVariable() {
        sharedVariable++;
    }
}

public class Main {
    public static void main(String[] args) {
        // 인스턴스 생성
        MyClass instance1 = new MyClass();
        MyClass instance2 = new MyClass();

        // static 변수는 모든 인스턴스에서 공유됨
        System.out.println(instance1.sharedVariable);  // 출력: 0
        System.out.println(instance2.sharedVariable);  // 출력: 0

        // static 메서드 호출
        MyClass.updateSharedVariable();

        // 모든 인스턴스가 같은 static 변수를 공유하므로 값이 변함
        System.out.println(instance1.sharedVariable);  // 출력: 1
        System.out.println(instance2.sharedVariable);  // 출력: 1
    }
}

 

static 메소드 안에서는 static 멤버들만 사용할 수 있고, 인스턴스 멤버는 사용할 수 없다. 

public class MyClass {
    // 인스턴스 멤버
    public int instanceVariable;

    // static 멤버
    public static int staticVariable;

    // 인스턴스 메소드
    public void instanceMethod() {
        instanceVariable = 1;   // 인스턴스 메소드에서는 인스턴스 멤버 사용 가능
        staticVariable = 2;     // 인스턴스 메소드에서는 static 멤버 사용 가능
    }

    // static 메소드
    public static void staticMethod() {
        // 인스턴스 멤버에 직접 접근할 수 없음 - 아래 라인은 오류 발생
        // instanceVariable = 3;

        // static 멤버는 사용 가능
        staticVariable = 4;
    }
}

public class Main {
    public static void main(String[] args) {
        // 인스턴스 생성
        MyClass myInstance = new MyClass();

        // 인스턴스 메소드 호출
        myInstance.instanceMethod();

        // static 메소드는 클래스 이름으로 직접 호출
        MyClass.staticMethod();
    }
}