ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 인프런 - static, final
    자바/인프런 인강 2018. 1. 31. 16:35
    • static이란?

    static은 쉽게 생각해서 공유이다.

    클래스는 생성자를 이용해 객체로 만들어서 사용한다. 그런데 현실 세계를 프로그램에 옴겨 놓았을때 문제가 생길 수 있다. 클래스의 값이 한정되어야 하는데 다수의 객체를 생성해서 사용하려고 하면 클래스 한정된 값을 초과하는 버그가 발생한다. 이를 예방하기 위해서 클래스 내에서 static으로 객체 선언을 해서 다른 클래스와 동시에 공유한다. 다른 클래스에서는 클래스 객체를 생성하지 않고 바로 접근 할 수 있다.




    package 패키지1


    public class LimitValue {


    public static int VALUES = 400;  


    }





    package 패키지2


    import 패키지1.LimitValue


    public class UseValue {


    public void Use1(int value) {


    LimitValue.VALUES = LimitValue.VALUES - value;

    }

    }






    package 패키지3


    import 패키지1.LimitValue


    public class UseValue2 {


    public void Use2(int value) {


    LimitValue.VALUES LimitValue.VALUES - value;

    }

    }






    package 패키지3


    import 패키지1.LimitValue


    public class Mainclass {
    public static void main(string[] args) {

    UseValue1 usevalue1 = new UseValue1();
    usevalue.use1(100);

    UseValue2 usevalue2 = new UseValue2();
    usevalue2.use2(100);

    System.out.println(LimitValue.VALUES); //출력 값

    }
    }


    바로 위에 메인클래스에서 UseValue1,2 메소드를 실행하면 LimitValue 클래스의 VALUES의 값은 400에서 200으로 차감되어 출력된다. 만약 static 선언을 하지 않았다면? 출력 값은 변화없이 400이다.




    • static의 장점과 단점

    static을 사용한 변수는 객체생성과 상관없이 클래스와 함께 메모리에 존재한다. 그러므로 다수의 객체생성에 의한 heap 메모리(가비지 콜렉터가 관리하는 메모리) 부하를 줄여주지만 static을 사용한 변수는 자동으로 관리를 받지 않는 메모리 영역에 있기 때문에 그 숫자가 늘어나면, 즉 프로젝트가 커지고 시스템이 오래 운영되면 시스템 운영속도가 점차 느려지고 결국엔 더 큰 문제가 발생할 수 있다?

    static이 변수로 사용되는 대표적인 예) 상수


    • final이란?

    static으로 선언한 변수가 더 이상 변경되지 않도록 고정해주는 역할

    public static final double PI = 3.14D;