글로벌 변수를 사용하려면 상사에게 할 말


13

현재 인턴쉽에 4 개월이 걸리고 코드를 검토 할 때 상사는 특정 어셈블리를 여러 어셈블리에 걸쳐 여러 어셈블리에 로컬로 유지하는 것을 좋아하지 않았습니다. 그는 매번 새로운 객체를 생성하는 것을 좋아하지 않고 대신 어디서나 액세스 할 수있는 단일 객체를 생성하라고 말했습니다. 따라서 정적 클래스 내에서 정적 객체로 생성해야했으며 여기에서 단순히 참조하고 싶습니다.

내가 4 개월 동안 전문적으로 프로그래밍 한 경험이 있다면 어떻게 처리하겠습니까?


4
당신의 상사는 기술적 인 사람입니까 아니면 비 기술적 인 사람입니까? 기술적 인 사람이라면 Robert C. Martin의 "Clean Code"를 읽었습니까?
George Stocker

5
사장님이 당신을 고용해서 코딩하는 방법을 알려 주 셨나요?
Jeremy Heiler

8
당신은 아래 주석에서 "개체는 많은 상수를 제외하고 어떤 상태도 가지고 있지 않다"고 말했다. 이 경우 정적 클래스는 나에게 좋은 솔루션처럼 보입니다.
Justin

5
"Yes Boss"가 떠오른다 ...

2
"어디서나 액세스 할 수있는 단일 개체를 만들도록했습니다. 따라서 정적 개체로 개체를 만들어야했습니다."이는 올바른 추론이 아닙니다. 전체 응용 프로그램에서 단일 객체에 액세스 할 수있는 것처럼 단일 객체가 있음을 암시하는 것처럼 말합니다. 어 그리 게이션 루트에서 객체를 만든 다음 종속 클래스에 해당 참조를 전달하면 어떻습니까?
삼켜 버린 엘리시움

답변:


33

하나의 개체로 충분하면 매번 개체를 만드는 것이 낭비이며 여기에서 상사가 옳을 수 있습니다.

문제는 해당 개체에 대한 적절한 액세스입니다. 적절한 가시성을 가진 팩토리와 같은 방법으로 정적 객체가 떠오른 첫 번째 솔루션이라는 것을 항상 돌려줍니다. 다른 사람들도 분명히 존재합니다.


3
+1 : "GoF가 그렇게 말했다"라는 대답을 싫어하는만큼 옳습니다.
Javier

1
나는 싱글 톤에 대해 생각했지만 전역 변수를 감싸는 래퍼로 보았으므로 그것을 따르지 않았습니다. 객체에 많은 상수를 제외하고는 상태가 없으므로 괜찮을 것이므로 지금 시도해보십시오. 감사.
대런 영

9
나는 이것이 사실일지도 모른다고 생각했다 ( "객체는 어떤 상태도 없다 ... 많은 상수들"). 당신의 상사가 옳습니다. 결코 변하지 않는 가치에 대해 가비지 수집기에 인공적인 압력을 가하는 것은 의미가 없습니다.
Berin Loritsch

3
@ darren-young : 참고로, 상태가 없다는 것은 흥미롭고 강력한 접근 방식을 허용합니다. 아직 '함수 프로그래밍'이라고 불리는 것을 살펴보십시오.
9000

8

나는 특정 사건을 언급하지만, 전역 변수를 사용하여 할 수 있다 때로는 좋은 솔루션입니다. Java의 시스템 클래스는 정적 전역 변수로 가득합니다.

그러나 일반적으로 자신이 옳고 상사가 틀렸다고 생각하면 상사에게 전역 변수가 더 나은 해결책이라고 생각 하는지 설명해 보지 않겠습니까? 평범한 "나는 그것을 좋아하지 않는다"는 "글로벌 변수는 악하다"와 같이 모호하다. 당신은 상사에게 더 많은 것을 요구해야합니다!

그가 자신의 입장에 대한 이유를 제시 할 수없고 자신의 입장에 이유를 제시 할 수 있거나 그 반대의 경우도 마찬가지입니다. 두 사람 모두 자신의 입장을 정당화 할 수 있다면 아마도 맛이나 경험의 문제 일 것입니다. 상사는 4 개월 이상 전문적으로 프로그래밍 했어야한다고 생각합니까?


