
우리는 클래스라는 것을 배우기 전부터 이미 클래스를 사용하고 있었다
자바에서는 모든 변수와 메소드들이 클래스 안에서만 작성된다.
그래서 클래스는 무엇이냐?
객체지향언어인 자바에서 객체를 만들기 위한 설계도 또는 틀이라고 정의할 수 있다.
클래스 : 객체를 정의해놓은 것
그럼 당연히도 객체는 클래스에 정의된대로 생성된다.
그렇다면 객체는 무엇을 의미하느냐 하면 사전적인 정의는 실제로 존재하는 것이다
주변에서 볼 수 있는 책상, 의자, 자동차 같은 사물들을 말한다.
그러나 객체지향이론에서는 유형의 사물 뿐만 아니라 무형적인 것들도 객체로 간주한다.
객체 : 속성(필드)와 기능(메소드)를 가지는 것
+ 클래스에 정의된 내용대로 메모리에 생성된 것
객체의 설계도가 클래스라 하였다.
클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
객체는 인스턴스를 포괄하는 의미이다.
두 개를 엄격히 구분할 필요는 없다. 그러나 좀 더 구체적으로 이해되게 이야기해보자면 이렇게 생각할 수 있다.
만약 Tv라는 객체를 생성하고자 한다고 가정해보자.
Tv는 색상, 볼륨, 채널 같은 속성을 가지고 있고
전원 켜기, 끄기, 채널 변경하기 같은 기능을 할 수 있다.
이를 설계도를 짜면 Tv 클래스가 된다.
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
Tv의 설계도가 완성되었다고 Tv가 만들어진게 아니다.
그것처럼 객체를 생성하기 위한 클래스가 만들어졌다고 인스턴스가 생성된 게 아니다.
클래스로부터 인스턴스를 생성해주어야 메모리 상에 실체화된 것이 된다.
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장
Tv t; // Tv클래스 타입의 참조변수 t 선언
t = new Tv(); // Tv인스턴스를 생성 후, 인스턴스의 주소를 변수 t에 저장
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
public class Main {
public static void main(String[] args) {
Tv t = new Tv();
t.channel = 7;
t.channelDown();
}
}
위의 코드는 Tv 클래로부터 인스턴스를 생성하고 인스턴스로 속성과 메소드를 사용하는 코드이다.
생성된 인스턴스는 참조변수로만 다룰 수 있고,
참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
기본 타입 8가지(boolean, char, byte, short, int, long, float, double)을 제외한 나머지의 모든 타입을 참조 타입이라고 한다.
참조 타입에는 배열 타입, Enum 타입, 클래스 타입, 인터페이스 타입 등이 있다.
기본 타입의 변수는 변수 안에 실제 값을 저장하지만,
참조 타입의 변수는 Heap 영역에 있는 객체의 참조값(≈ 주소값)을 갖고 있다.