MainWindow Class 에서 정의한 전역변수 값을 타 Class 에서 불러오기 위해
MainWindow mainwindow = new MainWindow(); 요런식으로 타 Class 에서 객체를
선언하고 사용하려고 했는데… ‘null’ 값이 반환됩니다 혹시 이런식으로 사용하면 안되는건가요 ?
MainWindow 에서 해당 전역변수 디버그 했을때는 값이 저장된것을 확인했습니다.
c 언어는 처음이라… Class 생성하는 기준을 잘 모르겠는데 보통 코드 작성하실때 어떤 기준, 조건이
있으면 Class 를 생성해서 작성하는지 기준이 있을까요 ? 저 같은 경우 예를 들어
Dll import 하는 메소드를 특정 Class 로 정의해서 모아서 관리합니다
맘같아서는 MainWindow Class 에 다 때려박고 사용하고 싶은데 ㅠㅠ 혹시 관련 글 있으시면 연결 부탁드립니다
안녕하세요!
질문글의 해석이 여러가지가 가능합니다. 그래서 답변을 안하시고 가시는 분들이 있을거에요.
질문을 자세히하면 좋겠죠. 근데 초보라서 자세히 못하실거 같아요.
제 맘대로 해석한바에 따라 답변을 드릴게요. 조금이라도 도움 되시라는 마음입니다.
MainWindow → mw 라고 줄여쓸게요.
“전역” 이라는 단어를 쓰셨는데 그게 static 필드를 의미하시는건지요? (필드:클래스 내 멤버변수)
아닐 것 같아요. 왜냐하면 static 필드라면 타 클래스에서 mw의 객체를 초기화할 필요 없이 mw.그변수 로 바로 사용 가능하거든요.
그러면 어떤 뜻으로 썼는지 상상을 해보자면 초보라서 클래스, 객체, 필드 개념이 안잡혀 있으신 것으로 전제하면,
[mw 안에서라면 어디서에든 접근가능한 변수 = 전역변수] 라고 생각하시는 것 같습니다.
한 클래스 내의 필드들은 당연히 클내스 내에서는 어디서든 접근 가능한거에요. 클래스 개념이 있는 패러다임에서의 전역은 다른데 써야 적절한 단어이지요.
아무튼 여전히 추정 상황입니다. 평범한 mw의 필드가 (static도 아님) 두 개의 mw 객체 내에서 공유되지 않습니다. null이 반환될 수 있어요.
mw의 객체 A에서 문자열필드를 초기화하셨고 뭐 “hello” 를 할당했다고 할게요. 타 클래스에서 mw를 초기화하셔서 객체 B를 만드셨는데 B의 그 필드는 null이죠.
타 클래스에 객체 A를 참조가능하게 하시면 타 클래스 내에서 A의 필드를 접근가능할 수 있습니다. 필드의 한정자가 private 이상이어야겠죠.
아니면 타 클래스에서 새 객체 B를 만드셔도 A 객체와 같은 값을 가지고 싶으시다면 필드를 static으로 그리고 한정자도 private 이상으로 만드시면 됩니다. 근데 그러면 사실 B 객체를 만드실 필요가 없습니다. 위에 처음에 썼어요.
클래스를 언제 생성하느냐. 이건 음 사고방식 같은거에요. 관점? 의도?
때때마다 다른 기준으로 클래스를 정의하셔도 되요.
언제나 쓴이분에게 유지보수,디버깅,비용,재사용용이성 등등의 여러항목을 최대한으로 효율적이게 해줄 수 있는 설계대로 클래스들을 정의하시면 됩니다. 실력은 아날로그 적으로 발전되시는 것이고 “딱 이러이러하다” 라고 한 방에 탑재되는 아이템이 아니에요. 객체지향 설계적 사고력이 개발되셔야하는 것이에요. 그래서 답글로는 물리적으로 전수해드릴 수가 없고. 많이 보시고 많이 만들어보시고 (단, 더 나은 것을 항상 추구하고 변화를 받아들여야함) 해야겠죠. 추천드리는건 기승전책입니다. 책 많이 보셔요.
무엇을 모르는 사람은 뭘 모르는지도 모릅니다. 찾아서 공부하기엔 얻어걸리는거에요. 책에는 타인이 가진것을 다 써놓았죠. 있는지도 모르는걸 배울 확률이 다른것보다 매우 높습니다.