[질문] 글로벌 변수를 쓰면 않좋은 이유를 혹시 아시나요??
글쓴이: kkamagui2000 / 작성시간: 수, 2004/05/12 - 2:39오후
안녕하십니까 까마굽니다 (__)
제가 오늘 선배랑 이야기 하다가..
OOP에서 글로벌 변수를 쓰기를 꺼려한다는 이야기를 들었는데요..
이유가 궁금합니다.. 글로벌 변수를 사용하면 잃는 부분이 있는가요??
저는 글로벌 변수 사용에 별로 거부감을 가지고 있지 않거든요..
이유가 있나요??
그럼 좋은하루 되세요 (__)
Forums:
Re: [질문] 글로벌 변수를 쓰면 않좋은 이유를 혹시 아시나요??
글쎄요.. 비유가 적절할진 모르겠지만,
글로벌 별수를 사용하는 것은 화장실 벽에 낙서하는 것과 비슷하다고 생각합니다.
만일 제가 중요한 사항을 화장실 벽에 기록했다면, 그 내용은 누구라도 지우거나, 수정할 수 있습니다. 나중에 제가 같은 곳에 가서 그 내용을 확인 했을때,
그 내용이 내가 예전에 썼던 그 내용과 완전히 동일 하다고 보장 할 수 있을까요?
OOP개념의 책을 보면 마니 나오는 내용입니다만..모 간단히 이야
OOP개념의 책을 보면 마니 나오는 내용입니다만..
모 간단히 이야기하면 의존성이겠지요..
Class로 만들고 그걸 오브젝트 개념으로 접근을 하고
사용을하기때문에 Class <-> Global 변수와는..
관계를 만드는것은 거의 불필요한관계라고 볼수있지요..
의존성이 생기면 그것은 캡슐화나 재활용성에 대해..
위협을 가하는 요소가 되니까요, 보통 그런코드들은
버그를 유발하는경우도 꽤 됩니다 ^^;;
역시 머리속으로 개념을 이해하고 감을 잡고있는거랑
또 설명을하는거랑은 엄청난 차이네요.. 휴우 객체지향은
깨달음이 중요하지요..
' 형식이 내용을 규정한다. '
제 경험상으로는OOP의 3가지 원칙중에 은폐성에 위배가 되기 때문입니
제 경험상으로는
OOP의 3가지 원칙중에 은폐성에 위배가 되기 때문입니다.
글로벌 변수들은 보호받지 못하죠...
There is no spoon. Neo from the Matrix 1999.
OOP가 아니라도 글로벌 변수는 되도록 쓰지 않는 게 좋습니다. 문제가
OOP가 아니라도 글로벌 변수는 되도록 쓰지 않는 게 좋습니다. 문제가 생기면 어디서 이 변수를 건드렸는지 찾기 힘들기 때문이죠.
세벌 https://sebuls.blogspot.kr/
작은 프로젝트면 상관없어요. 오히려 적당한 글로벌 변수는 프로그램을 아주
작은 프로젝트면 상관없어요. 오히려 적당한 글로벌 변수는 프로그램을 아주 쉽게 만들죠. 그래서 글로벌 변수의 유혹을 이기기 힘든거구요.
근데 파일이 좀 많아지고 프로젝트가 커지면 글로벌 변수는 독약입니다. 말그대로 소스의 모든 부분에서 그 변수를 건드릴수 있기 때문에 sebul님 말씀대로 역학조사가 아주 어려워 지죠.
산넘어 산
소스가 방대해지면 가독성이 떨어 집니다.사람의 기억력은 한계가 있기때
소스가 방대해지면 가독성이 떨어 집니다.
사람의 기억력은 한계가 있기때문에 나중에 .......
프로그램을 짜면서 global변수의 거부감은 가지지 않아도 관계 없습니다.
그러나 여러 파일에서 global변수를 access하는데 대해서는 거부감을 가지시는게 ...
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
소스 코드 여기 저기서 접근가능 하다 !?[quote]글로벌
소스 코드 여기 저기서 접근가능 하다 !?
어떻게 내가 만든 프로그램의 변수를 아무나 와서 바꾸죠..?
OOP의 개념에 위배된다.
절차 지향 언어인 C를 사용해 코딩을 하는데, 객체지향의 원칙이 왜 나오죠.?
등등등.. (딴지 걸려구 했던거 아니니 기분들 상하지 마시길...)
1. 전역변수에 문제가 생기면 어디서 잘못됬는지 즉 어느 부분에서 이값을 바꿨는지 찾기 힘들다.
2. 프로젝트의 규모가 커지고 참여 인원이 늘어 나면 name space pollution 우려가 있다.
3. 코드(함수) 재활용을 어렵게 만든다.
1번의 경우 여러 분들이 지적을 했습니다.
2번 경우, 외부에서 제작한 오브젝트 파일을 가져다가 쓸때, 간혹 일어 나는데, 원인 찾기가 힘듭니다.
3번경우, 어떤 프로젝트에서 전역변수를 사용하는 함수가 있다면, 다른 프로젝트에서 이 함수를 그냥 가져다 쓰기 힘들 겁니다. 전역변수를 사용하는 함수는 거의 해당 프로젝트에서만 사용가능 하죠.(머 비슷한 예로.. 함수가 다른 함수를 호출 할경우도 그렇죠. 이런경우를 라이브러리로 만들지 않겠죠.)
지금 진행 중인 프로젝트에서 제가 확인한 전역변수 갯수가... ㅎㅎ 상상을 초월합니다. 전역변수를 사용하면서도 문제를 줄일수 있는 방법이 있더군요.
기능에 따라 계층모델을 만들고... 각 계층은 정해진 인터 페이스만으로 데이터를 주고 받는 다는... 함수 재활용쪽을 빼고는 언급되었던 부분의 문제들은 상당히 줄어 들더군요.
Do you think that's the air you are breathing now?
[quote]절차 지향 언어인 C를 사용해 코딩을 하는데, 객체지향의 원
질문자님께서 OOP에 관한 언급을 하셔셔 나온것 같군요.
C라고 한분은 아무도 없으신데.. 또 c라고 하더라도 oop가 나올수 있습니다.
절차지향이지 절차만 된다라고 못 박을 수 없고요.
말씀하신 부분자체가 상당부분 글로벌 변수의 기능을 제한하고 있는겁니다.
기능의 일부를 제거(개발자 수준에서)해서 문제가 줄어든겁니다.
상당부분 문제가 준만큼 글로벌 변수가 문제점이 있다는 거죠..
추가로
이부분의 간혹 일어났다 말씀하시는데 개발시에 각 개발자들간에 변수에대한 조율을 했기 때문에 발생을 하지 않았을 가능성이 높습니다.
global변수를 사용하지 않는다면 이에 대한 변수 조율을 위한 overhead가 발생하지 않겠죠.
그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.
http://c2.com/cgi/wiki?GlobalVariablesAr
http://c2.com/cgi/wiki?GlobalVariablesAreBad
----
I paint objects as I think them, not as I see them.
atie's minipage
글로벌 변수를 쓰면 reentrant하지 않기 때문에 그런 이유도 큽니다
글로벌 변수를 쓰면 reentrant하지 않기 때문에 그런 이유도 큽니다.
=-=-=-=-=-=-=-=-=
http://youlsa.com
[quote="운형"]소스 코드 여기 저기서 접근가능 하다 !?[
C 라하더라도 구조화를 하기위해선 오토변수쓰는게 좋습니다.
전역이 유리한점은 함수간의 값의전달이 불편하다는것인데 구조화가 잘되면
전역보다 오토변수가 훨씬편하다는걸 느낍니다.
재귀적호출구조나 함수재사용측면만보더라도 전역은 있어서는 안될존재입니다
함수하나에 if 문을 수없이 나열하는식의구조는... NO 입니다.
----------------------------------------------------------------------------
댓글 달기