언어/Java

Java static

JM Lee 2024. 4. 7. 21:10
728x90

https://wikidocs.net/228

 

07-03 스태틱

스태틱(static)은 클래스에서 공유되는 변수나 메서드를 정의할 때 사용된다. 이번 절에서는 스태틱에 대해서 자세히 알아보자. [TOC] ## static 변수 다음과 …

wikidocs.net

 

스태틱(static)은 클래스에서 공유되는 변수나 메서드를 정의할 때 사용된다.

 

위 링크를 보고 공부했기 때문에 아래 예시를 보면서 static을 더 자세히 이해했다.

 

- static이 있는 경우

class HouseLee {
    static String lastname = "이";
}

public class Sample {
    public static void main(String[] args) {
        HouseLee lee1 = new HouseLee();
        HouseLee lee2 = new HouseLee();

        // lee1.lastname을 변경
        lee1.lastname = "리";

        // 출력
        System.out.println("lee1.lastname: " + lee1.lastname);  // 출력: 리
        System.out.println("lee2.lastname: " + lee2.lastname);  // 출력: 리
    }
}

# lee1.lastname: 리
# lee2.lastname: 리

 

- static이 없는 경우

class HouseLee {
    String lastname = "이";
}

public class Sample {
    public static void main(String[] args) {
        HouseLee lee1 = new HouseLee();
        HouseLee lee2 = new HouseLee();

        // lee1.lastname을 변경
        lee1.lastname = "리";

        // 출력
        System.out.println("lee1.lastname: " + lee1.lastname);  // 출력: 리
        System.out.println("lee2.lastname: " + lee2.lastname);  // 출력: 이
    }
}

# lee1.lastname: 리
# lee2.lastname: 이

 

맨 아래 부분의  결과값을 보면 확연히 다르다. 어떤 점이 다를까?

 

1. Static 변수가 있는 경우에는 두 인스턴스가 동일한 값을 갖지만,

2. Static 변수가 없는 경우에는 각 인스턴스가 독립적인 값을 갖게 된다.

 

이것을 풀어 설명하자면,

 

1. lastname 변수는 클래스 수준에 속하게 된다. 즉, 모든 HouseLee 클래스의 인스턴스가 이 변수를 공유한다. 따라서 lee1.lastname 또는 lee2.lastname을 통해 접근할 수 있다. 이 변수의 값은 모든 HouseLee 인스턴스에 동일하게 적용된다. 즉, lee1.lastname을 변경하면 lee2.lastname도 같은 값으로 변경된다.

2. lastname 변수는 인스턴스 수준에 속하게 된다. 따라서 각 HouseLee 인스턴스마다 별도의 lastname 변수가 생성된다. 예를 들어, lee1.lastname을 변경하더라도 lee2.lastname에는 영향을 주지 않는다. 인스턴스마다 독립적인 값을 가진다.

 

 

따라서 static의 역할은 이렇게 정리할 수 있다.

  1. 클래스 수준의 변수 및 메서드 생성: static 키워드를 사용하면 해당 변수 또는 메서드가 클래스 수준에 속한다. 즉, 클래스에 하나의 변수 또는 메서드가 생성되며, 모든 인스턴스가 이를 공유하게 된다.
  2. 인스턴스 생성 없이 접근 가능: static 멤버는 클래스에 직접 접근할 수 있으므로 인스턴스를 생성하지 않고도 접근할 수 있다.
  3. 메모리 효율성: static 멤버는 한 번만 메모리에 할당되며, 모든 인스턴스가 이를 공유하므로 메모리를 효율적으로 사용할 수 있다.
  4. 상수 정의: static final로 선언된 변수는 상수로 간주되어 값을 변경할 수 없다. 이러한 상수는 프로그램 내에서 일관성 있는 값을 사용할 때 유용하다.
  5. 정적 메서드: static 키워드가 메서드에 사용될 경우, 해당 메서드는 인스턴스에 속하지 않으며 클래스 수준에 존재다. 따라서 인스턴스를 생성하지 않고도 해당 메서드를 호출할 수 있다. 정적 메서드는 주로 유틸리티 함수 또는 헬퍼 함수를 정의할 때 사용된다.

'언어 > Java' 카테고리의 다른 글

[JAVA] 스레드  (0) 2024.04.13
[Java] record  (0) 2024.04.12
[Java] JVM 개요  (0) 2024.04.11
[Java] 추상 클래스란?  (0) 2024.04.07
Java 객체 속성 설정 관련 공부  (1) 2024.04.06