사람들의 인식
대부분의 개발자들은 이런 방식에 대해 의문을 가진적이 없다고 하더라고요.. 그냥 그려려니 하고 썼다고...
그래도 집요하게 물어보고 찾아보니 스택오버플로우, 개발자 단톡방 사람들이 답변으로 해주길 한줄 다중 변수 선언은 좋지 않은 방법이라고 말하더군요...
그래서 왜? 라고 물었을때 다들 유지보수할때 한눈에 들어오지 않아서, 유지보수할때 사람은 위에서 아래로 코드를 훑는게 가독성이 좋지 한 라인에 멈춰서서 옆으로 가는건 가독성에 좋지 않다 라는게 이유였습니다.
하지만 저는 더 이해가 가지 않았죠... 가독성을 위해라면 같은 역할을 하는 변수를 묶는게 더 가독성에 좋지않나?
저게 bad한 방법이면 대체 왜 옛날 사람들은 저런식으로 언어 설계를 해놨을까... 라고 말이죠..
저는 너무 궁금해서 모든책을 뒤져보기 시작했습니다. 그리고 나온 결론이 해당 방식은 C언어 책에서 유독 정말 많이 나오는 방법이라는걸 알게 되었죠.
C 계열에서 해당 방법이 많이 나오는 이유
책을 열심히 뒤져본 결과 유독 C에서 해당 방식이 많이 쓰인다는것을 알게 되었습니다.
C계열에서 사용하는 분야는 임베디드, 시스템 언어들이 있죠...
혹시 용량 문제 때문에 그런가.. 하고 생각도 했고.. 진짜 실무에서는 아예 쓰이지 않는 방법인가? 하고 생각을한채
출근해서 회의가 끝난후 임베디드 오래 하신 대표님한테 개인적으로 질문을 해봤습니다.
대표님도 개발을 하면서 이런질문 들어보는건 처음이고 누구도 지적하지 않아서 의심해 본적은 없다고 하시면서 우선 해당 방식은 임베디드에서 많이 쓰는 방식이다 라고 하시더군요..
그리고 위와 같은 방식은 묶음 방식 이라고 말해주셨습니다.
C계열에서 많이 일하다보면 정말 누가봐도 용도가 뭔지 아는 것들
Ex) int i, j, k
혹은 용도가 함께 나와야 하는것들
Ex) Buffer in_buffer, out_buffer
을 사용할때 위와 같이 쓴다고 했습니다.
가독성 관련해서도 말씀을 해주셨는데.
그부분도 인정을 하신다면서 그럼 저걸 single line declare one variable 방식으로 바꿔쓴다면.

이런식으로 묶어서 비슷한 기능을 하는건 연달에서 써주고
다음 타입 or 기능을 하는 변수를 선언할때는 공백 라인을 준다음 변수를 선언한다 라고 하시더라고요
그리고 각 분야에 대해 정해진건 없다 무조건 이거다 라는건 없다는 말을 들으면서 생각을 좀 하고 있었습니다.
아직 이해가 안가는게 있었거든요.
그리고 대표님이 갑자기 초보 개발자들이 하는 실수에 대해 지나가는 투로 이야기 해주셨는데
"초보 개발자" 라는 말에 엄청 꽃혀서 C언어와 초보개발자, OOP 언어와 "초보 개발자" 들이 흔히 하는 실수에 대해 생각을 하게 되었습니다.
C언어 초보 개발자들의 실수
초보 개발자들이 하는 실수에는 뭐가 있을까요?
정말 대표적인 예시가 있죠 메모리 낭비를 엄청 많이 한다는겁니다.
C언어에서 초보 개발자들이 흔히하는 메모리 낭비가 뭐가 있을까요?
대표적으로 안쓰는 변수를 지우지 않는다가 아닐까요?
잠시 C언어 메모리 구조를 확인해보도록 하죠.

이런식으로 C에서는 변수를 사용하던 안하던 "선언" 만 해놓기만 한다면 메모리에 자동으로 할당이 됩니다.
이는 매우매우 중요한 사안입니다.
만약 사용하지 않는 변수가 몇바이트 먹지않는 int, char 이런게 아닌 int a [1000] 이런거라면 어떠시겠습니까?
4*1000 = 4000바이트나 먹죠? 이런게 한두개가 아니라 생각하면... 어마어마한 메모리 낭비가 아닐수 없습니다.
특히 정말 메모리를 엄청 빡빡하게 써야하는 임베디드 계열에서는 용납할수 없는 실수죠..

