6.1 클래스와 객체 (Classes and Objects)
자바는 진정한 객체지향(Object-Oriented Programming, OOP) 언어입니다. 현실 세계의 사물이나 개념을 컴퓨터 프로그램에 '객체'라는 형태로 모델링하는 것이 객체지향의 핵심입니다.
1. 클래스와 객체의 정의
클래스 (Class)
- 정의: 객체를 정의해 놓은 설계도 또는 틀.
- 용도: 객체를 생성하는 데 사용됩니다. (예: 붕어빵 기계, TV 설계도)
객체 (Object / Instance)
- 정의: 실제로 존재하는 사물 또는 개념 (클래스에 의해 메모리에 생성된 실체).
- 용도: 객체가 가지고 있는 기능과 속성에 따라 다르게 사용됩니다. (예: 만들어진 붕어빵 팥/슈크림, 각각 판매되는 TV 제품들)
클래스로부터 어떤 객체를 만드는 과정을 클래스의 인스턴스화(instantiate) 라고 하며, 그 결과로 만들어진 객체를 그 클래스의 인스턴스(instance) 라고 합니다.
2. 객체의 구성 요소
객체는 다수의 속성과 다수의 기능을 가지며, 이를 클래스 내에 정의합니다. 자바에서는 이들을 다음과 같이 부릅니다.
- 속성(Property):
멤버 변수(Member variable),필드(Field) - 기능(Function):
메서드(Method)
클래스 작성 예시
class Tv {
// 속성 (멤버 변수)
String color; // 색상
boolean power; // 전원상태
int channel; // 채널
// 기능 (메서드)
void power() { power = !power; } // 전원을 켜고 끄는 기능
void channelUp() { channel++; } // 채널 높이는 기능
void channelDown() { channel--; }// 채널 낮추는 기능
}
3. 객체의 생성과 사용
클래스를 선언한 것만으로는 안 되며, 반드시 인스턴스(객체)를 생성해야만 변수와 메서드를 사용할 수 있습니다.
// 1. 객체를 다루기 위한 참조 변수 선언
Tv t;
// 2. 객체를 생성하고 생성된 객체의 주소를 참조변수에 저장 (인스턴스화)
t = new Tv();
// 객체의 사용
t.channel = 7; // Tv 인스턴스의 멤버변수 channel의 값을 7로 변경
t.channelDown(); // Tv 인스턴스의 메서드 channelDown()을 호출
System.out.println("현재 채널은 " + t.channel + " 입니다."); // 6 출력
클래스 하나를 정의해두면 언제든지 수많은 독립적인 인스턴스를 마음껏 찍어내 생성할 수 있다는 점이 OOP의 매력입니다. 서로 다른 여러 개의 인스턴스를 생성하면 각각 독립적인 속성(채널, 색상 등)을 유지할 수 있습니다.