본문 바로가기
Java

JAVA Static

by titlejjk 2023. 4. 27.

Static

 Java에서 Static이란 메모리에 한번 할당되어 프로그램이 종료될 때 없어지는 즉 해제되는 영역을 말한다. 이 static을 얘기할 때에는 메모리 영역을 생각해 보아야 한다.

클래스가 메모리에 로드될때, Static 메모리에 영역이 생성되며 보통 모든 클래스에서 호출 가능한 전역변수나 전역 함수를 만들기 위해 사용한다.

 

 java에서는 일반적으로 우리가 Class를 만든다 하면 그 Class는 Static 영역에 생성되고, new 연산을 통해 만들어진 객체는 Heap이라는 영역에 만들어진다. 

이때 만들어진 Static이란 영역에 할당된 메모리에 부여된 객체들은 모든 객체가 공유할 수 있다는 장점이 있지만 Heap영역과 달리 Garbage Collecto의 관리를 받지 못하므로 자주 사용시 프로그램이 종료되는 시점까지 메모리가 할당되어 있어 전체적으로 보게되면 시스템의 퍼포먼스에 좋지 않다.

 

Static 변수는 정적 변수라고 하는데 Stack영역과 Heap영역과 달리 메모리에 고정적으로 할당되어 메모리에 한번 할당이 된다. 이를 이용한 사례로는

public class Animal{
	private String name = "Cat"
    
    public void printCat(){
     System.out.println(this.name);
    }
}

이런 코드가 있다는 가정하에 Animal 클래스를 통해 Animal 객체를 생성할수 있는데 이 Aniamal이라는 객체를 100개 이상 생성한다 가정해보자.

그럼 "Cat"이라는 같은 값을 갖는 메모리가 100개 이상 중복되어 생성된다. 이럴 때 static을 사용하여 여러개의 객체가 이 static이라는 하나의 메모리를 가져다 쓰게 되면 메모리의 효율이 올라가게 될 것이다.

public class Animal{
	public static final String name = "Cat";
    
    public static void printName(){
    	System.out.println(this.name);
    }
}

이렇게 유일하게 사용하기 위해 final 로 그리고 여러 객체가 접근 할수 있도록 public을 사용해주면서 

public static final String name = "Cat"; 으로 선언해 주었다.

아래 메소드가 변경된 이유는 static 변수는 static 메소드만을 통해 접근하도록 되어있기 때문에 아래 메소드도 변경해 주어야 한다.

 

Static Method👉

Static Method는 객체의 생성없이 호출이 가능하다. 또 객체에서는 호출이 불가능하고 인스턴스 변수 접근이 불가능하다.

하지만 인스턴스 변수, 메소드에서는 static이 분은 객체들은 사용이 가능하다.

 

Class에서 멤버변수중 모든 인스턴스에 공통된 값을 유지해야하는 것은 static을 붙여주는 것이 좋으며, 작성하 메소드 중 인스턴스 변수를 사용하지 않는 메소드에는 static을 붙이는 것이 좋다.

 

예제👉

두개의 Class를 만들어보겠다.

package test.mypac;

public class Animal {
public static int animalNum = 10;     //static 변수생성
    
    public static void showInfoNum (){     //static method 생성
    	System.out.println ( " 이 동물의 번호는 " + animalNum + " 입니다. ");
    }
}
package test.main;

import test.mypac.Animal;

public class Dog {
	public static void main(String[] args){
	    
    	Animal.animalNum = 100;
        Animal.showInfoNum();
    }
}

이렇게 Animal이라는 class에서 static으로 선언된 객체와 method들을 사용할 수 있다.

'Java' 카테고리의 다른 글

JAVA This  (0) 2023.05.01
JAVA Scanner  (0) 2023.05.01
JAVA 생성자  (0) 2023.04.26
JAVA 클래스  (0) 2023.04.26
JAVA 삼항 연산자  (0) 2023.04.26

댓글