11강. static - static의 이해 - static과 객체와의 관계 - static의 장점과 단점 Lecturer Kim Myoung-Ho Nickname 블스 blogstudy@naver.com
11-1. static의 이해 static 키워드의 이해 필요에 의해 클래스를 만들고, 사용할 때는 생성자를 통해 객체로 만들어서 사용을 합니다. 이러한 방식으로 모든 것을 처리하다 보면, 문제가 생길 수 있습니다. 예를 들어 집안에 아빠, 엄마, 그리고 세 쌍둥이가 있습니다. 아이들이 아빠 지갑에 100원짜리 2개가 있다고 알고 있습니다. 이러한 상황에서 아이들이 아빠한테 100원을 달라고 합니다. 당연히 아빠지갑에는 100원 동전 2개가 있으니, 줄 수 있습니다. 첫째 아이가 먼저 아빠 지갑 객체를 생성하여 100원을 받았습니다. 그리고 둘째 아이가 아빠 지갑 객체를 생성하여 100원을 받았습니다. 마지막으로 셋째 아이가 아빠 지갑 객체를 생성하여 100원을 받았습니다. 여기까지 보면, 뭔가 이상 합니다. 분명 집안에 아빠도 한 명이고, 지갑도 한 개일 텐데, 아이들 모두 아빠 지갑을 생성하여 100원씩을 받았습니다. 200원 밖에 없는데 아이들이 받은 돈은 모두 300원 입니다. 버그 입니다. 그럼 이런 상황에서 생각할 수 있는 방법은 무엇일까요? 아주 쉽게 생각해 보면 아빠 지갑 객체가 세 아이들 모두에게 공유 되면 됩니다. 그러면 첫째 아이가 100원 받고, 둘째 아이가 100원을 받으면, 지갑에는 동전이 없고, 셋째 아이는 100원을 받을 수 없게 됩니다. 셋째 아이한테는 서운한 일이지만, 어째든 프로그램적으로는 이상이 없이 정상 동작 할 것입니다. 그러면 어떻게 아빠의 지갑을 모든 아이들이 공유할 수 있을까요? 바로 ‘static’ 키워드를 사용하는 것 입니다. 우선 ‘static’ 키워드를 ‘공유’ 라고 생각 합니다.
11-1. static의 이해 현실적으로 불가능 현실적으로 가능 아빠 지갑 객체 첫째 아이 첫째 아이 아빠 지갑 클래스 100원 받음 첫째 아이 첫째 아이 100원 받음 객체 생성 아빠 지갑 클래스 아빠 지갑 클래스 객체 생성 아빠 지갑 객체 둘째 아이 둘째 아이 100원 받음 100원 받음 객체 생성 100원 못 받음 아빠 지갑 객체 셋째 아이 셋째 아이 100원 받음 현실적으로 불가능 현실적으로 가능
11-1. static의 이해 static 키워드의 이해 위와 같은 상황을 ‘static’ 키워드를 사용하여 프로그래밍 해 보겠습니다.(11_1_ex1_staticEx)
클래스들이 모여 있음. 객체들이 모여 있음. 11-2. static과 객체와의 관계 데이터 영역 Heap 영역 객체는 클래스에서 생성(복사)되어 진다고 배웠습니다. 클래스 하나에서 무한대로 객체를 생성할 수 있고 그러한 객체는 모양은 동일할지 모르지만, 전혀 다른 덩어리 입니다. 하지만 static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 존재합니다. 메모리 관련 얘기를 좀 해보겠습니다. 클래스들이 모여 있음. 객체들이 모여 있음. 가비지 콜렉터 관리 데이터 영역 Heap 영역
11-3. static의 장점과 단점 static은 잘 사용하면 좋고, 그렇지 않으면 큰 재앙을 불러 올 수 있습니다. 이렇게 생성을 하지 않고도 존재한다는 것은 그만큼 메모리를 사용하지 않아도 된다는 것 입니다. 지금은 간단한 예제를 살펴보고 있기 때문에 객체생성에 따른 메모리의 부하를 느낄 수 없지만, 프로젝트가 커지면 객체생성에 따른 메모리 부족현상이 있을 수 있습니다. 물론 가비지콜렉터가 열심히 일을 하고는 있지만요. 객체 생성을 하지 않고도 사용할 수 있는다는 것은 분명 장점이지만, 한편으로 생각해 보면 가비지콜렉터의 관리 밖에 있기 때문에 항상 메모리에 상주해 있습니다. 즉 프로젝트가 커지고, 시스템이 오랜 시간 동안 돌아가게 되면 시스템 운영속도가 점차 느려지다가 급기야 큰 재앙이 올 수도 있습니다. 따라서 static의 사용은 신중해야 됩니다. static 변수로 사용되는 대표적인 예를 아마도 상수(변하지 않는 수) 일 것입니다. 만약 프로그래밍을 하다가 원주율이 빈번이 사용되어야 한다면 이러한 값은 상수도 정의해 놓고 사용하는 편이 좋습니다. 원주율은 3.141592653589793238462643383279… 끝이 없습니다. 이러한 경우 원주율을 3.14까지로 정의해 놓고 사용하자고 팀원들 사이 약속을 합니다.