마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

클래스를 객체생성해서 사용하는것과 static변수로 불러서 사용하는것의 차이

0 추천
만약 Data.Class 라는 파일이 있을 때,

 

Data data = new Data(); 해서

 

data.변수명 으로 접근해서 사용하는것과

 

Data.Class에 스테틱변수로 선언 해 두고

 

Data.변수명 으로 접근해서 사용하는데

 

어떤 차이가 있나요 ??

 

제가 해보니 클래스를 객체생성해서 접근하니 변수들의 초기값만 불러와지는것같기도 하고 이상하던데

 

스테틱변수로 선언해서 사용하니 소스코드 보기도 별로 안좋은것같고

 

퍼포먼스적으로 영향이 있을지 싶기도 하고

 

어떤 차이점이 있는지 좀 알려주세요
음무 (17,820 포인트) 님이 2014년 1월 22일 질문

1개의 답변

+1 추천
 
채택된 답변
간단하게 말씀드리면
 
클래스변수(static 변수)는 모든 인스턴스가 공통된 값을 가져야 되는 값을 클래스변수로 선언하고
인스턴스변수(Data data = new Data(); 해서 만들어진 객체 하위 변수)는  각 인스턴스만에 고유값을 가져야 될때 선언합니다.
 
jvm에 올라가는 메모리구역도 서로 다르고..
클래스변수는 값의 공유 및 정적변경이 가능합니다...
 
자바책 보믄 더 자세하게 나옵니다.
가벼운 마음으로 복습한다 생각하시고 책한번 가볍게 읽어보시는 것도 좋습니다.
 
슈루슈 (2,610 포인트) 님이 2014년 1월 22일 답변
음무님이 2014년 1월 22일 채택됨
무분별한 static함수 사용으로 인한 성능저하같은부분이 있을까요 ?
static 관련 변수들은 프로그램이 시작할 때 메모리를 잡아놓고 시작하기 때문에 무분별한 사용은 시스템을 무겁게 합니다.
지역변수로 int i를 선언해도 메모리를 잡지만 함수끝에서는 사라지죠..static은 이거와는 상관없이 별개로 잡기 때문에 꼭 필요한 부분만 사용해주시는게 좋습니다.
무분별하게 쓰기 보단 용도와 목적에 맞게 사용하는게 좋지 않나 싶습니다.
아래 링크 참고바랍니다.
http://lainman82.tistory.com/11
저같은경우는 두개의 클래스에서 데이터가 공유되면서 계속 사용되는 변수들을 따로 클래스를 만들어 전부 스테틱으로 선언해서 사용했는데
(이렇게하니 클래스간 데이터 공유가 편하더군요)
설명을 보니 그렇게 하는게 잘못된것같습니다.
데이터값이 자주 사용되고 다른 클래스와 값을 공유해야하는경우는
어떻게 사용해야하나요 ??
각 클래스 간에 메소드를 정의해서 인자값으로 필요한 데이터를 넘기는 방법도 있습니다~
항상 자바 기초가 중요하다고 느끼고 부족하다고 느끼는게 이런 기본적인 데이터 전달,공유등 입출력에서 많이 느끼는것같아요 ㅠㅠ
혹시 말씀하신 내용 관련한 url좀 알수있을까요 ??
...