객체지향은 왜 시작되었을까.. 그리고 왜 필요한것일까.
C언어를 공부하다 C++을 접하게되면 객체지향의 필요성에대해서 의문을 가지게된다.
C언어의 순차적이고 직관적인 문법에비해, 이론만으론 추상적인 개념들에 왜 필요한지 적용하는방법에대해서도 서툴기만하다.
프로그래밍을하면 크게 변수, 함수, 그리고 제어구문 이렇게 큰틀의 반복이다.
전부 변수를 다루기위한것이다.
이런변수를 다루면서 코드의 길이가 길어지면 변수도 많아지고 함수도많아지고 지역변수도많아지고 점점 헷갈리게된다.
또한 전역적으로필요한 변수도 동류끼리 구분지어질 필요가 있을경우가있다.
객체지향은 이런 변수와 함수를 잘사용하기위해 필요하지않을까 생각한다.
객체지향의 이점중 한가지가 계통정리를 통해 동류의 변수들을 묶을 수 있다는 것이다.
또한 이런 동류의 변수를 조작하고 변형하기위해선 이를위한 동류의 함수들도 필요한데
c언어에선 코드가 길어질 수록 이런작업이 힘들어진다.
함수가 외부 변수를 조작하기위해선, 포인터를 인수로 받아야한다.
변수 명만으로 모든 데이터를 조작해야한다.
물론 구조체를 사용할 수 가있다.
구조체(public)와 클래스(private)의 차이는 기본 접근권한차이가 있고, 구조체는 변수만 다룰때 쓴다고 정리하고 넘어간다.
객체지향적 프로그래밍을 설계할때 가능하면 클래스에 모든 변수를 넣어주길바란다.
내가생각하는 가장중요한 부분이다.
외부 변수를 선언하고 전역변수를 남발하다보면 이유없는 에러에 차라리 c언어를 쓰는게 낳을수도있을것이다.
전연변수나 클래스 외부의 변수선언은 가능하면 하지말기로하자.
//
main내 변수선언은 전역변수선언과 비슷하다(변수의 순서에따라서 달라질수있다.)
main이 아닌 다른 곳에서의 변수선언은 satatic이 아닌한 휘발성이라고 생각하면된다.
심지어 main내부의 제어구문 안에서의 선언도 지역변수기때문에 구문탈출순간 날라간다. 포인터변수로 잡고 있지않는한... 하지만 이렇게 잡고있더라도 실질적 변수를 할당하지않기때문에 언제 어떻게될지 모르는 불완전한 값이다.
그렇기때문에 우리는 의미있는 값들을 지역변수로 사용해서 사용하지 말자.
지역변수는 의미있는 값들의 조작을 위해 존재하는 엑스트라로 생각하자.