안녕하세요~ 
이번 시간에는 static의 의미와 사용법에 대해 알아보려고 하는데요.
어떤 상황에서 사용되는지 한번 볼까요?
static을 사용했을 때와 안 했을 때 달라지는 코드
package day16;

class Test{
    static int a = 0;
    int b = 0;
    
    static void printA() {
    	System.out.println("printA 메소드 실행");
    }

    void printB() {
    	System.out.println("printB 메소드 실행");
    }
}

public class Main {
	
    public static void main(String[] args) {
    	Test t1 = new Test();
    	Test t2 = new Test();
    	
    	t1.a++;
    	t2.b++;
    	
    	System.out.println(t1.a);
    	System.out.println(t1.b);
    	System.out.println(t2.a);
    	System.out.println(t2.b);

        t1.printA();
        t1.printB();
        t2.printA();
        t2.printB();
    }
}

 

필드와 메소드를 각각 static이 붙은 것과 붙지 않은 것을 비교하여 출력하는 코드.

 

빨간줄 오류는 아니지만 노란줄 경고가 뜨는데 이유를 한번 알아볼까요?


오늘의 핵심 키워드

  • static이 존재할 때는 메모리에서 static영역에 할당되어 모든 객체가 공유하기 때문에 바로 객체 생성 필요없이 사용한다. 따라서 클래스명.필드, 클래스명.메소드 식으로 사용이 가능하다.
  • static이 존재하지 않을 때는 객체 생성이 반드시 필요하다. 같은 클래스 내에서도 하나의 메소드에서 다른 메소드를 사용할 때도 사용할 메소드에 static이 없다면 static을 붙여주거나 사용하는 메소드에서 객체 생성을 해야한다. 

객체 생성 없이 사용할 때, 생성 후 사용할 때 똑같은 방식으로 출력되는 것을 볼 수 있습니다.

( 1 ) t1 객체의 필드 a를 1 증가, t2 객체의 필드 b를 1 증가

( 2 ) static이 붙은 필드 a는 모든 객체가 값을 공유하기 때문에 t1, t2 객체 모두 1씩 증가

( 3 ) static이 붙지 않은 필드 b는 t2 객체만 1 증가


최종 완성 코드

package day16;

class Test{
    static int a = 0;
    int b = 0;
    
    static void printA() {
    	System.out.println("printA 메소드 실행");
    }

    void printB() {
    	System.out.println("printB 메소드 실행");
    }
}

public class Main {
	
    public static void main(String[] args) {
    	System.out.println("--객체 생성 전--");
    	System.out.println("Test.a : "+Test.a);
    	Test.printA();
    	
    	Test t1 = new Test();
    	Test t2 = new Test();
    	
    	t1.a++;
    	t2.b++;
    	System.out.println();
    	System.out.println("--객체 생성 후--");
    	System.out.println("t1.a : "+t1.a);
    	System.out.println("t1.b : "+t1.b);
    	System.out.println("t2.a : "+t2.a);
    	System.out.println("t2.b : "+t2.b);

        t1.printA();
        t1.printB();
        t2.printA();
        t2.printB();
    }
}

 

꼭 봐야되는 마무리 꿀팁!

  •  객체 생성 없이 사용하고 싶을 때는 static 사용하기!
  • static을 너무 많이 사용하게 되면 메모리 사용이 비효율적이고 꼬일 수 있기 때문에 주의하기!

▲ 영상으로 한번 더 복습하세요 :)