왜 클래스가 필요하지?

thames의 이미지

저는 재대로 된 프로그래밍 교육을 단 한차례도 받아본 적이 없었습니다.

OO에 대한 이야기를 많이 듣긴 했지만 이게 왜 필요한 것일까. 클래스로 궂이 만들어야 할 필요가 있을까? 왜? 소스만 길어지는 것 같은데?
요즘 책 펴놓고 공부하고 뼈져리게 깨닫았습니다. 아 이래서 OO를 이야기 하는구나. 개안한 기분입니다. 세상은 넓고 배울 것은 많군요.

열심히 해야겠습니다. 흑.. 쓰고보니.. 일기가 되었네요.

ipes4579의 이미지

클래스는 필요 없다는 논지의 글인 줄 알았는데
반대였군요..
거대한 프로젝트를 해본 적 없는 저로써는 클래스가 왜 필요한 지 아직 모르겠습니다.
C가 분석하기도 더 직관적인 것 같고, 간편한 것 같고, 속도도 빠른 것 같은데 말이죠.
'이래서 00를 이야기 하는 구나' 의 '이래서'는 어떤 것인가요?

thames의 이미지

프로그래밍 한다기보다는 아는 소스를 짜맞추는 수준의 사람이었습니다. 필요에 의해 도서관리 프로그램을 만들었었는데 문서화 없이 만들다보니 다 만들고 나서 필요한 부분들이 계속 생겨나더군요. 그래서 조금씩 추가하고 고치고 하다보니 프로그램이 누더기가 되어버려 이제는 더이상 어디에 무언가 더 추가하기에 거의 불가능에 가까워졌습니다. 그래도 어떻게든 기능을 추가하기도 했는데 기존의 기능을 대체해서 빼버려야 할 기능도 있는데 빼면 몇가지 기능들에 얽혀있어 그것조차 불가능했습니다.

OO를 보고 나니 이런 생각이 듭니다.

책을 클래스로 관리했다면 DB에 등록하고 대여하고 반납하고 삭제하고 관리하는 기능을 각각 만들지 않았어도 되었을텐데. 회원도 그렇게 관리하면 더 좋지 않았을까. 각 기능에 종속성을 배제했다면 기능을 쉽사리 빼지 못하는 그런 일도 없었을테고... 기능을 추가하기에도 훨씬 간편했을텐데.

OO에 대비되어 나오는 절차지향적 프로그래밍을 했기 때문에 나타난 현상이었습니다. 아무래도 제가 직접적으로 부딪쳐 작성해보고나서 보니 왜 이걸 배우는지 알게 되었달까요. 직관적인 면에선 절차지향적인 것도 괜찮다고 느낍니다. 하지만 저처럼 기능을 추가하고 빼고 하게 된다면, 게다가 그 소스 규모가 막대하게 커지게 된다면 OO가 더 직관적이라고 느껴지네요.

뭐 절대적인 이야기가 아니라 제 경험에서 나온거라 상당히 주관적인 이야기입니다.
──────────────────────────────────


──────────────────────────────────

지리즈의 이미지

경험 부족 + 실패한 분석 + 현실성없는 설계는 차라리 ad-hoc로 짠 것 보다 그 피해가 더 심각합니다.

하지만, ad-hoc로 짜면서 OO의 필요성을 느끼셨다는 것은 정말 바람직합니다.
이게 다른 어떤 것보다 OO를 잘 구현할 수 있게 하는 가장 중요한 자질이라고 저는 생각해요.

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

unipro의 이미지

그러게요... 개념이 OO 여야 하는데, 코드만 OO 로 짜면 낭패죠.
class는 알지만, OO 를 모르는 상황이랄까...
----
내 블로그: http://unipro.tistory.com

내 블로그: http://unipro.tistory.com

카二리의 이미지

똑같이 경험 부족 + 실패한 분석 + 현실성없는 설계 라는 상황이라면
oop를 쓴 편이 안 쓴편보다 그나마 나은 코드(혹은 추후에 수정 가능할만한.. 코드)가 나올 가능성이 크다고 생각 합니다.

새 생각 :)

새 생각 :)

semmal의 이미지

