클래스란 '객체를 정의해놓은 것.' 또는 클래스는 객체의 설계도 또는 틀'이라고 저의할 수 있습니다. 클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성됩니다.
클래스 : 객체
붕어빵틀 : 붕어빵
Tv 설계도 : Tv
객체는 속성과 기능, 두 종류이 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
속성(property) -> 멤버변수(variable)
기능(function) -> 메서드(method)
Class Tv{
//Tv의 속성
String color ; // 색깔
boolean power ; // 전원 상태
int Channel; //채널
// Tv의 기능
void Power(){ power = !power ; }
void channelUp() { channel++; }
void channelDown() { channel--; }
}
클래스로부터 객체를 만드는 과정을 클래의 인스턴스화(instatiate)라고 하며, 어떤 클래스로 만들어진 객체를 그 클래스의 인스턴스(instance)
'책상은 인스턴스다'라고 하기보다는
'책상은 객체다'가 더 자연스럽다.
'책상은 책상클래스의 객체다'보다는
'책상은 책상클래스의 인스턴스다'가 던 자연스럽다.
클래스 -----인-스-턴-스-화--- > 인스턴스(객체)
하나의 소스 파일에 하나의 클래스를 정의하는 것이 보통이지만, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능합니다.
주의할점은 소스파일의 이름은 소스 파일내 public class와 일치해야 합니다. public class가 없다면 소스파일의 이름은 소스파일 내의 어떤 클래스의 이름으로 해도 상관 없습니다.
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스 객체를 생성 후, 객체의 주소를 참조변수에 저장
일반적으로 클래스로부터 인스턴스를 생성하는 방법은 이와 같습니다.
class Ex6_1{
public static void main(String[] args){
Tv t; // Tv인스턴스 참조하기 위한 참조 변수 t 선언
t = new Tv(); // Tv 인스턴스 생성한다.
t.channel = 7; // 멤버변수 channel의 값은 7로 한다.
t.channelDown(); // 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다");
}
}
--------------------------------------------------------
현재 채널은 6 입니다.
--------------------------------------------------------
Tv tv1, tv2, tv3;
많은 수의 객체를 다뤄야 할 때는 배열로 다루면 편리 합니다.
정확하게는 객체 배열 안에 객체가 저장되는 것은 아닌 객체의 주소가 저장됩니다.
Tv[] tvArr = new Tv[3];
길이가 3인 객체 배열 tvArr을 생성하고, 각 요소는 참조변수의 기본값인 null로 자동 초기화됩니다. 생성된 참조 변수 들에 객체를 생성하여 배열의 각 요소에 저장
Tv[] tvArr = new Tv[3]; // 참조변수배열(객체배열)생성
// 생성된 참조 변수 들에 객체를 생성하여 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
배열의 초기화블럭을 사용하면, 다음과 같이 한 줄로 간단히 할 수 도 있습니다.
Tv[] tvArr = { new Tv(), new Tv(), new Tv()};
다뤄야할 객체의 수가 많을 때는 for문을 사용하면 됩니다.
Tv[] tvArr = new Tv[100];
for( int i = 0 ; i < TvArr.length ; i ++ ) {
tvArr[i] = new Tv();
}