본문 바로가기
IT/Java

Static 메모리 작동 예제

by Jeami 2013. 6. 23.
반응형



Static 메모리 작동원리에 대해 간단한 예제를 참조하며 알아보도록 하겠습니다.(너무 간단해서 민망하네요^^;)


자바 Static 메모리


1. Korea라는 이름의 class 생성

2. int형 static 멤버변수 stCnt / 일반 멤버변수 Cnt 생성

3. Hi()메소드 생성

4. main()메소드를 통한 실행(주의 아시겠지만, main()메소드는 프로그램 실행을 위해 반드시 필요한 메소드입니다. 예제에서 Hi()메소드에 결과값 출력문까지 코딩하더라도 main()이 없다면 프로그램은 영원히 실행되지 않습니다^^)

================================

Hi()메소드에 대해 간략히 설명드리면, 클래스내 선언된 2개의 멤버변수에 +1 연산해주는 기능을 합니다. 물론 결과값까지 출력하고 있구요.

main()메소드에서 nation1, nation2 인스턴스를 생성했네요. 그리고 System.out.println(nation1); 실행을 통해 nation1 참조변수의 메모리주소값이 출력되게 했습니다. nation2도 마찬가지.

중간에 System.out.println(); 이 부분은 단순라인개행입니다. 한줄 띄워쓰기 출력^^ 따닥따닥 붙어있으면 확인하기 어려울테니까요.

그럼 실행화면을 보도록 하겠습니다.




basic.lang.Korea@5e55ab 은 "nation1"의 실제 메모리 주소입니다. 인스턴스를 생성한다는 의미는 곧 메모리 주소를할당한다는 의미인데요. Korea()메소드를 실행하기 위해서 nation1이라는 변수명에다가 메모리를 할당한 것입니다. 메모리를 할당받아야만 메소드내의 연산이나 여러가지 기능을 사용할 수 있습니다^^

nation1.Hi() 메소드가 두 번 실행 된 거 보이시죠? 메소드가 두 번 실행되면서 stCnt와 Cnt 연산도 두번 실행이 된 것입니다. 처음 실행때 +1, 그리고 두번째 실행때도 +1 최종적으로 위와 같이 출력이 되겠네요. 

basic.lang.Korea@14a55f2 은 "nation2"의 실제 메모리 주소입니다. 

이제 여기서부터 static 멤버변수와 일반 멤버변수의 차이점이 여실히 드러납니다^^

static형 변수 stCnt의 결과값이 어떤가요? 새롭게 nation2라는 인스턴스가 생성되었음에도 불구하고 다른 메모리 주소를 사용하고 있는 nation1 인스턴스의 결과값에 계속해서 +1씩 연산해주는 것을 볼 수 있습니다! 하지만 일반멤버변수 Cnt는 새롭게 1 부터 시작하고 있습니다. 

결론

결과값으로 추론해보면 static형으로 선언된 변수는 다른 인스턴스에서 사용하더라도 같은 메모리를 참조하기 때문에 연산과정이 계속 이어지게 됩니다. 하지만 일반 멤버변수는 인스턴스가 생성될 때마다 새롭게 0으로 초기화 되는 것을 알 수 있습니다.



반응형

'IT > Java' 카테고리의 다른 글

This()  (0) 2013.06.23
Static 메모리만의 특징  (0) 2013.06.23
Java 배열 개념, 특징, 기초  (0) 2013.06.23
Constructor(생성자)  (0) 2013.06.22
Static  (0) 2013.06.22

loading