다시한번 위 변수들을 보시죠...
single line declare one variable 방식으로 저런식으로 "묶음" 처리해놨다면.. 안쓰는 변수를 지우면서 그대로 그와 관련된 변수를 한눈에 볼수 있으니 실수를 많이 줄일수 있습니다.
문제는 "초보 개발자" 들은 저렇게 안한다는게 문제죠..
초보 개발자들은 생각하는 방식이 저렇게 시작부터 이게 나오면... 이게 같이 나오겠군.. 이런식으로 큰 설계를 하지 않습니다.
그냥 일단 변수를 선언하고.. 쓰다가 어? 이게 필요하네? 이런 상황이 발생하면 관련된 전역변수 아래로 이동해서 변수를 선언하는게 아닌..

이런식으로 짠단 말이죠....
그렇다면 당연히 위로 갔다 아래로 갔다 하면서 실수로 사용하지 않는 변수를 삭제하지 않는 경우가 매우 많이 발생합니다.
이러한 문제를 줄이고자 한줄에 다중 변수를 선언할수 있게 해준게 아닌가... 하고 생각하고 있습니다.
OOP언어와 C의 차이
자 그럼 왜 한줄 다중 변수 선언은 C책에서 나오고 OOP 책들에서는 그렇게 선언하지 않는걸까요?
갑자기 개발자들의 역량이 강화가 되어서 실수를 거의 안하니까?
그런건 말이 안되죠?
GC ( Garbage Collection)의 등장
여러 조사를 해봤는데 한줄 다중상속이 더이상 책의 예제로 등장하지 않게 된 시점은 GC를 가지고 있는 언어들 부터 인것으로 확인이 되었습니다.
Ex. JAVA, Python, JS, C#, Kotlin ....

GC 흐름도
GC에 대한 자세한 설명은 나중에 따로 JAVA 부분에서 소개하도록 하겠습니다.
우선 대략적으로 GC가 뭔지 설명을 드리자면...
Garbage Collection 의 줄임말로 번역하면 쓰레기 수집이라는 뜻입니다.
말 그대로 메모리 영역에서 프로그래머가 동적으로 할당했던 메모리 영역중 더이상 사용하지 않는 영역을 해제하는 기능이죠..
이런식으로 처리해놓으면 개발자가 실수로 메모리 회수 코드를 짜지 않아도 알아서 메모리를 회수해주니 C와 같은 문제가 발생하지 않는겁니다..
물론 그렇다고 안쓰는 변수를 남겨도 상관없다는 소리는 아닙니다.
여러 IDE 에서도 사용하지 않는 변수는 지우는걸 추천하고있습니다.
결론
결국 한줄 여러 변수 선언은 GC가 없던 시절 초보 개발자의 실수를 그나마 줄여주려고 한 배려 였다고 생각하시면 될것 같네요.
물론 이는 여러 정보를 취합해서 결론내린 저의 의견입니다.
다르게 생각하시는 분들도 계실수 있어요.
어쨋든 변수 선언방식은 가독성을 위해서 single line declare one variable을 사용하는게 맞다고 봅니다.
또한 single line declare one variable을 사용하되 비슷한 기능을 처리하는 변수들은 아래 처럼 묶어서 사용하는게 후에 유지보수할때 완벽하다고 결론을 내렸습니다.

앞으로 코드 작성할때는 이렇게 작성
'개발관련 > 정보' 카테고리의 다른 글
개발관련 - Postman (포스트맨) (0) | 2023.07.03 |
---|---|
개발관련 - 코딩 테스트 사이트 추천 / 기업 코테용 프로그래머스 (0) | 2023.07.03 |
개발관련 - C언어 프로토타입(Prototype) (0) | 2023.07.03 |
개발관련 - 팀프로젝트 / 졸업 팀과제 조언 (0) | 2023.07.03 |
개발관련 정보 - 우리가 아는 Random은 사실 진짜 Random이 아니다. / 유사 난수 (Pseudo-Random number)에 대해.. / Random (0) | 2023.07.03 |