PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/05/11 11:42:55
Name 창천룡
Subject OOP가 가지는 장점이 뭔가요?
C와 비교해봤을 때 OOP(C++나 JAVA등)가 어떤 면에서 장점을 가지고 있나요?

JAVA를 기초부터 공부하고 있는데 기본적으로 OOP가 가지는 특성이 어떤 때에 효과적으로 발휘 될 수 있는지 아직

개념이 안 잡힙니다. 이를테면 똑같은 걸 C와 JAVA로 프로그래밍한다면 JAVA로 프로그래밍하는 것이

더 좋은 경우가 있기 때문에 JAVA를 쓸거라 생각하는데 그럼 실제로 어떤 경우에 OOP가 더 효과적으로 사용될 수 있나요?


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
꿀호떡a
10/05/11 11:49
수정 아이콘
OOP는 사용자 입장에서의 기능 자체에 영향을 준다기 보다는 프로그래머 입장에서의 코딩의 효율성을 높여주는 일종의 방법론이라고 보시면 될 것 같아요.
일단 모든 기능이 아주 작은 단위로 모듈화되어있기 때문에, 설계하기 쉽고 특히 유지보수하기에 편하죠.
LightClassic
10/05/11 11:50
수정 아이콘
저는 재사용성 하나만으로도 충분히 매력적이라고 생각합니다.
꿀호떡a
10/05/11 12:07
수정 아이콘
예를 들어, 프로그램 A에 기능 #을 추가한다고 생각해보세요.
만약 A가 절차적 프로그래밍으로 만들어져 있다면, 기능 #을 추가하기 위해서는 코드 어딘가에 기능 #을 추가해주어야 할텐데, 기능적으로 명확히 구분되어있지 않다면 어디에 추가해야 할지도 명확하지 않고 #을 추가하더라도 다른 모듈이 정확히 잘 작동할지 보장할 수 없죠. 게다가 대부분의 경우 코드를 리뷰하는데에만도 많은 시간을 쏟게 됩니다. 자기 자신의 소스도 몇 달 지나면 까먹기 마련인데, 하물며 다른 사람이 내 소스를 유지-보수 하는 경우에는 그야말로 헬이죠.

하지만 OOP로 구성되어 있다면, 기능 #에 관련된 객체들을 알 수 있으니 코드 어디에 무엇을 추가해야 하는지 명확해지고, 거기에 #에 대한 모듈만 코딩해주면 나머지 모듈은 전혀 건드리지 않았기 때문에 잘 작동할 것이라는 걸 보장할 수 있죠.

음, http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C++/Documents/Object_Class#s-3.4.1 를 한번 읽어보셔요.
카스트로폴리
10/05/11 12:11
수정 아이콘
저는 재사용성 하나만으로도 충분히 매력적이라고 생각합니다. (2)
Cazellnu
10/05/11 12:31
수정 아이콘
저는 사실 매력을 잘 못느낍니다. 그래도 사용은 합니다.
어플리케이션개발을 하지 않아서 그런걸지도 모르지만..

자바같은경우는 다른것보다 자바가상머신때문에 많이쓰이는데 역시나 로우단에서는 쓰일일이없어서..
10/05/11 13:06
수정 아이콘
간단한 프로그램을 만드실때는(1천 라인 정도?) C 같은 절차지향적 프로그래밍 방식이 훨씬 코드도 짧고 단순하고 개발도 빠르죠.
적어도 1만 라인은 넘어가는 코드를 만들어봐야, 아~~~ 이래서 사람들이 OOP를 하는구나~ 하는겁니다.
그리고, 수십만 라인이 넘어가게 되면, 그것도 모잘라서 디자인패턴이니, 리팩토링이니... 하는걸 찾게 되구요.
게다가 여러 프로그래머들과 혐업을 하게 되면, 더 크게 다가오는게 OOP 입니다.
처음에는 대체 왜 이런 귀찮은 짓을 하는지 잘 모를거에요.
아스트랄
10/05/11 13:13
수정 아이콘
이전에도 어느글인가에 달았던 기억이 납니다만 못 찾겠네요.
그냥 다시 적어볼게요.

프로그래밍이라 함은 우리의 현실세계를 컴퓨터 세계로 형변환을 하는 겁니다.
이 형변환을 하는 방식이 절차적 프로그래밍일 경우는 순차, 반복, 분기로 표현하는 겁니다.
객체지향적 프로그래밍에서는 이걸 객체 ( 상태와 행동으로 이루어져 있음 )와 객체간의 관계로 표현하는 겁니다.
절차적( 즉 하나의 흐름 ) 으로 현실세계를 표현하려고 하다 보니 모델링이 너무 복잡하게 얽히게 됩니다.
그래서 좀 더 현실세계와 비슷한 방법을 찾아서 나온 것이 OOP입니다.

