Static 변수와 메소드 공부

까만호랭·2023년 8월 6일
0

Static이란?

Static은 정적이라는 뜻이며 '고정된'이라는 뜻을 가지고 있다.
Static 키워드를 사용하여 변수와 메소드를 만들 수 있다.
(이것들을 사용한 것을 정적필드, 정적메소드 라고 함,, 이 둘을 더한 뜻이 클래스멤버임)
정적필드와 정적메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기 때문에 호출 시 따로 객체를 부를 필요가 없다.
(프로그램 실행 시 Static 영역의 메모리에 올라가기 때문)

사용목적

  • 모든 클래스에서 호출 가능한 전역변수나 전역메소드를 만들기 위해 사용
  • Static 멤버는 클래스 당 하나만 생성되어 클래스의 인스턴스 사이에서 공유됨으로 공유멤버가 필요할 때 사용 (공유멤버 : "정적 멤버" 또는 "클래스 멤버"로 불리며, 클래스 수준에서 생성되어 클래스의 모든 인스턴스 간에 공유되는 멤버)

  • ## 특징
  • static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당된다.
  • Static영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만,
  • Garbage Collector의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게 된다.

    그렇기에 static을 과사용 하게되면 성능에 악영향을 줄 수 있다.

  • Static 사용

    class met{
    	static void print() {
        	System.out.println("스태틱 메소드");
        }
        
        void print(){
        	System.out.println("메소드");
        }
     }
     
     public class Static_met{
     	pubic static void main(String[] args) {
        Name.print();
        
        Name name=new Name();
        name.print2();
     	}
     }
  • static 메소드를 부를 때 클래스명.메소드명을 적어준 것을 알 수 있다.
  • 인스턴스 메소드를 부를 때 객체를 만들어주고, 객체명.메소드명을 한 것을 알 수 있다.
  • static 사용해서 변수지정을 해주면 저절로 객체생성된다고 생각 & static으로 변수 생성하면 return을 할땐 static을 써야함
  • 정리

    static이 전역변수 생성 시 앞에 있으면 그냥 클래스명.전역변수 이런식으로 호출이 되지만
    static 이 없는 전역변수에서는 main창에서 호출시 객체명.전역변수를 사용해야함
    static 메소드는 인스턴스 메소드를 이용할 수 없다.
    필드나 메소드 만들 때 인스턴스로 생성할건지 static(정적)으로 생성할건지에 대한 판단기준은 공용으로 사용하냐 아니냐에 따라 다름!!
    그냥 생성하면 자동으로 인스턴스로 생성되고 static으로 생성하려면 static을 붙이면 된다.
    static 변수는 public static final로 사용됨

    profile
    남들과 함께 발자국을 남기는 까만호랭

    0개의 댓글