Static

2021. 1. 5. 15:282021/JOB DA STUDY

Static

어떤 값이 메모리에 한번 할당되어 프로그램이 끝날 때까지 그 메모리에 값이 유지됨을 의미하므로, 특정 값을 공유해야하는 경우에는 static사용시 메모리의 이점을 얻을 수 있다.

 

Static 변수

인스턴스 변수는 클래스가 생성될때 메모리 공간이 할당되고, 생성자에 있는 값으로 초기화된다.

하지만 static 변수(클래스 변수)는 선언되는 순간에 하나의 메모리 공간이 할당되기 때문에 어디에 선언이 되더라도 그 클래스 내에서는 공유 된다.

 

인스턴스 변수를 사용하면 instance1, instance2 객체 생성시, instance1의 variable과 instance2의 variable이 서로 다른 메모리를 각각 할당받게 된다.

그러나 static 변수를 사용하게 되면, 두 객체를 생성하여도 variable은 하나의 메모리만 할당받게 된다.

 

Static 메서드

static메서드는 객체를 생성하지 않아도 호출이 가능하지만,

객체에서는 호출이 불가능하며 static메서드 안에서는 인스턴스 변수의 접근이 불가능하다.

 

Static 메소드, Static 변수 이용 인스턴스 변수 생성
public class Practice{
    static int count;
    
    public Practice(){
        this.count ++;
        System.out.println("횟수:" + this.count);
    }

    pulic static int getCount(){
        return count;
    }

    public static void main(String[] args){
        practice hc1 = new Practice();
        practice hc2 = new Practice();

        System.out.println("static 메소드: " + Practice.getCount());
        }
    }
public class Practice{
   int count;
    
    public Practice(){
        this.count ++;
        System.out.println("횟수:" + this.count);
        }

    public static void main(String[] args){
        practice hc1 = new Practice();
        practice hc2 = new Practice();
        }
    }
횟수:1
횟수:2
static 메소드: 2
횟수:1
횟수:2

 

    • 인스턴스에서 공통적으로 사용해야 하는 것Static을 붙인다.
    • 인스턴스를 생성하면 각 인스턴스는 서로 다른 메모리들의 주소를 할당받기 때문에 서로 다른 값을 유지한다.

하지만 인스턴스들이 공통적인 값을 유지해야 하는 경우에는 Static을 붙인다.

  • 전역으로 자주 사용할 메서드Static메서드로 만들어 사용한다.
  • 프로젝트 내에서 공통적으로 사용해야하는 메소드가 있는 경우에는 Static메소드로 만들어서 불필요한 코드의 수를 줄 인다. 이때, 인스턴스 변수가 메서드 내부에서도 필요한가에 대해 고려해야한다.

-----------------------------------------------------------------------------------------------------------------------static 멤버 변수

  • 클래스 변수라고도 한다.
  • 모든 해당 클래스는 같은 메모리를 공유한다.
  • 특정 인스턴스에 종속되지 않는다.
  • 인스턴스를 만들지 않고 사용 가능하다.

Static 메소드

  • 클래스 메소드라고도 부흔다.
  • 오버라이드 불가능 하다.
  • 상속 클래스에서 보이지 않는다.

Static 블록

  • 클래스 내부에 만들 수 있는 초기화 블록
  • 클래스가 초기화 될 때 실행되고, main()보다 먼저 수행된다.

Static 클래스

  • 일반적인 클래스(top-level)클래스에 적용하면 문법 오류이다. (top-level 클래스가 static하지 않다는 뜻은 아니다.)
  • 중첩 클래스(nested class)에만 사용 할 수 있다.   ( <-> inner class에서는 static으로 정으되지 않는다.)
  • 부모 클래스의 멤버 필드 중에서는 static필드만 접근할 수 있다.
  • 사실상 일반적인 top-level 클래스와 동일하게 동작하지만, 그 위치가 하나의 top-level 클래스안에 들어있는 것이다.

static import

다른 클래스에 존재하는 static 멤버들을 불러올 때 사용한다.

 

 

 

 

 

 

 

'2021 > JOB DA STUDY' 카테고리의 다른 글

디자인패턴_Singleton Pattern of Creational Pattern  (0) 2021.01.05
Final  (0) 2021.01.05
Design Pattern  (0) 2021.01.05
디자인패턴_MVC Pattern  (0) 2020.12.31
NoClassDefFoundError 와 ClassNotFoundException  (0) 2020.12.29