1
참조, java.lang.System정확히 3 전역 변수를 포함하고, 이들 각각에 대해 제대로 설정하는 방법이있다. 그러나 System전역 객체를 반환하는 정적 메소드로 가득 차 있으며, 이것에 아무런 문제가 없다고 주장 할 수는 없습니다.
9000

2
예; 전역 변수를 전역 객체를 반환하는 정적 메서드와 거의 동일하게 생각합니다.
Joonas Pulakka

그래서 자바는 이것을합니다. 그것이 좋은 생각인지에 대해서는 전혀 다른 질문 입니다. C의 표준 난수 생성기는 전역 상태를 유지합니다. 그러나 일반적으로 이는 끔찍 하며 임의의 숫자 생성기는 특정 응용 프로그램에서 사용할 수 없음을 인정합니다 (예 : Bentley et al., 공학 정렬 기능 참조 ). 특히 자바는 I't이 될 수 있도록 (부분적으로 C #으로 따라 개선되었습니다) 설계 문제의 호스트가 매우 이 같은 인수로 사용의주의를.
Konrad Rudolph

@ Konrald Rudolph : 결국 디자인 결정입니다. 모든 결정에는 장단점이 있습니다. 예를 들어, 글로벌 상태를 유지 System하면 남은 0.1 %의 문제를 야기하는 비용으로 99.9 %의 사용 사례 가 단순화됩니다. 0.1 %가 추가 복잡성의 가치가 있는지 여부에 대한 "올바른"답변은 없습니다.
Joonas Pulakka

5

당신의 위치에있는 누군가로서, 당신이 할 수있는 가장 많은 것은 배우는 것입니다. 객체가 본질적으로 일정한 경우 (즉, 변경할 수없고 상태를 유지할 수없는 경우), 보스가 옳을 수 있습니다. 정적 상수 객체를 갖는 데 아무런 해가 없습니다. 결국 PI에 대한 정의는 몇 개입니까?

어떤 사람들은 "전세계적인 물건이 없다"는 사고 방식을 종교적 열의로 지적합니다. 그것은 두 가지 이유 중 하나입니다. 글로벌 변수 / 객체의 과다 사용으로 인해 버그 또는 시스템 취약성을 추적하기가 어려웠거나 그것이 나쁘고 스스로 생각할 수 없다는 것을 들었습니다. 나는 개인적으로 취약성에 의해 타격을 받고 버그를 추적하기 어려운 사람들 그룹에 빠지지만 여기서 균형을 배웠습니다.

내가 당신의 신발에 있다면, 나는 계속해서 보스가 말한 것을 행합니다. 결국 그의 엉덩이입니다. 그런 다음 시간이 지남에 따라 그 선택의 효과를보고 봤습니다. 이것은 효과적인 학습 도구입니다.


인턴쉽입니다. 당신은 배우고 있어야합니다. 사장님의 말을 맹목적으로하는 것은 배우지 않습니다.
David Thornley

5
맹목적으로 당신의 상사를 대항하지도 않습니다. 저의 조언은 사장의 선택에 따른 영향을 관찰하는 것이 었습니다. 우리는 (스택 교환에서) 중요한 정보가 없기 때문에 상황에 대한 가치 판단을 할 수 없습니다. 이것은 약간의 과학적 방법을 수행하는 경우입니다. OP는 가설을 가지고 있으며, 보스는 도전했다. 이제 실험을 할 차례입니다.
Berin Loritsch

2

특정 상황에 따라 전역 변수가 최상의 솔루션 일 수 있습니다. 임베디드 프로그래밍에서 글로벌은 스택 공간을 차지하지 않으므로 이러한 이유로 좋은 선택입니다.

전 세계에 상관없이 전 세계에 접두사를 붙이는 것이 좋습니다. 이렇게하면 다른 프로그래머가 코드를 혼란스럽게 할 때 영향을 인식하는 코드를 인터넷 검색 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.