제 경험에 의하면
왜 그렇게 묶었는지 이해되지 않는 20여개의 싱글톤(당연히도 서로가 서로를 참조하고 있는)만으로 구성된 cpp파일보다는
전역으로만 도배가 된 30여개의 c파일이 더 분석하기 쉬웠습니다.
왜냐하면 전역쪽이 모듈간 의존성을 알아보기 훨씬 더 쉬웠으니까요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

lowid의 이미지

그정도라면 객체지향이랑 좀 거리가 있지 않나 생각이 드네요..
C로 함수만들때, "하나의 함수에 하나의 기능만 들어가게 하고, 최대한 짧게 작성" 하면 어느정도 종속성 해결도 가능하고 말이죠.
이렇게 하다보면 라이브러리 (....) 비슷하게 만들어지게 되구요. 그리고 그걸 기준으로 계속 프로그램 작성.........
그냥 사족이었슴다 -_-, 그냥 이런 의견도 있구나~ 하는 생각으로만 봐주세여.....

---------------------------------------------
아치리눅스좀 써주세요
-> 아치리눅스 유저 좀 꼬셔오세요. 1인당 10명!

JuEUS-U의 이미지

뭐 저도 4년전에 비슷한 고민을 했었습니다 [...] http://kldp.org/node/64458
제 경우에는 단순히 'class 키워드'의 사용을 묻는 것이였지만요 /ㅅ/)333
저 때나 지금이나 OBP(Object-base programming)라고 불리는 OOP subset을 많이 선호합니다.

lkls의 이미지

직접 코드를 혼자서 다 짜서 쓰려면 OO가 무슨 필요가 있나요. C 스타일 펑션 적당히 쓰면 끝인데.

그런데 남의 코드를 가져다 쓰려면 OO가 편하죠. copy & paste보다 적당히 상속받는게 편합니다. 또 개념적으로 정리하기가 편하죠. 적당히 기능별로 코드를 늘어놓고 정리하는게 아니라 애초부터 method로 어느 object에 가져다 붙일지를 생각하게 되니 코드 규모가 커져도 관리가 잘 됩니다. 또 남의 코드와 내 코드가 분리가 잘 되니 저쪽에서 버전업을 해도 이쪽에서 패치할 것이 크게 없습니다.

OO의 문제점이라고 하면 역시나 처음 배울때 이게 무슨 소린지 싶은데 그건 자동차 운전 배우는 것과 비슷하다고 봐야죠. 처음에 좀 힘들어도 잘 배워 놓으면 쓸모가 많은게 OO라고 봅니다.

pokev25의 이미지

클래스가 필요한것도 있고

c형태의 함수가 필요한것도 있고

필요한대로 만들어 쓰면 되는게 아닐까 싶습니다.

가볍게 여기저기 api호출 하듯 쓰는건 c형태로

연관된 일련의 작업들은 클래스로 해두면 배치 스타일로 돌리거나 스레드로 바꾸거나 하는게 쉽죠.

iamt의 이미지

OOP를 하는이유는 소스 유지보수의 목적이 가장 크지않나요?
---------------------------------------------------------------------------------
C(++)과 php 펄등을 공부하고있습니다.
반갑습니다! 리눅스 :-)

---------------------------------------------------------------------------------
C(++)과 php 펄등을 공부하고있습니다.
반갑습니다! 리눅스 :-)

mac040의 이미지

결국에 덩치가 커지다보면 C++처럼 코딩 스타일이 바뀌는 경우도 많죠..

그냥 C를 이용해도 OOP 개념을 이해하고 이용하는것과 아닌 것은 차이가 큰 것 같습니다.

특히나 고수들의 코드들을 보면...

madman93의 이미지

%% ^^
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

yoojioh의 이미지

OOP에 대해 배우면서 프로그래밍을 시작했어도
막상 배울 때에는 왜 이런 짓을 하나 싶었습니다만
갈수록 숙제 덩치가 커지고 그룹으로 프로젝트 하고 하면서
조금씩 깨달아 가는 것 같습니다.

프로그래밍에 관해 완전 무지한 친구가 처음 프로그래밍 수업 들을 때
기존에 잘 작동하던 코드를
왜 굳이 function 혹은 method로 빼서 쓰느냐에 대해 아무리 말해줘도
이해를 못하다가도
학기 중반이 되면 너무나 당연히 이해하던 것이랑 비슷한게 아닐까 싶어요