클래스 : 메모리 할당 전에는 존재하지 않는다.
-> 프로그램 내에서 독립적인 업무를 처리할 수있는 모듈
객체의 정의 : 실제로 존재하는 것, 사물 또는 개념.
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름.
유형의 객체 : 책상, 의자, 자동차등과 같은 사물.
무형의 객체 : 수학공식, 프로그램 에러와 같은 논리나 개념.
!-- 소프트웨어적인 추상화를 한 것. --!
Class : 객체가 가지는 설계도(blueprint) 또는 프로토타입(prototype)
- Attribute 와 Method를 갖는다.
클래스라는 것은 있으나, 물리적으로 존재하지 않는것.
홍길동이라고 선언하면 그것이 인스턴스화 된 것이며, 홍길동이라는 객체로 존재하게 된다.
!-- Class를 선언하여, 메모리 공간에 할당한 것. --!
Instance : 클래스의 선언(new) 을 통해 만들어진 제품.
ㄴ instantiate 되어 메모리 공간을 차지하게 되면 인스턴스라고 부른다.
Object : class가 instance화 되었을 때, 객체(Object)라고 부른다.
**정리하면
Class : 재사용성(reusability)의 장점을 제공한다.
Object : 높은 모듈성(modularity)과 정보은닉(information hiding)의 장점을 제공.
좋은 객체를 만드는 기본 규칙: 데이터 말고 기능 제공해 줘!
좋은 객체가 한 번에 나오면 좋겠지만, 설계란 그리 호락호락하지 않음을 누구나 알고 있다. 그래서 지속적으로 설계가 바뀌게 되고, 그렇기에 리팩토링이 구현에서 중요한 과정이 되는 것이다. 하지만, 출발점을 좋게 잡을 수는 있다. 그 중 하나가 다음에 따라 객체의 기능을 제공하는 것이다.
-
데이터를 달라고 하지 않고, 메소드를 통해 처리를 부탁하기!
-
데이터 조회 기능은 필요한 경우에 한정해서 제공한다.
위 규칙에 따라 객체를 설계하다보면 자연스럽게 객체들 사이로 데이터가 흘러다니는 것을 줄이고, 객체가 내부 내장을 드러내지 않고 (즉, 캡슐화하고) 알맞은 기능을 제공하도록 만들 확률을 높일 수 있게 된다.
내용 정리
간단하게 내용을 정리해 보자.
-
객체는 기능을 제공하는 역할을 수행하며, 객체의 내부가 어떻게 구현되었는지는 숨긴다.
-
각 객체는 메시지를 주고 받으며 협업하며, 이를 통해 하나의 완성된 기능을 제공한다.
-
객체 지향은 변화의 영향이 주변으로 퍼져나가는 것을 감소시켜 유지보수 비용을 줄여준다.
'JAVA > OOP' 카테고리의 다른 글
OOP : Polymorphism (상속/인터페이스에 의한 다형성) (0) | 2015.02.04 |
---|---|
OOP : Abstraction (추상화) (0) | 2015.02.04 |
객체지향의 5원칙 (SOLID) (0) | 2015.02.04 |
OOP : Abstraction, Encapsulation, Inheritance and Polymorphism (0) | 2015.02.04 |
객체지향언어 (Object Oriented Programming Language) (0) | 2015.02.04 |