클래스란?
클래스는 객체를 만들기 위한 설계도로서, 클래스를 통해 객체를 정의 하고 생성한다.
인스턴스(Instance)
인스턴스는 클래스를 통해 만들어진 형태이다. 클래스가 객체의 설계도라면 설계도를 통해 실질적으로 만들어진 형태가 인스턴스 인 것이다. 그로므로 클래스를 통해 객체를 만드는 과정을 클래스의 인스턴스화라고 한다.
class 클래스명 {
/* 속성(변수) 작성*/
/* 기능(메서드) 작성*/
}
클래스명 변수명; // 클래스의 객체를 참조할 수 있는 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성하고 객체의 주소를 참조변수에 저장
클래스명 변수명 = new 클래스명(); // 한 번에 선언하는 경우
참조변수 : 변수라는 개념은 데이터를 저장하는 상자였다면 참조변수는 '데이터가 저장 되어 있는 주소'를 저장하는 특별한 변수이다. 연산자
new
에 의해서 인스턴스가 메모리의 빈 공간에 생성되고 난 다음 대입 연산자=
에 의해서 인스턴스가 저장된 메모리의 주소 값이 참주변수에 저장된다. 인스턴스는 인스턴스의 주소 값이 저장된 참조변수로 다룰 수 있다.변수에 접근할 경우 : 참조변수.변수명; 메서드를 실행시킬 경우 : 참조변수.메서드명();
// 인스턴스를 생성하고 다루는 코드
// 설계도가 있으므로 인스턴스를 원하는 개수만큼 생성가능하다.
class Car {
boolean powerOn;
String color;
int wheel;
int speed;
boolean wiperOn;
void power() {
powerOn = !powerOn;
}
void speedUp() {
speed++;
}
void speedDown() {
speed--;
}
void wiper() {
wiperOn = !wiperOn;
}
}
public class Class_practice_2 {
public static void main(String[] args) {
Car mycar1 = new Car();
Car mycar2 = new Car();
mycar1.color = "red";
mycar2.color = "black";
mycar1.speedUp();
mycar2.wiper();
System.out.println("mycar1의 색 : "+mycar1.color);
System.out.println("mycar2의 색 : "+mycar2.color);
System.out.println("mycar1의 속도 : "+mycar1.speed);
System.out.println("mycar2의 속도 : "+mycar2.speed);
System.out.println("mycar1의 와이퍼 작동 여부 : " + mycar1.wiperOn);
System.out.println("mycar2의 와이퍼 작동 여부 : " + mycar2.wiperOn);
}
}
/*
출력값
mycar1의 색 : red
mycar2의 색 : black
mycar1의 속도 : 1
mycar2의 속도 : 0
mycar1의 와이퍼 작동 여부 : false
mycar2의 와이퍼 작동 여부 : true
*/
인스턴스 변수
인스턴스 변수는 객체마다 가지는 고유한 변수이다. 인스턴스를 생성할 때 만들어지며 인스턴스마다 고유의 저장 공간을 가지므로 각각의 다른 값을 가질 수 있다. 다량의 인스턴스를 생성할 때 인스턴스마다 특별한 값을 가져야 할 경우 인스턴스 변수로 선언한다.
클래스 변수
클래스 변수는 클래스가 처음 메모리에 로딩될 때 생성된다. 그러므로 인스턴스를 생성 해야 사용할 수 있는 인스턴스 변수와는 달리 클래스변수는 인스턴스를 생성하지 않아도 사용가능 하다. 클래스를 선언하는 방법은 추가로 변수 선언부 맨 앞에 static 키워드를 붙여주면 된다.
class Cars {
static int wheel = 4; //클래스 변수
int speed; //인스턴스 변수
}
public class Class_practice_3 {
public static void main(String[] args) {
System.out.println(Cars.wheel); // 클래스 변수 접근 가능
// System.out.println(Cars.speed); 에러발생! 인스턴스 변수 접근 불가
Cars car1 = new Cars();
System.out.println(Cars.wheel);
System.out.println(car1.speed); // 인스턴스 생성 후에는 접근 가능
Cars car2 = new Cars();
System.out.println("<변경 전>");
System.out.println("car1.speed : " + car1.speed);
System.out.println("car2.speed : " + car2.speed);
System.out.println("car1.wheel : " + car1.wheel);
System.out.println("car2.wheel : " + car2.wheel);
car2.speed = 100;
car2.wheel = 5;
System.out.println("<변경 후>");
System.out.println("car1.speed : " + car1.speed);
System.out.println("car2.speed : " + car2.speed);
System.out.println("car1.wheel : " + car1.wheel);
System.out.println("car2.wheel : " + car2.wheel);
}
}