요즘 시대에 잘 짜여진 프로그래밍이라는 건 유지보수성이 좋은 프로그램을 말합니다.
( 예전엔 퍼포먼스가 좋은 프로그램이었습니다. ) OOP 가 이 유지보수성에 더 적합할 뿐입니다.
예를들어 AMPS 방식을 사용하던 핸드폰을 CDMA 방식으로 변경한다고 하더라도 내가 핸드폰을 사용하는데 부분은 전혀 변경할 필요가 없습니다. 다만 핸드폰 객체 내부적인 소스들을 변경할 뿐이죠.
따라서 좀 더 OOP 적으로 만들기 위해선 객체를 잘 설계해서 다른 객체와의 관계를 최소한으로 줄이는 것이 중요합니다. ( 이것을 의존성을 줄여야 한다고 부르고 스프링의 IoC(inversion of control) 가 이것이라고 보시면 됩니다. )
이것이 제대로 되지 않으면 OOP로 짜는 의미가 없어지죠.

음 그림을 그려가면서 설명하면 훨씬 쉽게 설명할 수 있을 듯한데 글로만 하려니 힘드네요.
MoreThanAir
10/05/11 13:24
수정 아이콘
저는 객체지향을 좋아하는 이유가 우리가 실제 세상에서 생각하는 방식과 흡사하기 때문입니다. 각 객체들은 그만의 특성을 가지고 있고 그것들은 상호작용을 하며 살아가죠. OOP로 프로그램을 짜다보면 절차식 프로그램은 불편해서 하기 싫어지던데요...흐흐
몽키.D.루피
10/05/11 14:01
수정 아이콘
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/SoftWare_engineering/OOP#s-1

전 이쪽 전공이 아니라 잘은 모르지만 이런 글이 있더라구요.
10/05/11 14:13
수정 아이콘
요즘엔 대부분의 application 은 객체지향적인 방법론을 씁니다.
설령 c 로 코딩하는 프로젝트가 있다 하더라도 최대한 구조화 하고 좋은 설계를 통해 유지, 보수 비용을 줄이려고 하죠.
데이터와 함수의 인터페이스를 일관성 있게 설계하고,
서로 관련된 데이터와 함수를 모으고, 일관성 있고 체계적인 naming 을 하는 등등 ...
data abstraction, encapsulation 하는 것들입니다.

C++ , Java, Objective C 같은 언어들은 이러한 구조적이고 체계적인 코딩 방법을 언어적으로(혹은 문법적으로)지원합니다.
다시 말해서 C 에서 여러가지 테크닉을 사용해서 (조금) 어렵게 구현하는 것을
oop 언어에서는 비교적 쉽게 객체지향적인 방법으로 코딩이 가능하다는 말입니다.
창천룡
10/05/11 16:46
수정 아이콘
답변 해주신 분들 모두 감사합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
81406 동남아 휴양지(발리, 푸켓, 세부등), 괌, 사이판등에 대하여 [4] 달걀껍질3150 10/05/11 3150
81405 잠 몇시간 자시나요? [16] Benjamin Linus3070 10/05/11 3070
81404 KOF 좋아하시는 분 있나요?? 스토리 질문입니다. [5] CakeMarry2415 10/05/11 2415
81403 여자친구를 위한 피아노곡. [10] BestOfBest2789 10/05/11 2789
81402 닭가슴살 질문입니다. [7] 김병장님2302 10/05/11 2302
81401 소녀시대 팬들은 티아라 소연에 대해 어떻게 생각하나요? [13] let8pla3520 10/05/11 3520
81400 넷북 무선랜카드가 이상합니다. [1] 현상2074 10/05/11 2074
81399 경북 북부에 5월에 놀러가기 좋은곳 없나요? [7] 天飛2422 10/05/11 2422
81397 화학 질문인데요 [6] 인필드2132 10/05/11 2132
81396 노트북에 콜라를 쏟았습니다... [11] Roro4471 10/05/11 4471
81395 컬트삼총사는 왜 컬투로 바뀌고 그 한 분이 탈퇴하게 된것이죠? [6] IHG CP4256 10/05/11 4256
81394 이런 심리를 설명하는 전문용어가 있을까요? [19] 교회오빠2310 10/05/11 2310
81393 아무리 뒤적거려봐도 답이 안나옵니다..도와주세요 ㅠ [8] 가람휘1936 10/05/11 1936
81392 한국 드라마의 시즌제 도입은 불가능한가요?? [10] CoralEyez2176 10/05/11 2176
81391 스타 리플 다운받을 수 있는 곳 질문입니다 [1] Harq2089 10/05/11 2089
81389 소켓 프로그래밍 질문입니다. 도와주세요! [15] AriENai2112 10/05/11 2112
81388 남성 화장품 질문입니다. [4] 노력하는나2088 10/05/11 2088
81387 OTP S/KEY 방식이 쓰인 부분 아시는 분 [2] EZrock2642 10/05/11 2642
81385 목감기면 이비인후과가나요? [8] 아레스2290 10/05/11 2290
81384 PvsT 경기 [5] 도동공용1944 10/05/11 1944
81383 OOP가 가지는 장점이 뭔가요? [11] 창천룡4515 10/05/11 4515
81382 체리갈축 키보드를 사려고 합니다. [4] kapH2285 10/05/11 2285
81381 인천공항 세관 통관 절차 질문입니다. [6] 지금잠이옵니4882 10/05/11 4882
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로