Contents

조회 수 7462 댓글 0
Atachment
첨부 '2'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

객체란 무엇인가?

객체(Objects) 는 객체지향(Oriented-Object) 기술을 이해하기 위한 핵심 개념이다. 주위를 둘러보면 실제 세계의 객체들을 많이 찾아 볼 수 있다. 주로 강아지, 책상, 텔레비전, 자전거 등과 같은 것 들이다.  


이러한 실세계의 객체들은 두가지 특징을 가지고 있는데 바로 상태(State) 와 행동(Behavior) 을 가진다는 것이다. 예를 들어, 강아지는 이름, 색, 품종, 배고파함 등의 상태를 가지고 있으며, 짖다, 물어오다(Fetching), 꼬리를 흔들다 등의 행동들을 가지고 있다. 또 다른 예로 자전거라는 객체는 현재 기어, 현재 패달의 회전 속도, 바퀴 갯수, 기어의 단계수 등의 상태와 멈추다, 가속하다, 천천히 감속하다, 기어를 바꾸다 등의 행동을 가지고 있다. 


소프트웨어 객체는 실세계 객체를 바탕으로 모델링되어 진다. 소프트웨어 객체는 상태를 나타내기 위해 한개나 그 이상의 변수(Variables)들을 사용하며 행동들은 메서드(Method)로 표현된다. 메서드들을 다른 말로 하면 객체와 관련된 함수(서브루틴)라고 할 수 있다. 


(정의) 객체란 변수들과 그와 관련된 메서드들이 모여서 이룬 하나의 꾸러미이다. 


실세계 객체들은 소프트웨어 객체를 통해 표현되어질 수 있다. 혹여 누군가는 실제 강아지를 애니매이션 프로그램에서 사용하기 위해 소프트웨어 객체로 표현하거나, 실제 자전거를 운동을 위한 전자식 자전거 시스템에서 사용할 소프트웨어 객체로 표현하고 싶어 할지도 모른다. 그리고 실제 존재하지 않는 추상적인 객체들도 소프트웨어 객체로 사용할 수 있다. 예를 들어 이벤트(Event)는 GUI(Graphic User Interface) 윈도우 시스템에서 사용자가 버튼을 누른다거나 키보드의 키를 누르는 행위를 하나의 액션(Action)으로 나타내기 위해 사용하는 일반적인 추상 객체이다. 


다음의 그림은 소프트웨어 객체에 대해 표현하고 있다.


im1.jpg

[ 그림 1-1 ]


소프트웨어 객체가 알고 있는 것들(상태)과 할 수 있는 것들(행동)은 각각 변수와 메서드로서 나타내어진다. 실제 자전거를 객체로 모델링한 소프트웨어 객체는 자전거의 현재 상태(속도는 18mph, 패달의 회전 속도는 90rpm, 그리고 현재의 기어는 5단)를 나타내기 위해 여러 변수들을 가질 것이다. 이러한 변수들은 인스턴스 변수(instance variables)라고 알려져 있다. 왜냐하면, 이 변수들은 어떤 특정한 자전거 객체를 위한 변수들이고, 객체지향에서 이러한 특정 객체를 인스턴스라고 부르기 때문이다. (인스턴스는 객체라는 틀에 의해 생성된 실제 객체의 형태이다. 흔히들 붕어빵에 비유하곤 하는데, 보통 붕어빵을 찍는 틀을 객체(Object), 그 틀로부터 만들어진 각각의 붕어빵을 인스턴스(Instance)라고 일컫는다:역자주) 


다음 그림은 소프트웨어 객체로 모델링된 자전거를 나타낸다.


im2.jpg

[ 그림 1-2 ]



객체의 변수들에 더해서, 소프트웨어 자전거는 멈추다, 패달의 회전 속도를 높이다, 기어를 바꾸다 와 같은 행동을 위한 메서드들을 가진다. (자전거는 특별히 속도를 변화 시키는 메서드를 가지지 않는다. 왜냐하면, 자전거의 속도는 패달의 회전 속도와 기어의 상태를 통해 나타나는 결과물일 뿐이기 때문이다.) 이러한 메서드들을 인스턴스 메서드라고 부른다. 왜냐하면, 이 메서드들이 어떤 특


