객체 지향 이 무엇 인지 알 기 위해서 는 우선 객체 지향 프로그래밍 이 왜 생겼 는지 를 알 아야 합니다 . ( 왜 생겼 을까 . . ㅡ . ㅡ ? ) 우선 순차 적 ( 구조 적 ) 프로그래밍 의 대안 으로서 등장 한 것 이 바로 객체 지향 프로그래밍 ( OOP ) 입니다 . 그러면 순차 적 프로그래밍 은 또 무엇 인가 하 면 . . 쉽 게 예 를 들 자면 도스 모드 에서 디스크 를 포맷 하 는 경우 를 들 수 있 습니다 . 해 보 셨 는지 는 모르 지만 키보드 로 c : > format c : 라고 치 면 정말로 포맷 할 것 인지 를 user 에게 물어봅니다 . 여기 서 Y 를 누르 면 포맷 이 진행 됩니다 . 그리고 나 서 레이블 ( 디스크 의 이름 ) 을 입력 하 라고 나오 면 사용 자 는 이름 을 입력 하 면 됩니다 . 그 다음 단계 로 다른 디스크 를 포맷 할 것 인지 물 어 보 고 사용 자 가 Y 를 입력 하 면 위 의 과정 이 반복 되 죠 . ... 구조 적 프로그래밍 은 이렇게 사용 자 의 의사 와 는 상관없이 일방 적 으로 진행 됩니다 . 프로그래밍 에 는 흐름 ( Flow ) 이 있 어서 사용 자 는 이 흐름 에 따라서 자료 를 입력 하 거나 선택 을 해야 합니다 . 도스 모드 에서 " 나 는 이름 을 먼저 입력 하 고 싶 어 ! !" 라고 해서 그렇게 되 는 건 아닙니다 . 이게 바로 구조 적 프로그래밍 은 특성 입니다 . 단 방향 , 일방 성 . 그런데 . .. 이게 왜 문제 가 되 냐면 . .. 사실 객체 지향 이전 의 프로그래밍 환경 에서 어떤 프로그램 을 개발 한다는 건 거의 한 사람 이나 두 사람 의 특출 한 재능 에 의존 하 는 경우 가 대부분 이 었 습니다 . 천재 가 쨘 ! ! 하 고 나타나 서 남 들 이 알아볼 수 없 을 만큼 난해 한 프로그램 을 만들 어 내 곤 했 죠 . ..( 영화 나 소설 속 에서 도 이런 천재 들 이 등장 하 는 듯 . ..) 그 사람 혼자 만 알 수 있 고 나머지 는 모르 는 상황 , 바로 이게 문제 였 습니다 . 예 를 들 어서 어떤 자동차 회사 가 프로그램 개발 업체 에다가 자신 들 이 사용 할 프로그램 을 개발 해 달 라고 했 다고 치 죠 . 개발 업체 차원 에서 는 가능 하 면 적 은 돈 으로 좋 은 품질 의 소프트웨어 를 만들 어 내 야지 돈 을 많이 벌 수 있 을 겁니다 . 소프트웨어 를 빨리 만들 어 내 려면 여러 명 이 협력 해서 작업 에 참여 해야 합니다 . 게다가 간단 한 프로그램 이 아닌 아주 커다란 프로그램 의 경우 에 는 제아무리 천재 라도 혼자 서 일 을 다 감당 못 합니다 . 이 때문 에 사람 들 과 의 협력 은 필수 가 되 는 것 입니다 . 그런데 구조 적 프로그래밍 의 경우 는 직접 프로그래밍 을 해 보 시 면 알 겠 지만 큰 소프트웨어 를 분할 해서 " 너 는 이 부분 을 만들 고 너 는 이 부분 을 만들 고 나 는 이쪽 부분 을 맡 고 . ." 이게 상당히 어렵 습니다 . ( 객체 지향 에 비해서 . .) 상당히 어렵 다는 것 은 개발 기간 이 길 어 진다는 것 을 의미 하 고 사장 의 입장 에서 보 면 인건비 가 더 많이 들어가 겠 죠 . .. 결국 이득 이 줄어드 는 것 입니다 . 하지만 . .. 더 큰 문제 는 구조 적 프로그래밍 환경 에서 는 프로그램 의 유지 보수 비용 이 더 많이 든다는 것 입니다 . ( 사실 이 이유 가 객체 지향 이 라는 새로운 패러다임 을 만들 어 낸 이유 입니다 . ) 내 가 30 만 원 짜리 소프트웨어 를 주문 해서 쓴다면 이 프로그램 을 쓰 고 폐기 할 때 까지 유지 보수 비용 이 무려 70 만 원 이 들어갔었 습니다 . 배 보다 배꼽 이 더 크 죠 . .. 소프트웨어 를 주문 해서 사용 하 는 일반 사업체 들 입장 에서 는 구입 비용 보다 유지 보수 비용 이 더 많 으니 기분 이 나쁘 겠 죠 . .^^;;; 소프트웨어 에 대한 사람 들 의 수요 는 늘어나 는 데 비해 기존 의 프로그래밍 방식 으로 는 이 수요 를 감당 할 수 없 는 상황 에 점차 다가오 고 있 었 습니다 . ( 오랜 개발 기간 , 유지 보수 비용 의 증가 등 ) 이런 이유 들 때문 에 사람 들 은 뭔가 프로그래밍 환경 에 일대 변환 이 필요 하 다고 생각 했 습니다 . 간단 하 게 위 의 내용 을 정리 하 면 기존 의 프로그램 방식 에서 는 . 1 . 소프트웨어 가 시장 에 진출 하 는데 오랜 시간 이 걸렸 다 . 프로그램 은 일단 시장 에 먼저 내놓 는 쪽 이 절대 적 으로 유리 함 . 맨 처음 에 알집 써온 사람 은 웬만 해서 는 다른 압축 프로그램 을 사용 하 지 않 으려 함 ( 이게 인간 의 심리 임 . .). 그런데 개발 기간 이 길 다는 것 은 다른 개발 업체 가 먼저 시장 을 잠식 할 가능 성 이 높 다는 뜻 이 기 도 함 . ... 2 . 유지 보수 비용 이 너무 많 았 다 . - 배 보다 배꼽 이 크 다고 몇 백만 원 짜리 프로그램 개발 을 의뢰 해서 사용 하 는 데 사업 규칙 이 변함 에 따라 유지 보수 하 는데 몇 천만 원 이 들어가 기 도 함 . .. 3 . 사용자 에게 친숙 하 지 않 았 다 . - 단순 한 텍스트 모드 와 일방 적 인 흐름 은 사람 들 에게 컴퓨팅 환경 에 익숙 치 못하 게 했었 다 . . 따지 고 보 면 결국 " 돈 " 때문 입니다 . 객체 지향 이 생겨난 이유 가 . .. 객체 지향 의 특징 도 결국 위 의 단점 을 극복 해서 " 돈 " 을 더 많이 벌 어 보 고자 하 는 것 이 죠 . . 그럼 객체 로 나눈 게 뭐 가 좋 을까 ? 기존 의 구조 적 방식 과 는 다르 게 유지 보수 하 기 가 좋 습니다 . 유지 보수 하 기 가 좋 다는 것 은 유지 보수 비용 이 줄어든다는 것 을 의미 합니다 . 상당 한 이득 이 겠 죠 . . 예 를 들 어서 구조 적 방식 에서 는 하나 의 data 값 을 참조 하 는 함수 가 여러 개 존재 합니다 . ( 거미줄 처럼 복잡 하 게 참조 가 일어남 . ) 그래서 data 의 이름 을 바꾸 거나 자료 형 을 바꿔야 하 는 상황 이 오 면 이 data 를 참조 하 던 모든 함수 를 일일이 다 고쳐 줘야 합니다 . 수십 수백 메가 짜리 상용 소프트웨어 라고 생각 해 보 십쇼 . 정말 끔찍 하 지 않 습니까 . . ㅡ . ㅡ ;;;;;; 하지만 객체 로 프로그램 단위 를 나눈다면 이런 문제점 을 말끔 해결 할 수 있 습니다 . 이 객체 가 가지 고 있 는 data 는 다른 객체 가 직접 참조 를 하 지 못하 게 하 고 오로지 객체 가 가지 고 있 는 메소드 를 통해서 값 을 넘겨 주 는 겁니다 . ( 이걸 보 고 Encapsulation 이 라고 하 죠 . .) 그리고 객체 를 이용 함 으로써 개발 시 에 프로그래밍 의 분할 이 쉬워졌 습니다 . 객체 지향 방식 에서 는 여러 명 이 소프트웨어 를 각자 구현 해서 연결 시키 는 일련 의 과정 을 아주 매끄럽 게 할 수 있 기 때문 에 제품 을 시장 에 내놓 는 기간 이 많이 단축 됩니다 . 개발 업체 의 입장 에서 본다면 개발 비용 을 줄일 수 있 습니다 . 또한 이미 만들 어 놓 은 객체 를 다시 활용 해서 다른 프로그램 을 마치 레고 블럭 조립 하 듯이 만들 어 내 는 것 도 가능 합니다 . 컴포넌트 라는 것 이 있 는데 말 그대로 특정 기능 을 수행 하 는 객체 를 말 합니다 . 일단 컴포넌트 들 을 적절히 만들 어 놓 기 만 하 면 이후 에 는 이것 들 을 재 사용 해서 전혀 새로운 프로그램 을 만들 어 낼 수 도 있 습니다 . ( 적어도 이론 상 으로 는 이렇 습니다 ) 또한 GUI 환경 을 가능 하 게 했 습니다 . 객체 지향 의 이념 은 GUI 라는 전혀 새로운 인터페이스 를 제공 하 는 데 큰 역할 을 했 습니다 . GUI 에서 드라이브 를 포맷 할 때 는 포 멧 창 에서 버튼 을 누르 고 이름 을 입력 하 고 취소 하 고 싶 으면 취소 하 고 포맷 방식 을 바꾸 고 싶 으면 바꿔도 됩니다 . 사용자 위주 로 돌아서 게 됐 죠 . . 이런 것 들 이 가능 하 게 된 것 도 GUI 와 내부 동작 을 연결 시키 는 데 객체 지향 패러다임 이 크 게 작용 했 다고 볼 수 있 습니다 . � 체 지향 은 새로운 패러다임 입니다 . 당분간 은 객체 지향 에서 큰 문제점 이 발견 되 지 않 는 이상 소프트웨어 개발 에 있 어서 반드시 따라야 할 흐름 이 되 지 않 을까 싶 습니당 . 하지만 먼 훗날 에 는 바뀌 겠 죠 . .^^ 전혀 새로운 컴퓨터 Architecture 가 등장 해서 이 를 지원 하 기 위한 새로운 개념 의 프로그래밍 방식 이 필요 하 다가 느껴진다거나 한다면 말 이 죠 . = = = = = = = = = = = = = = = = ========================= 만약 OOP 의 개념 을 명쾌 하 게 설명 할 수 있 다면 . . 정말 고수 지요 . .^^ 현재 프로그래밍 에서 어떠 한 문제 에 접근 할 때 순차 적 으로 보 는 것 과 객체 지향 적 으로 보 는 것 두 가지 가 있 습니다 . . 순차 적 으로 보 는 것 은 말 그대로 하나 하나 위 에서 부 터 해결 해 나가 는 것 이 죠 . .. 예 를 들 어 구구단 을 짠다고 한다면 . . 순차 지향 적 이 라면 . . 2 단 부터 합니다 . . 2 단 을 9 까지 곱해서 출력 합니다 . . 3 단 을 합니다 . .~~~ 9 단 까지 합니다 . . 이런 식 이 되 겠 지요 . . 이걸 객체 지향 적 으로 생각 한다면 . . 일단 구구단 의 객체 ( ? ) 를 만듭니다 . . 어떠 한 수 를 받 아서 이걸 9 까지 곱해 주 는 거 죠 . . 그리고 출력 하 는 객체 를 만듭니다 . . 어떤 수 를 받 으면 그걸 찍 어 주 는 거 죠 . . 그 담 에 2 ~ 9 까지 구구단 객체 를 생성 합니다 . . 그럼 구구단 객체 는 수 를 받 아서 다시 출력 하 는 객체 를 생성 하 고 출력 하 는 객체 는 수 를 받 아서 출력 합니다 . 어떻 게 보 면 객체 지향 적 언어 가 더 복잡 해 보이 지만 . . 큰 프로그램 을 만들 때 엔 유지 보수 가 더 간단 해 지 는 장점 이 있 습니다 . . 그 각각 의 객체 들 만 손보 거나 붙이 면 되 니까요 . . 절차 적 언어 들 은 처음 부터 끝 까지 고쳐야 하 는 수 도 생길 수 있 거든요 . . 제각기 장단점 이 있 지만 유지 보수 가 쉽 고 큰 프로젝트 시 개발 속도 가 빠르 다는 장점 으로 많이 선호 하 는 편 입니다 . . = = = = = = = = = = = = = = = ========================= 객체 란 우리 가 주변 에서 흔히 볼 수 있 는 물체 또는 생각 할 수 있 는 그 어떤 것 을 말 하 며 , 객체 지향 프로그래밍 이 란 객체 를 중심 으로 하 여 프로그램 을 작성 하 는 방법 을 말 합니다 . 기존 의 c 언어 나 pascal 언어 는 절차 를 중심 으로 해서 만들 어 진 언어 인 반면 에 c ++ 이나 JAVA 스크립트 같 은 언어 는 절차 보다 는 문제 의 대상 ( 객체 ) 를 중심 으로 만드 는 언어 라고 할 수 있 죠