실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용으로 이루어져 있다.
즉, 프로그램을 여러개의 독립된 단위인 객체들의 모임으로 파악하고자 하는 것이다.
실제 사물의 속성과 기능을 분석한 다음, 데이터(변수)와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상세계를 구현하고 이 가상세계에서 모의실험을 함으로써 많은 시간과 비용을 절약할 수 있다.
객체지향이론은 상속, 캡슈화, 추상화 개념을 중심으로 점차 구체적으로 발전
코드의 재사용성이 높다.
새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
코드의 관리가 용이하다.
코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
신뢰성이 높은 프로그래밍을 가능하게 한다.
제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
클래스란 '객체를 정의해놓은 것' 또는 '객체의 설계도 또는 틀'이라고 정의할 수 있다.
클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용된다.
객체의 사전적인 정의는 우리가 주변에서 볼 수 있는 책상, 의자, 자동차 같은 실제로 존재하는 사물들이 곧 객체이다.
객체의 정의 : 실제로 존재하는 것. 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
유형의 객체 : 책상, 의자, 자동차, TV와 같은 사물
무형의 객체 : 수학 공식, 프로그램 에러와 같은 논리나 개념
예를 들면 제품 설계도와 제품과의 관계라고 할 수 있다.
ex) TV설계도(클래스), TV제품(객체)
클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다.
-> 우리가 원하는 기능의 객체를 사용하기 위해서는 먼저 클래스로부터 객체를 생성하는 과정이 선행되어야 한다.
클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해 제품을 만드는 이유와 같다. 클래스를 한번만 잘 만들어 놓기만 하면, 매번 객체를 생성할 때마다 클래스로부터 객체를 생성해서 사용하기만 하면 되는 것이다.
JDK(Java Development Kit)에서는 프로그래밍을 위해 많은 수의 유용한 클래스(Java API)를 기본적으로 제공하고 있으며, 우리는 이 클래스를 이용해서 원하는 기능의 프로그램을 보다 쉽게 작성할 수 있다.
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
객체는 속성과 기능,두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
즉, 객체는 속성과 기능의 집합이라고 할 수 있다. 그리고 객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원, member)라 한다.
속성(property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
기능(function) : 메서드(method), 함수(function), 행위(behavior)
class Tv {
//Tv의 속성(멤버 변수)
String color; // Tv색상
boolean power; // 전원상태(on/off)
int channel; // 채널
//Tv의 기능(메서드)
void power() { power != power ;} // Tv를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel; } // Tv의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // Tv의 채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]) {
Tv t; // Tv 인스턴스를 참조하기 위한 변수 t를 선언
t = new Tv(); // Tv 인스턴스를 생성
t.channel = 7; // Tv 인스턴스의 멤버변수 channel의 값을 7로 초기화
t.channelDown(); // Tv 인스턴스의 메서드 channelDown()을 호출
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
// 실행결과
// 현재 채널은 6 입니다.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
Tv tv1, tv2, tv3;
3개의 클래스가 같은 객체를
Tv[] tvArr = new Tv[3];
으로 배열을 만들 수 있다.
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
이처럼 객체를 생성해야 한다.
하지만 여러 종류의 객체를 하나의 배열에 저장할 수 있는 방법도 있다.