출력에서 차이가 있는데, static은 객체를 따로 생성하지 않고 값을 가져오는 반면,멤버변수의 경우 객체를 만들어 줘야 출력할 수 있다. 또한 toString은 값을 문자열로 리턴해주는 역할을 한다.
static데이터에 접근하기 위한 메서드
클래스에서 정의하는 일반 메서드들은 객체의 생성과 동시에 동적메모리 영역에서 활성화된다.
->동적 메모리 영역의 입장에서는 고정 메모리 영역의 자원들은 항상 존재한다.
->고정 메모리 영역의 자원들은 동적 메모리의 자원들이 항상 존재하는 것이라는 보장을 받지 못한다.
그러므로 객체의 생성과 상관없이 static변수에 접근하기 위한 메서드를 만들 필요가 있는데, 메서드의 정의 과정에서 static키워드를 사용하면 static자원에 접근하기 위한 메서드를 만들 수 있다.
static메서드 사용시의 제약사항
메모리 영역의 차이 때문에 static 메서드는 동적 메모리 영역의 멤버변수를 사용하거나,static이 아닌 일반 멤버함수를 호출할 수 없다.
-고정영역
->static변수와 static멤버함수가 생성된다.
->이 영역의 자원들은 프로그램이 실행되는 동안 항상 존재한다.
-> 동적 메모리 영역의 자원들은 항상 존재하는 것이 아니기 때문에 static멤버함수는 동적메모리 영역의 멤버변수를 사용하거나,static이 아닌 일반 멤버함수를 호출할 수 없다.
-동적영역
-> 객체,객체안에 멤버변수, 메서드,메서드가 호출 되었을 때 사용되는 지역변수 등이 생성된다.
-> 이 영역의 자원들은 생성과 제거가 유동적으로 반복된다.
-> static자원은 항상 존재하는 것이므로 동적영역에서는 static변수를 활용하거나, static멤버함수를 호출할 수 있다.
단 한번만 객체를 생성하면 다시 객체를 생성할 필요가 없기 때문에 해당 기능을 사용할 때마다 객체를 일일이 생성해야 하는 번거로움을 피할 수 있다.
싱글톤 객체 생성과정이다. 주석을 참고하는 것이 글로만 쓰는 것보다 이해가 수월할 것.
싱글톤의 사용