정한 자전거 인스턴스의 상태를 변화시킬 수 있기 때문이다. 


객체 도식(Diagram)에서 객체의 변수들은 중앙에 위치해 있는 것을 볼 수 있다. 그리고 메서드가 그 주위를 감싸고 있기 때문에 외부에서는 객체의 내부 즉, 변수들을 볼 수가 없다. 이처럼 메서드의 보호아래 객체의 변수들이 묶여있는 것을 캡슐화(Encapsulation) 이라고 한다. 메서드의 보호아래 객체의 중앙에서 변수들이 보호되고 있는 위와 같은 개념적인 그림은 객체를 표현하는 이상적인 모습이며, 객체지향 시스템을 설계하는 디자이너들이 추구하는 이상적인 모습이다. 그러나 이것이 전부가 아니며 종종 현실적인 이유로 인해 변수를 노출시키거나 메서드를 숨겨야 할 때도 있다. 자바 프로그래밍 언어에서 각각의 변수와 메서드는 네가지 접근레벨 중에서 하나의 레벨로 설정된다. 접근레벨은 어떤 객체와 클래스가 변수와 메서드에 접근할지를 판단한다. 


캡슐화는 단순하지만 강력한 아이디어로써 소프트웨어 개발자에게 다음과 같은 두가지 이점을 제공한다. 


1. 모듈성(Modularity)

하나의 객체를 위한 소스코드는 다른 객체를 위한 코드에서 독립적으로 사용되어 질 수 있다. 또한, 객체는 시스템 어디에서나 쉽게 적용될 수 있는데, 어떤 이에 의해 만들어진 자전거 객체는 다른 누군가가 아무 수정을 가하지 않고 자신의 시스템에 바로 적용시킬 수 있다.


2. 정보은닉(Information hiding)

객체는 다른 객체의 접근을 허용하기 위해 PUBLIC 이라는 접근단계를 가지고 있다. 객체는 그 객체를 참조하는 다른 객체에게는 아무 영향도 끼치지 않고, 자신의 PRIVATE 변수와 메서드를 언제든 수정할 수 있다. 실제로 자전거가 어떤 원리에 의해 움직이는지 자전거를 타는 사람은 알 필요가 없다는 말이다. (외부 객체에게는 인터페이스만을 제공하므로 private 로 묶인 변수나 메서드는 그 객체만이 접근할 수 있다. 즉, 이러한 private 변수나 메서드는 내부 구현을 위해 사용되는 것으로써, 외부 객체는 내부적으로 어떤 행동들이 발생하는지는 전혀 알 필요가 없다는 의미이다.)



[출처] The Java Tutorial (http://java.sun.com/docs/books/tutorial/java/concepts/object.html)
[출처] Tong - sjhfeel님의 자바익히기 대작전!!통




?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
419 Develop [c++] 윈도우 API 정복 예제 file hooni 2013.04.23 7708
418 PPT [doc] 방송통신공학회 논문지(학술대회) file hooni 2013.04.23 14204
417 Develop [c] 거리와 각도를 입력받아서 좌표로 변환 file hooni 2013.04.23 10908
416 Develop [c++] 퍼즐 버블버블 간단한 원리(사용공식) file hooni 2013.04.23 10065
415 Develop [c] 문자열 자르는 함수(strtok) 예제 hooni 2013.04.23 12290
414 System/OS [ms-sql] 프로시져 예제.. file hooni 2013.04.23 13759
» Develop 객체지향 프로그래밍에 대한 개념.. (객체) file hooni 2013.04.23 7462
412 Develop [jsp] 초간단한 include 구문 예제.. file hooni 2013.04.23 7350
411 System/OS [unix] AIX쉘 초기 파일 (.cshrc) hooni 2013.04.23 10607
410 Develop [php] 데이터를 엑셀,워드 형태로 변환할 때 헤더(ms-office) hooni 2013.04.23 7598
409 Develop [jsp] 페이지에 한글이 정상적으로 보이지 않을 때.. hooni 2013.04.23 8233
408 Develop [asp] 기본 문법과 제어문 hooni 2013.04.23 7249
Board Pagination Prev 1 ... 59 60 61 62 63 64 65 66 67 68 ... 98 Next
/ 98