자바보다 C++을 열심히 공부했어서 그런가.. 자바공부하면서 C++이 계속 아른거린다. 객체 개념은 자바로 익히고 실제 활용은 C++로 한 듯..
클래스 : 객체를 정의해놓은 것이며 객체를 생성하는데 사용.
객체(instance) : 클래스에 정의된 내용대로 메모리에 생성된 것.
ex) 붕어빵 틀 : 클래스, 붕어빵 : 객체
클래스명 변수명; //클래스 객체를 참조하는 참조변수 선언
변수명 = new 클래스명(); //객체 생성, 객체주소 참조변수에 저장
Tv t; //참조변수 t
t = new Tv(); //Tv 인스턴스 생성, 생성된 Tv 인스턴스 주소 t에 저장
객체 배열 안에는 객체의 주소가 저장된다. 즉 객체배열은 참조변수들을 하나로 묶은 참조 변수 배열이라고 할 수 있다.
Tv[] tvArr = new Tv[3]; // 객체배열 생성, but 객체 생성되지 않아 초기화필요
//이렇게 초기화하든가
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
//아니면 이렇게
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
//객체배열이 크면 포문 돌리면 된다.
class Card{
int num; //인스턴스 변수
static int width = 100; //클래스 변수
}
인스턴스 변수의 경우 각 객체가 다른 값을 가질 수 있다. 인스턴스변수는 인스턴스가 생성되었을 때 생성되므로 인스턴스마다 각기 다른 값을 가질 수 있다.
클래스 변수(static 붙은 것)는 클래스가 메모리에 올라갈 때 생성되며 모둔 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 가진다.
method area
클래스가 사용되면 해당 클래스의 .class 파일을 읽어 클래스 데이터를 저장. 그 클래스의 클래스 변수도 이 영역에 생성된다.
heap
인스턴스가 생성되는 공간. 인스턴스 변수들이 생성되는 공간
call stack
호출스택은 메서드 작업에 필요한 메모리 공간을 제공. 메서드가 호출되면 호출된 메서드를 위해 메모리가 할당되며 이 메모리는 메서드가 작동하는 동안 지역변수 매개변수들과 연산의 중간결과등을 저장하는데 사용된다. 메서드가 종료되면 할당되었던 메모리는 반환되어 비어진다.
기본형 : 변수의 값 read only
참조형 : read & write
메서드의 매개인자가 기본형이면
ex)
class Data {int x};
static void change(int x) {
x =1000;
} //변화가 없다.
static void change (Data d) {
d.x = 1000;
} //이 메서드를 써야 x 값이 변화된다.
하나의 메서드 이름으로 여러 기능을 구현하는 것.
조건 1. 메서드 이름이 같아야한다.
조건 2. 매개변수의 개수 또는 타입이 달라야한다.
가령..
Speak(Dog d) {
prinln("월월");
}
Speak(Cat c) {
println("야옹");
}
인스턴스 초기화 작업에 사용된다.
조건 1. 생성자의 이름은 클래스의 이름과 같아야한다.
조건 2. 생성자는 리턴 값이 없다.
class Car{
String color;
int door;
Car(String c, int d){
color = c;
door = d;
}
}
Car c = new Car("white", 4); //생성 및 초기화 완료.
지역변수는 사용하기 전 반드시 초기화!
int door = 4; 이렇게 직접
클래스 초기화 블럭
인스턴스 초기화 블럭
class BlockTest{
static {
//클래스 초기화 블럭
}
{
//인스턴스 초기화 블럭
}
}
-클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한 번 수행
-인스턴스 초기화 블럭은 생성자와 같이 인스턴스 생성될 때 마다 수행
생성자보다 인스턴스 초기화 블럭이 먼저 수행된다.
순서 : 클래스 변수 -> 클래스 초기화 블럭이 초기화
클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 한 번
인스턴스 "" : 인스턴스 생성될 때 마다 각각 초기화 이뤄진다
클래스변수 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
인스턴스변수 초기화순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자